Compare commits
31 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 895d4d5cf1 | |||
| 801f0b95e7 | |||
| 11979240ab | |||
| bef6cbb212 | |||
| 032a89e0cd | |||
| c9afb6df02 | |||
| b8092447ff | |||
| bff20bea49 | |||
| 87f2d9c85f | |||
| 154dfc8538 | |||
| fddcdfb3aa | |||
| a305db7b13 | |||
| 58b1cd4b12 | |||
| 5e7559e43f | |||
| 2a74e35388 | |||
| 5b9bef79da | |||
| 9da6cbf097 | |||
| 4a1c81ffb4 | |||
| be26f5168b | |||
| 4e6c75995c | |||
| df693ce0c2 | |||
| f0236d7ad5 | |||
| 1d3e2b5c16 | |||
| 545d257135 | |||
| f5164d2102 | |||
| 9af83be9a7 | |||
| ad7543e7bc | |||
| 1bd0db013b | |||
| e1fc23a1bb | |||
| 2d551a3f73 | |||
| 9b205366f7 |
@ -142,6 +142,20 @@ class DefaultJsApi(var context: Context) {
|
||||
context?.startActivity(ViewImageActivity.getViewImageIntent(context, imageEvent.imageList, imageEvent.position, "浏览器"))
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
fun isInstalled(event: Any): String {
|
||||
val localInstalledPackageList = PackageUtils.getAllPackageName(HaloApp.getInstance().application)
|
||||
val packageNameList: ArrayList<String> = event.toString().toObject() ?: ArrayList()
|
||||
|
||||
for (packageName in packageNameList) {
|
||||
if (!localInstalledPackageList.contains(packageName)) {
|
||||
return "false"
|
||||
}
|
||||
}
|
||||
|
||||
return "true"
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
fun openBase64Image(event: Any) {
|
||||
val context = CurrentActivityHolder.getCurrentActivity()
|
||||
|
||||
@ -4,15 +4,14 @@ import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.text.TextUtils
|
||||
import com.gh.common.util.CheckLoginUtils
|
||||
import com.gh.common.util.DialogUtils
|
||||
import com.gh.common.util.DirectUtils
|
||||
import com.gh.common.util.*
|
||||
import com.gh.common.util.DirectUtils.directToGameDetailVideoStreaming
|
||||
import com.gh.common.util.DirectUtils.directToGameVideo
|
||||
import com.gh.common.util.DirectUtils.directToVideoDetail
|
||||
import com.gh.common.util.EntranceUtils
|
||||
import com.gh.gamecenter.*
|
||||
import com.gh.gamecenter.entity.CommunityEntity
|
||||
import com.gh.gamecenter.entity.SimpleGameEntity
|
||||
import com.gh.gamecenter.entity.SubjectRecommendEntity
|
||||
import com.gh.gamecenter.entity.VideoLinkEntity
|
||||
import com.gh.gamecenter.subject.SubjectActivity
|
||||
@ -125,11 +124,11 @@ object DefaultUrlHandler {
|
||||
val categoryId = uri.getQueryParameter("category_id") ?: ""
|
||||
val link = uri.getQueryParameter("link") ?: ""
|
||||
val linkEntity = VideoLinkEntity(title, categoryId, link)
|
||||
// if (!CheckLoginUtils.isLogin()) {
|
||||
// HaloApp.put(EntranceUtils.HOST_UPLOAD_VIDEO, linkEntity)
|
||||
// }
|
||||
val gameId = uri.getQueryParameter("gameId") ?: ""
|
||||
val gameName = uri.getQueryParameter("gameName") ?: ""
|
||||
val simpleGameEntity = SimpleGameEntity(gameId, gameName)
|
||||
CheckLoginUtils.checkLogin(context, null, true, EntranceUtils.ENTRANCE_BROWSER) {
|
||||
DirectUtils.directToVideoManager(context, linkEntity, EntranceUtils.ENTRANCE_BROWSER, "")
|
||||
DirectUtils.directToVideoManager(context, linkEntity, simpleGameEntity, EntranceUtils.ENTRANCE_BROWSER, "")
|
||||
}
|
||||
}
|
||||
EntranceUtils.HOST_USERHOME -> {
|
||||
@ -215,13 +214,30 @@ object DefaultUrlHandler {
|
||||
}
|
||||
|
||||
EntranceUtils.HOST_GAME_UPLOAD -> {
|
||||
DirectUtils.directGameUpload(context,entrance = entrance, path = "")
|
||||
DirectUtils.directGameUpload(context, entrance = entrance, path = "")
|
||||
}
|
||||
|
||||
else -> DialogUtils.showLowVersionDialog(context)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
if (url.startsWith("alipays:") || url.startsWith("alipay")) {
|
||||
try {
|
||||
context.startActivity(Intent("android.intent.action.VIEW", Uri.parse(url)))
|
||||
} catch (e: java.lang.Exception) {
|
||||
ToastUtils.showToast("请安装支付宝客户端")
|
||||
}
|
||||
return true
|
||||
} else if (url.startsWith("weixin")) {
|
||||
try {
|
||||
context.startActivity(Intent("android.intent.action.VIEW", Uri.parse(url)))
|
||||
} catch (e: java.lang.Exception) {
|
||||
ToastUtils.showToast("请安装微信客户端")
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
if ("http" != uri.scheme && "https" != uri.scheme) return true
|
||||
return false
|
||||
}
|
||||
|
||||
@ -677,10 +677,11 @@ object DirectUtils {
|
||||
* 跳转至上传视频
|
||||
*/
|
||||
@JvmStatic
|
||||
fun directToVideoManager(context: Context, linkEntity: VideoLinkEntity, entrance: String? = null, path: String? = "") {
|
||||
fun directToVideoManager(context: Context, linkEntity: VideoLinkEntity,simpleGameEntity: SimpleGameEntity, entrance: String? = null, path: String? = "") {
|
||||
val bundle = Bundle()
|
||||
bundle.putString(KEY_PATH, path)
|
||||
bundle.putParcelable(VideoLinkEntity::class.java.simpleName, linkEntity)
|
||||
bundle.putParcelable(SimpleGameEntity::class.java.simpleName, simpleGameEntity)
|
||||
bundle.putString(KEY_TO, VideoManagerActivity::class.java.name)
|
||||
bundle.putString(KEY_ENTRANCE, BaseActivity.mergeEntranceAndPath(entrance, path))
|
||||
jumpActivity(context, bundle)
|
||||
|
||||
@ -159,7 +159,7 @@ object LoginHelper {
|
||||
if (mAccessToken?.isSessionValid == true) {
|
||||
// 保存 Token 到 SharedPreferences
|
||||
AccessTokenKeeper.writeAccessToken(context, mAccessToken)
|
||||
Toast.makeText(context, "授权成功", Toast.LENGTH_SHORT).show()
|
||||
Utils.toast(context, "授权成功")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -24,6 +24,9 @@ import android.widget.PopupWindow;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.facebook.common.references.CloseableReference;
|
||||
import com.facebook.datasource.DataSource;
|
||||
import com.facebook.imagepipeline.datasource.BaseBitmapDataSubscriber;
|
||||
@ -54,9 +57,6 @@ import java.lang.ref.WeakReference;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import static com.gh.common.util.LoginHelper.WEIBO_SCOPE;
|
||||
|
||||
/**
|
||||
@ -247,17 +247,17 @@ public class ShareUtils {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
contentView.setOnClickListener(v -> popupWindow.get().dismiss());
|
||||
contentView.setOnClickListener(v -> safelyDismiss());
|
||||
|
||||
contentView.setOnKeyListener((v, keyCode, event) -> {
|
||||
if (keyCode == KeyEvent.KEYCODE_BACK
|
||||
&& event.getRepeatCount() == 0
|
||||
&& popupWindow != null
|
||||
&& popupWindow.get() != null
|
||||
&& popupWindow.get().isShowing()) {
|
||||
if (callBack != null) {
|
||||
callBack.onCancel();
|
||||
}
|
||||
popupWindow.get().dismiss();
|
||||
safelyDismiss();
|
||||
}
|
||||
return false;
|
||||
});
|
||||
@ -298,7 +298,7 @@ public class ShareUtils {
|
||||
}
|
||||
|
||||
if (mShareEntrance != ShareEntrance.shareGh) {
|
||||
popupWindow.get().dismiss();
|
||||
safelyDismiss();
|
||||
}
|
||||
}
|
||||
|
||||
@ -338,7 +338,7 @@ public class ShareUtils {
|
||||
|
||||
loadBitMap(shareIcon, msg, req);
|
||||
if (mShareEntrance != ShareEntrance.shareGh) {
|
||||
popupWindow.get().dismiss();
|
||||
safelyDismiss();
|
||||
}
|
||||
}
|
||||
|
||||
@ -454,7 +454,7 @@ public class ShareUtils {
|
||||
}
|
||||
|
||||
if (mShareEntrance != ShareEntrance.shareGh) {
|
||||
popupWindow.get().dismiss();
|
||||
safelyDismiss();
|
||||
}
|
||||
}
|
||||
|
||||
@ -499,7 +499,7 @@ public class ShareUtils {
|
||||
|
||||
loadBitMap(shareIcon, msg, req);
|
||||
if (mShareEntrance != ShareEntrance.shareGh) {
|
||||
popupWindow.get().dismiss();
|
||||
safelyDismiss();
|
||||
}
|
||||
}
|
||||
|
||||
@ -520,7 +520,7 @@ public class ShareUtils {
|
||||
|
||||
|
||||
if (mShareEntrance != ShareEntrance.shareGh) {
|
||||
popupWindow.get().dismiss();
|
||||
safelyDismiss();
|
||||
}
|
||||
}
|
||||
|
||||
@ -562,8 +562,8 @@ public class ShareUtils {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
if (mShareEntrance != ShareEntrance.shareGh) {
|
||||
popupWindow.get().dismiss();
|
||||
if (mShareEntrance != ShareEntrance.shareGh ) {
|
||||
safelyDismiss();
|
||||
}
|
||||
}
|
||||
|
||||
@ -575,7 +575,7 @@ public class ShareUtils {
|
||||
cmb.setText(copyContent);
|
||||
if (mShareEntrance != ShareEntrance.shareGh) {
|
||||
Utils.toast(mContext, "复制成功");
|
||||
popupWindow.get().dismiss();
|
||||
safelyDismiss();
|
||||
} else {
|
||||
Utils.toast(mContext, "复制成功,请到微信/QQ粘贴分享");
|
||||
}
|
||||
@ -661,7 +661,7 @@ public class ShareUtils {
|
||||
break;
|
||||
case 7:
|
||||
if (mShareEntrance != ShareEntrance.shareGh) {
|
||||
popupWindow.get().dismiss();
|
||||
safelyDismiss();
|
||||
} else {
|
||||
shareType = "copy_link";
|
||||
LogUtils.uploadShareType(shareType, shareEntrance.getName(), shareUrl, mTitle, mSummary, resourceId);
|
||||
@ -689,6 +689,12 @@ public class ShareUtils {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void safelyDismiss() {
|
||||
if (popupWindow.get() != null) {
|
||||
popupWindow.get().dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
interface OnItemClickListener {
|
||||
void onItemClick(int position);
|
||||
|
||||
@ -3,6 +3,7 @@ package com.gh.common.util
|
||||
import android.widget.Toast
|
||||
|
||||
import com.halo.assistant.HaloApp
|
||||
import com.lightgame.utils.toast.ToastHandler
|
||||
|
||||
object ToastUtils {
|
||||
/** 之前显示的内容 */
|
||||
@ -32,7 +33,7 @@ object ToastUtils {
|
||||
*/
|
||||
fun showToast(message: String, gravity: Int = -1, yOffset: Int = 0) {
|
||||
if (mToast == null) {
|
||||
mToast = Toast.makeText(HaloApp.getInstance().application, message, Toast.LENGTH_SHORT)
|
||||
mToast = ToastHandler.INSTANCE.getToastInstance(HaloApp.getInstance().application, message, Toast.LENGTH_SHORT)
|
||||
if (gravity != -1) mToast!!.setGravity(gravity, 0, yOffset) else
|
||||
mToast!!.setGravity(DisplayUtils.getToastDefaultGravity(), 0, DisplayUtils.getToastOffset())
|
||||
mToast!!.show()
|
||||
|
||||
@ -61,7 +61,7 @@ object VideoRecordUtils {
|
||||
if (!UserManager.getInstance().isLoggedIn) return
|
||||
val requestMap = HashMap<String, Any>()
|
||||
val videoIds = videoRecordSet.toList().map { it.videoId }
|
||||
requestMap["g_id"] = HaloApp.getInstance().gid
|
||||
requestMap["g_id"] = HaloApp.getInstance().gid ?: ""
|
||||
requestMap["time"] = time
|
||||
requestMap["video_id"] = videoIds
|
||||
RetrofitManager.getInstance(HaloApp.getInstance().application).api
|
||||
|
||||
@ -190,8 +190,8 @@ class AdBannerView : LinearLayout {
|
||||
|
||||
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
|
||||
val ad = mDatas[position % mDatas.size]
|
||||
val view = holder.itemView as ImageView
|
||||
Picasso.with(context).load(ad.image).into(view)
|
||||
val view = holder.itemView as SimpleDraweeView
|
||||
ImageUtils.display(view,ad.image)
|
||||
holder.itemView.setOnClickListener {
|
||||
onItemClick?.invoke(position % mDatas.size)
|
||||
}
|
||||
|
||||
@ -194,6 +194,8 @@ public class ExpandTextView extends AppCompatTextView {
|
||||
|
||||
msp.replace(expandTextStartPosition, length, finalEndText + mExpandText);
|
||||
|
||||
if (expandTextStartPosition + mEndText.length() >= msp.length()) return;
|
||||
|
||||
msp.setSpan(new ClickableSpan() {
|
||||
@Override
|
||||
public void updateDrawState(@NonNull TextPaint ds) {
|
||||
|
||||
@ -269,6 +269,7 @@ public class NestedScrollWebView2 extends DWebView implements NestedScrollingChi
|
||||
ev.setAction(MotionEvent.ACTION_CANCEL);
|
||||
returnValue = super.onTouchEvent(ev);
|
||||
}
|
||||
initVelocityTrackerIfNotExists();
|
||||
final VelocityTracker velocityTracker = mVelocityTracker;
|
||||
velocityTracker.computeCurrentVelocity(1000, mMaximumVelocity);
|
||||
int initialVelocity = (int) velocityTracker.getYVelocity(mActivePointerId);
|
||||
|
||||
@ -75,6 +75,12 @@ public class DWebView extends WebView {
|
||||
}
|
||||
}
|
||||
|
||||
@Keep
|
||||
@JavascriptInterface
|
||||
public String call(String methodName) {
|
||||
return call(methodName, "");
|
||||
}
|
||||
|
||||
@Keep
|
||||
@JavascriptInterface
|
||||
public String call(String methodName, String argStr) {
|
||||
@ -93,7 +99,7 @@ public class DWebView extends WebView {
|
||||
PrintDebugInfo(error);
|
||||
return ret.toString();
|
||||
}
|
||||
Object arg=null;
|
||||
Object arg = null;
|
||||
Method method = null;
|
||||
String callback = null;
|
||||
|
||||
@ -102,7 +108,7 @@ public class DWebView extends WebView {
|
||||
if (args.has("_dscbstub")) {
|
||||
callback = args.getString("_dscbstub");
|
||||
}
|
||||
if(args.has("data")) {
|
||||
if (args.has("data")) {
|
||||
arg = args.get("data");
|
||||
}
|
||||
} catch (JSONException e) {
|
||||
@ -123,7 +129,10 @@ public class DWebView extends WebView {
|
||||
try {
|
||||
method = cls.getMethod(methodName, new Class[]{Object.class});
|
||||
} catch (Exception ex) {
|
||||
|
||||
try {
|
||||
method = cls.getMethod(methodName, new Class[]{});
|
||||
} catch (Exception ignore) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -187,7 +196,12 @@ public class DWebView extends WebView {
|
||||
}
|
||||
});
|
||||
} else {
|
||||
retData = method.invoke(jsb, arg);
|
||||
Class<?>[] methodParameterTypes = method.getParameterTypes();
|
||||
if (methodParameterTypes.length == 0) {
|
||||
retData = method.invoke(jsb);
|
||||
} else {
|
||||
retData = method.invoke(jsb, arg);
|
||||
}
|
||||
ret.put("code", 0);
|
||||
ret.put("data", retData);
|
||||
return ret.toString();
|
||||
@ -307,7 +321,10 @@ public class DWebView extends WebView {
|
||||
try {
|
||||
method = cls.getMethod(nameStr[1], new Class[]{Object.class});
|
||||
} catch (Exception ex) {
|
||||
|
||||
try {
|
||||
method = cls.getMethod(nameStr[1], new Class[]{});
|
||||
} catch (Exception ignore) {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (method != null) {
|
||||
@ -336,7 +353,7 @@ public class DWebView extends WebView {
|
||||
|| javascriptCloseWindowListener.onClose()) {
|
||||
Context context = getContext();
|
||||
if (context instanceof Activity) {
|
||||
((Activity)context).onBackPressed();
|
||||
((Activity) context).onBackPressed();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -359,7 +376,7 @@ public class DWebView extends WebView {
|
||||
|
||||
@Keep
|
||||
@JavascriptInterface
|
||||
public void returnValue(final Object obj){
|
||||
public void returnValue(final Object obj) {
|
||||
runOnMainThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
@ -422,9 +439,9 @@ public class DWebView extends WebView {
|
||||
runOnMainThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (url != null && url.startsWith("javascript:")){
|
||||
if (url != null && url.startsWith("javascript:")) {
|
||||
DWebView.super.loadUrl(url);
|
||||
}else{
|
||||
} else {
|
||||
callInfoList = new ArrayList<>();
|
||||
DWebView.super.loadUrl(url);
|
||||
}
|
||||
@ -444,9 +461,9 @@ public class DWebView extends WebView {
|
||||
runOnMainThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (url != null && url.startsWith("javascript:")){
|
||||
if (url != null && url.startsWith("javascript:")) {
|
||||
DWebView.super.loadUrl(url, additionalHttpHeaders);
|
||||
}else{
|
||||
} else {
|
||||
callInfoList = new ArrayList<>();
|
||||
DWebView.super.loadUrl(url, additionalHttpHeaders);
|
||||
}
|
||||
@ -996,7 +1013,4 @@ public class DWebView extends WebView {
|
||||
mainHandler.post(runnable);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -17,11 +17,11 @@ import android.webkit.WebView
|
||||
import android.webkit.WebViewClient
|
||||
import android.widget.ScrollView
|
||||
import android.widget.TextView
|
||||
import com.gh.base.BaseActivity
|
||||
import com.gh.base.ToolBarActivity
|
||||
import com.gh.common.util.CommentUtils
|
||||
import com.gh.common.util.DeviceUtils
|
||||
import com.gh.common.util.DialogUtils
|
||||
import com.gh.common.util.tryCatchInRelease
|
||||
import com.gh.gamecenter.retrofit.Response
|
||||
import io.reactivex.Observable
|
||||
import io.reactivex.ObservableOnSubscribe
|
||||
@ -67,85 +67,85 @@ class NetworkDiagnosisActivity : ToolBarActivity() {
|
||||
|
||||
Observable.create(ObservableOnSubscribe<ProgressAndDetail> {
|
||||
|
||||
var progress = 0
|
||||
var progress = 0
|
||||
|
||||
// 1.获取当前网络情况,network/ip/mac/sim
|
||||
// 1.获取当前网络情况,network/ip/mac/sim
|
||||
|
||||
// Network 2G/3G/4G/WIFI
|
||||
builder.append("Network:")
|
||||
builder.append(DeviceUtils.getNetwork(applicationContext))
|
||||
// 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")
|
||||
|
||||
progress += 3
|
||||
it.onNext(ProgressAndDetail(progress, builder.toString()))
|
||||
|
||||
// IP
|
||||
builder.append("IP:")
|
||||
builder.append(DeviceUtils.getIPAddress(applicationContext))
|
||||
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()))
|
||||
}
|
||||
|
||||
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.onComplete()
|
||||
}).subscribeOn(Schedulers.io())
|
||||
it.onComplete()
|
||||
}).subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(object : Response<ProgressAndDetail>() {
|
||||
override fun onNext(response: ProgressAndDetail) {
|
||||
@ -185,44 +185,46 @@ class NetworkDiagnosisActivity : ToolBarActivity() {
|
||||
// 等待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)
|
||||
tryCatchInRelease {
|
||||
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)
|
||||
// 画布的宽高和WebView的网页保持一致
|
||||
val canvas = Canvas(bitmap)
|
||||
val paint = Paint()
|
||||
canvas.drawBitmap(bitmap, 0F, mWebView.measuredHeight.toFloat(), paint)
|
||||
mWebView.draw(canvas)
|
||||
|
||||
// 保存成文件
|
||||
val filePath = bitmap2File(bitmap)
|
||||
// 保存成文件
|
||||
val filePath = bitmap2File(bitmap)
|
||||
|
||||
builder.append("WebView Long Image Path:\n")
|
||||
builder.append(filePath)
|
||||
builder.append("\n")
|
||||
builder.append("\n")
|
||||
builder.append(mSuccessHint)
|
||||
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_font)
|
||||
ds.isUnderlineText = false
|
||||
}
|
||||
builder.setSpan(object : ClickableSpan() {
|
||||
override fun updateDrawState(ds: TextPaint) {
|
||||
super.updateDrawState(ds)
|
||||
ds.color = resources.getColor(R.color.theme_font)
|
||||
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)
|
||||
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)
|
||||
mResult.text = builder
|
||||
mResult.setMovementMethod(LinkMovementMethod.getInstance())
|
||||
setResultProgress(100)
|
||||
}
|
||||
}, 1000)
|
||||
}
|
||||
}
|
||||
@ -252,7 +254,7 @@ class NetworkDiagnosisActivity : ToolBarActivity() {
|
||||
override fun handleBackPressed(): Boolean {
|
||||
if (mProgressData < 100) {
|
||||
DialogUtils.showAlertDialog(this, "确认退出", "网络诊断还未完成,退出会终止所有诊断进程,确定退出吗?"
|
||||
,"确定", "取消", DialogUtils.ConfirmListener {
|
||||
, "确定", "取消", DialogUtils.ConfirmListener {
|
||||
finish()
|
||||
}, null)
|
||||
return true
|
||||
|
||||
@ -12,6 +12,7 @@ import com.gh.common.util.EntranceUtils;
|
||||
import com.gh.common.util.PlatformUtils;
|
||||
import com.gh.common.util.RunningUtils;
|
||||
import com.gh.gamecenter.entity.CommunityEntity;
|
||||
import com.gh.gamecenter.entity.SimpleGameEntity;
|
||||
import com.gh.gamecenter.entity.SubjectRecommendEntity;
|
||||
import com.gh.gamecenter.entity.VideoLinkEntity;
|
||||
import com.gh.gamecenter.manager.UserManager;
|
||||
@ -97,7 +98,7 @@ public class SkipActivity extends BaseActivity {
|
||||
DirectUtils.directToArticle(this, path, ENTRANCE_BROWSER);
|
||||
break;
|
||||
case HOST_GAME:
|
||||
DirectUtils.directToGameDetail(this, path, ENTRANCE_BROWSER, false, "libao".equals(to),null);
|
||||
DirectUtils.directToGameDetail(this, path, ENTRANCE_BROWSER, false, "libao".equals(to), null);
|
||||
break;
|
||||
case HOST_COLUMN:
|
||||
DirectUtils.directToSubject(this, path, uri.getQueryParameter(KEY_NAME), ENTRANCE_BROWSER);
|
||||
@ -182,11 +183,12 @@ public class SkipActivity extends BaseActivity {
|
||||
String categoryId = uri.getQueryParameter("category_id");
|
||||
String link = uri.getQueryParameter("link");
|
||||
VideoLinkEntity linkEntity = new VideoLinkEntity(title, categoryId, link);
|
||||
// if (!CheckLoginUtils.isLogin()) {
|
||||
// HaloApp.put(HOST_UPLOAD_VIDEO, linkEntity);
|
||||
// }
|
||||
Bundle nextToBundle = VideoManagerActivity.getVideoManagerBundle(linkEntity, EntranceUtils.ENTRANCE_BROWSER, "");
|
||||
CheckLoginUtils.checkLogin(this, nextToBundle, true, EntranceUtils.ENTRANCE_BROWSER, null);
|
||||
gameId = uri.getQueryParameter("gameId");
|
||||
String gameName = uri.getQueryParameter("gameName");
|
||||
SimpleGameEntity simpleGameEntity = new SimpleGameEntity(gameId, gameName, "");
|
||||
Bundle nextToBundle = VideoManagerActivity.getVideoManagerBundle(linkEntity, simpleGameEntity, EntranceUtils.ENTRANCE_BROWSER, "");
|
||||
CheckLoginUtils.checkLogin(this, nextToBundle, true, EntranceUtils.ENTRANCE_BROWSER, () ->
|
||||
DirectUtils.directToVideoManager(SkipActivity.this, linkEntity, simpleGameEntity, EntranceUtils.ENTRANCE_BROWSER, "浏览器"));
|
||||
break;
|
||||
case HOST_VIDEO_SINGLE:
|
||||
DirectUtils.directToVideoDetail(this, path, VideoDetailContainerViewModel.Location.SINGLE_VIDEO.getValue(),
|
||||
@ -283,7 +285,7 @@ public class SkipActivity extends BaseActivity {
|
||||
break;
|
||||
|
||||
case EntranceUtils.HOST_SERVER_BLOCK:
|
||||
DirectUtils.directToGameServers(this,ENTRANCE_BROWSER, "浏览器");
|
||||
DirectUtils.directToGameServers(this, ENTRANCE_BROWSER, "浏览器");
|
||||
break;
|
||||
|
||||
case EntranceUtils.HOST_AMWAY_BLOCK:
|
||||
|
||||
@ -15,6 +15,12 @@ import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.viewpager.widget.PagerAdapter;
|
||||
import androidx.viewpager.widget.ViewPager;
|
||||
|
||||
import com.g00fy2.versioncompare.Version;
|
||||
import com.gh.base.BaseActivity;
|
||||
import com.gh.common.AppExecutor;
|
||||
@ -33,6 +39,7 @@ import com.gh.common.util.PackageUtils;
|
||||
import com.gh.common.util.PlatformUtils;
|
||||
import com.gh.common.util.SPUtils;
|
||||
import com.gh.common.util.TagUtils;
|
||||
import com.gh.common.util.TeaHelper;
|
||||
import com.gh.common.util.UsageStatsHelper;
|
||||
import com.gh.download.DownloadManager;
|
||||
import com.gh.gamecenter.entity.AuthDialogEntity;
|
||||
@ -56,11 +63,6 @@ import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.viewpager.widget.PagerAdapter;
|
||||
import androidx.viewpager.widget.ViewPager;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
import pub.devrel.easypermissions.AfterPermissionGranted;
|
||||
@ -276,6 +278,9 @@ public class SplashScreenActivity extends BaseActivity {
|
||||
private void launchMainActivity() {
|
||||
getUniqueId();
|
||||
|
||||
// 在可能获取了相关权限后才初始化今日头条SDK
|
||||
TeaHelper.init(getApplication(), HaloApp.getInstance().getChannel());
|
||||
|
||||
Bundle bundle = getIntent().getExtras();
|
||||
Intent intent = new Intent(SplashScreenActivity.this, MainActivity.class);
|
||||
if (bundle != null) intent.putExtras(bundle);
|
||||
|
||||
@ -1,9 +1,8 @@
|
||||
package com.gh.gamecenter.gamedetail.desc
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.drawable.BitmapDrawable
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.net.Uri
|
||||
import android.text.Spanned
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
@ -20,7 +19,9 @@ import com.gh.gamecenter.entity.TagEntity
|
||||
import com.lightgame.adapter.BaseRecyclerAdapter
|
||||
import com.m7.imkfsdk.utils.DensityUtil
|
||||
import com.squareup.picasso.Picasso
|
||||
import com.squareup.picasso.Target
|
||||
import io.reactivex.Single
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
import java.util.*
|
||||
|
||||
class GameDetailCustomColumnAdapter(context: Context)
|
||||
@ -53,8 +54,8 @@ class GameDetailCustomColumnAdapter(context: Context)
|
||||
.build()
|
||||
|
||||
tryWithDefaultCatch {
|
||||
Picasso.with(mContext).load(icon)
|
||||
.priority(Picasso.Priority.HIGH)
|
||||
/*Picasso.with(mContext).load(icon)
|
||||
.priority(Picasso.Priority.LOW)
|
||||
.into(object : Target {
|
||||
override fun onPrepareLoad(placeHolderDrawable: Drawable?) {
|
||||
viewHolder.contentTv.movementMethod = CustomLinkMovementMethod.getInstance()
|
||||
@ -68,6 +69,20 @@ class GameDetailCustomColumnAdapter(context: Context)
|
||||
viewHolder.contentTv.movementMethod = CustomLinkMovementMethod.getInstance()
|
||||
viewHolder.contentTv.text = spannable
|
||||
}
|
||||
})*/
|
||||
Single.just(icon)
|
||||
.map {
|
||||
Picasso.with(mContext).load(Uri.parse(it)).priority(Picasso.Priority.HIGH).get()
|
||||
}.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe ({
|
||||
val bitmapDrawable = BitmapDrawable(mContext.resources, it)
|
||||
bitmapDrawable.setBounds(0, 0, DensityUtil.dip2px(16F), DensityUtil.dip2px(16F))
|
||||
spannable.setSpan(CenterImageSpan(bitmapDrawable), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
|
||||
viewHolder.contentTv.movementMethod = CustomLinkMovementMethod.getInstance()
|
||||
viewHolder.contentTv.text = spannable
|
||||
},{
|
||||
it.printStackTrace()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@ -80,7 +80,7 @@ class FuLiFragment : BaseFragment<Any>() {
|
||||
|
||||
mFuLiViewModel?.fuFiDataLD?.observe(this, Observer {
|
||||
mViewSkeletonScreen.hide()
|
||||
reuse_ll_loading.visibility = View.GONE
|
||||
reuse_ll_loading?.visibility = View.GONE
|
||||
|
||||
if (it.status == Status.SUCCESS) {
|
||||
mAdapter?.itemList = it.data
|
||||
|
||||
@ -1,11 +1,9 @@
|
||||
package com.gh.gamecenter.gamedetail.rating
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.BitmapDrawable
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.net.Uri
|
||||
import android.text.SpannableStringBuilder
|
||||
import android.text.Spanned
|
||||
@ -36,9 +34,10 @@ import com.gh.gamecenter.gamedetail.rating.edit.RatingEditActivity.Companion.LAB
|
||||
import com.gh.gamecenter.gamedetail.rating.logs.CommentLogsActivity
|
||||
import com.gh.gamecenter.manager.UserManager
|
||||
import com.m7.imkfsdk.utils.DensityUtil
|
||||
import com.squareup.picasso.MemoryPolicy
|
||||
import com.squareup.picasso.NetworkPolicy
|
||||
import com.squareup.picasso.Picasso
|
||||
import io.reactivex.Single
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
import java.util.regex.Pattern
|
||||
|
||||
class RatingCommentItemViewHolder(val binding: RatingCommentItemBinding) : BaseRecyclerViewHolder<Any>(binding.root) {
|
||||
@ -85,45 +84,40 @@ class RatingCommentItemViewHolder(val binding: RatingCommentItemBinding) : BaseR
|
||||
replyContent.highlightColor = Color.TRANSPARENT
|
||||
|
||||
if (commentData.replyData!!.user.badge != null) {
|
||||
Picasso.with(context).load(Uri.parse(commentData.replyData!!.user.badge?.icon))
|
||||
.priority(Picasso.Priority.HIGH)
|
||||
.memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)
|
||||
.networkPolicy(NetworkPolicy.NO_CACHE, NetworkPolicy.NO_STORE)
|
||||
.into(object : com.squareup.picasso.Target {
|
||||
override fun onPrepareLoad(placeHolderDrawable: Drawable?) {
|
||||
Single.just(commentData.replyData!!.user.badge?.icon)
|
||||
.map {
|
||||
//Target对象保存为弱引用,gc时对象被回收导致无法回调,因此改为同步方式获取bitmap
|
||||
//https://github.com/square/picasso/issues/352
|
||||
Picasso.with(context).load(Uri.parse(it)).priority(Picasso.Priority.HIGH).get()
|
||||
}.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe ({
|
||||
val bitmapDrawable = BitmapDrawable(context.resources, it)
|
||||
bitmapDrawable.setBounds(0, 0, DensityUtil.dip2px(16F), DensityUtil.dip2px(16F))
|
||||
contentSpan.setSpan(CenterImageSpan(bitmapDrawable), commentData.replyData?.user?.name!!.length + 2, commentData.replyData?.user?.name!!.length + 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
|
||||
contentSpan.setSpan(object : ClickableSpan() {
|
||||
override fun updateDrawState(ds: TextPaint) {
|
||||
super.updateDrawState(ds)
|
||||
ds.isUnderlineText = false
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
override fun onBitmapFailed(errorDrawable: Drawable?) {
|
||||
|
||||
}
|
||||
|
||||
override fun onBitmapLoaded(bitmap: Bitmap?, from: Picasso.LoadedFrom?) {
|
||||
val bitmapDrawable = BitmapDrawable(context.resources, bitmap)
|
||||
bitmapDrawable.setBounds(0, 0, DensityUtil.dip2px(16F), DensityUtil.dip2px(16F))
|
||||
contentSpan.setSpan(CenterImageSpan(bitmapDrawable), commentData.replyData?.user?.name!!.length + 2, commentData.replyData?.user?.name!!.length + 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
|
||||
contentSpan.setSpan(object : ClickableSpan() {
|
||||
override fun updateDrawState(ds: TextPaint) {
|
||||
super.updateDrawState(ds)
|
||||
ds.isUnderlineText = false
|
||||
override fun onClick(widget: View) {
|
||||
val key = when (path) {
|
||||
"游戏详情:介绍" -> "游戏详情-玩家评论"
|
||||
"游戏详情:评分" -> "游戏详情-评论列表"
|
||||
"评论详情" -> "游戏评论详情"
|
||||
else -> ""
|
||||
}
|
||||
MtaHelper.onEvent("进入徽章墙_用户记录", key, "${commentData.replyData?.user?.name}(${commentData.replyData?.user?.id})")
|
||||
MtaHelper.onEvent("徽章中心", "进入徽章中心", key)
|
||||
DirectUtils.directToBadgeWall(context, commentData.replyData!!.user.id, commentData.replyData!!.user.name, commentData.replyData!!.user.icon)
|
||||
}
|
||||
|
||||
override fun onClick(widget: View) {
|
||||
val key = when (path) {
|
||||
"游戏详情:介绍" -> "游戏详情-玩家评论"
|
||||
"游戏详情:评分" -> "游戏详情-评论列表"
|
||||
"评论详情" -> "游戏评论详情"
|
||||
else -> ""
|
||||
}
|
||||
MtaHelper.onEvent("进入徽章墙_用户记录", key, "${commentData.replyData?.user?.name}(${commentData.replyData?.user?.id})")
|
||||
MtaHelper.onEvent("徽章中心", "进入徽章中心", key)
|
||||
DirectUtils.directToBadgeWall(context, commentData.replyData!!.user.id, commentData.replyData!!.user.name, commentData.replyData!!.user.icon)
|
||||
}
|
||||
|
||||
}, commentData.replyData?.user?.name!!.length + 2, commentData.replyData?.user?.name!!.length + 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
|
||||
userName.movementMethod = CustomLinkMovementMethod.getInstance()
|
||||
replyContent.text = contentSpan
|
||||
}
|
||||
}, commentData.replyData?.user?.name!!.length + 2, commentData.replyData?.user?.name!!.length + 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
|
||||
replyContent.movementMethod = CustomLinkMovementMethod.getInstance()
|
||||
replyContent.text = contentSpan
|
||||
},{
|
||||
it.printStackTrace()
|
||||
})
|
||||
} else {
|
||||
name = "${commentData.replyData?.user?.name}:${commentData.replyData?.content}"
|
||||
|
||||
@ -1,11 +1,10 @@
|
||||
package com.gh.gamecenter.gamedetail.rating
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.BitmapDrawable
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.net.Uri
|
||||
import android.text.SpannableStringBuilder
|
||||
import android.text.Spanned
|
||||
@ -48,10 +47,10 @@ import com.gh.gamecenter.manager.UserManager
|
||||
import com.lightgame.download.DownloadStatus
|
||||
import com.lightgame.utils.Utils
|
||||
import com.m7.imkfsdk.utils.DensityUtil
|
||||
import com.squareup.picasso.MemoryPolicy
|
||||
import com.squareup.picasso.NetworkPolicy
|
||||
import com.squareup.picasso.Picasso
|
||||
import com.squareup.picasso.Target
|
||||
import io.reactivex.Single
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
|
||||
class RatingReplyAdapter(context: Context,
|
||||
val entrance: String,
|
||||
@ -452,38 +451,34 @@ class RatingReplyAdapter(context: Context,
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
private fun RatingReplyItemBinding.setBadgeSpan(user: UserEntity, replyNameSpannable: SpannableStringBuilder, startIndex: Int, endIndex: Int) {
|
||||
Picasso.with(mContext).load(Uri.parse(user.badge?.icon))
|
||||
.priority(Picasso.Priority.HIGH)
|
||||
.into(object : Target {
|
||||
override fun onPrepareLoad(placeHolderDrawable: Drawable?) {
|
||||
Single.just(user.badge?.icon)
|
||||
.map {
|
||||
Picasso.with(mContext).load(Uri.parse(it)).priority(Picasso.Priority.HIGH).get()
|
||||
}.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe ({
|
||||
val bitmapDrawable = BitmapDrawable(mContext.resources, it)
|
||||
bitmapDrawable.setBounds(0, 0, DensityUtil.dip2px(16F), DensityUtil.dip2px(16F))
|
||||
replyNameSpannable.setSpan(CenterImageSpan(bitmapDrawable), startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
|
||||
replyNameSpannable.setSpan(object : ClickableSpan() {
|
||||
override fun updateDrawState(ds: TextPaint) {
|
||||
super.updateDrawState(ds)
|
||||
ds.isUnderlineText = false
|
||||
}
|
||||
|
||||
}
|
||||
override fun onClick(widget: View) {
|
||||
MtaHelper.onEvent("进入徽章墙_用户记录", "游戏评论详情", "${user.name}(${user.id})")
|
||||
MtaHelper.onEvent("徽章中心", "进入徽章中心", "游戏评论详情")
|
||||
DirectUtils.directToBadgeWall(mContext, user.id, user.name, user.icon)
|
||||
}
|
||||
|
||||
override fun onBitmapFailed(errorDrawable: Drawable?) {
|
||||
|
||||
}
|
||||
|
||||
override fun onBitmapLoaded(bitmap: Bitmap?, from: Picasso.LoadedFrom?) {
|
||||
val bitmapDrawable = BitmapDrawable(mContext.resources, bitmap)
|
||||
bitmapDrawable.setBounds(0, 0, DensityUtil.dip2px(16F), DensityUtil.dip2px(16F))
|
||||
replyNameSpannable.setSpan(CenterImageSpan(bitmapDrawable), startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
|
||||
replyNameSpannable.setSpan(object : ClickableSpan() {
|
||||
override fun updateDrawState(ds: TextPaint) {
|
||||
super.updateDrawState(ds)
|
||||
ds.isUnderlineText = false
|
||||
}
|
||||
|
||||
override fun onClick(widget: View) {
|
||||
MtaHelper.onEvent("进入徽章墙_用户记录", "游戏评论详情", "${user.name}(${user.id})")
|
||||
MtaHelper.onEvent("徽章中心", "进入徽章中心", "游戏评论详情")
|
||||
DirectUtils.directToBadgeWall(mContext, user.id, user.name, user.icon)
|
||||
}
|
||||
|
||||
}, startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
|
||||
userName.movementMethod = CustomLinkMovementMethod.getInstance()
|
||||
userName.text = replyNameSpannable
|
||||
}
|
||||
}, startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
|
||||
userName.movementMethod = CustomLinkMovementMethod.getInstance()
|
||||
userName.text = replyNameSpannable
|
||||
},{
|
||||
it.printStackTrace()
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@ -88,7 +88,7 @@ class GameServersActivity : ToolBarActivity() {
|
||||
private fun setPageScrollState(state: Int) {
|
||||
runOnIoThread {
|
||||
for (fragment in mFragments) {
|
||||
if (fragment.userVisibleHint) {
|
||||
if (fragment.userVisibleHint && fragment.host != null) {
|
||||
val fragments = fragment.childFragmentManager.fragments
|
||||
for (childFragment in fragments) {
|
||||
if (childFragment is GameServersContentFragment) {
|
||||
|
||||
@ -44,10 +44,10 @@ class HomeVideoFragment : BaseLazyFragment() {
|
||||
//预加载广告图片
|
||||
val videoAdvertisement = Config.getSettings()?.videoAdvertisement
|
||||
videoAdvertisement?.left?.let { ads ->
|
||||
ads.forEach { Picasso.with(requireContext()).load(it.image).fetch() }
|
||||
ads.forEach { ImageUtils.prefetchToDiskCache(it.image) }
|
||||
}
|
||||
videoAdvertisement?.right?.let { ads ->
|
||||
ads.forEach { Picasso.with(requireContext()).load(it.image).fetch() }
|
||||
ads.forEach { ImageUtils.prefetchToDiskCache(it.image) }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -164,6 +164,11 @@ class UploadVideoActivity : ToolBarActivity() {
|
||||
} else {
|
||||
setNavigationTitle("视频上传")
|
||||
}
|
||||
mViewModel.gameEntity = intent.getParcelableExtra(SimpleGameEntity::class.java.simpleName)
|
||||
if (mViewModel.gameEntity != null) {
|
||||
mBinding.gameName.text = mViewModel.gameEntity?.name ?: ""
|
||||
mBinding.gameName.setTextColor(resources.getColor(R.color.text_333333))
|
||||
}
|
||||
}
|
||||
|
||||
private fun initViewModel() {
|
||||
@ -751,12 +756,14 @@ class UploadVideoActivity : ToolBarActivity() {
|
||||
fun getIntent(context: Context,
|
||||
videoPath: String,
|
||||
linkEntity: VideoLinkEntity,
|
||||
simpleGameEntity: SimpleGameEntity? = null,
|
||||
entrance: String,
|
||||
path: String): Intent {
|
||||
val intent = Intent(context, UploadVideoActivity::class.java)
|
||||
intent.putExtra(EntranceUtils.KEY_ENTRANCE, mergeEntranceAndPath(entrance, path))
|
||||
intent.putExtra(EntranceUtils.KEY_PATH, path)
|
||||
intent.putExtra(VideoLinkEntity::class.java.simpleName, linkEntity)
|
||||
intent.putExtra(SimpleGameEntity::class.java.simpleName, simpleGameEntity)
|
||||
intent.putExtra(EntranceUtils.KEY_PATH_VIDEO, videoPath)
|
||||
return intent
|
||||
}
|
||||
|
||||
@ -11,6 +11,7 @@ import com.gh.base.BaseActivity
|
||||
import com.gh.base.BaseActivity_TabLayout
|
||||
import com.gh.common.util.*
|
||||
import com.gh.gamecenter.R
|
||||
import com.gh.gamecenter.entity.SimpleGameEntity
|
||||
import com.gh.gamecenter.entity.VideoLinkEntity
|
||||
import com.gh.gamecenter.video.upload.view.UploadVideoActivity
|
||||
import com.zhihu.matisse.Matisse
|
||||
@ -20,6 +21,7 @@ import com.zhihu.matisse.internal.utils.PathUtils
|
||||
class VideoManagerActivity : BaseActivity_TabLayout() {
|
||||
|
||||
private var mVideoLink: VideoLinkEntity? = null
|
||||
private var mSimpleGameEntity: SimpleGameEntity? = null
|
||||
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
super.onActivityResult(requestCode, resultCode, data)
|
||||
@ -28,7 +30,7 @@ class VideoManagerActivity : BaseActivity_TabLayout() {
|
||||
if (uris.size > 0) {
|
||||
val videoPath = PathUtils.getPath(this, uris[0]) ?: ""
|
||||
val intent = if (mVideoLink != null) {
|
||||
UploadVideoActivity.getIntent(this, videoPath, mVideoLink!!, mEntrance, "视频投稿")
|
||||
UploadVideoActivity.getIntent(this, videoPath, mVideoLink!!, mSimpleGameEntity, mEntrance, "视频投稿")
|
||||
} else {
|
||||
UploadVideoActivity.getIntent(this, videoPath, mEntrance, "视频投稿")
|
||||
}
|
||||
@ -47,6 +49,7 @@ class VideoManagerActivity : BaseActivity_TabLayout() {
|
||||
setNavigationTitle("视频投稿")
|
||||
setToolbarMenu(R.menu.menu_text)
|
||||
mVideoLink = intent.getParcelableExtra(VideoLinkEntity::class.java.simpleName)
|
||||
mSimpleGameEntity = intent.getParcelableExtra(SimpleGameEntity::class.java.simpleName)
|
||||
|
||||
val menuItem = getMenuItem(R.id.menu_text)
|
||||
val container = menuItem.actionView.findViewById<View>(R.id.menu_text)
|
||||
@ -106,10 +109,11 @@ class VideoManagerActivity : BaseActivity_TabLayout() {
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun getVideoManagerBundle(linkEntity: VideoLinkEntity, entrance: String? = null, path: String? = ""): Bundle {
|
||||
fun getVideoManagerBundle(linkEntity: VideoLinkEntity, simpleGameEntity: SimpleGameEntity, entrance: String? = null, path: String? = ""): Bundle {
|
||||
val bundle = Bundle()
|
||||
bundle.putString(EntranceUtils.KEY_PATH, path)
|
||||
bundle.putParcelable(VideoLinkEntity::class.java.simpleName, linkEntity)
|
||||
bundle.putParcelable(SimpleGameEntity::class.java.simpleName, simpleGameEntity)
|
||||
bundle.putString(EntranceUtils.KEY_TO, VideoManagerActivity::class.java.name)
|
||||
bundle.putString(EntranceUtils.KEY_ENTRANCE, BaseActivity.mergeEntranceAndPath(entrance, path))
|
||||
return bundle
|
||||
|
||||
@ -28,7 +28,6 @@ import com.gh.common.util.DownloadObserver;
|
||||
import com.gh.common.util.GdtHelper;
|
||||
import com.gh.common.util.HomeBottomBarHelper;
|
||||
import com.gh.common.util.PackageHelper;
|
||||
import com.gh.common.util.TeaHelper;
|
||||
import com.gh.common.util.TimestampUtils;
|
||||
import com.gh.common.videolog.VideoRecordUtils;
|
||||
import com.gh.gamecenter.BuildConfig;
|
||||
@ -138,7 +137,6 @@ public class HaloApp extends TinkerAppLike {
|
||||
|
||||
PushManager.init(mChannel);
|
||||
|
||||
TeaHelper.init(getApplication(), mChannel);
|
||||
DataUtils.init(getApplication(), mChannel);
|
||||
GidHelper.getInstance().init(getApplication());
|
||||
// TTAdSdk.init(getApplication(), new TTAdConfig.Builder().appId(Config.TTAD_APPID)
|
||||
@ -164,8 +162,6 @@ public class HaloApp extends TinkerAppLike {
|
||||
|
||||
FixedRateJobHelper.begin();
|
||||
|
||||
AntiBotHelper.getManager();
|
||||
|
||||
// 耗时操作
|
||||
AppExecutor.getIoExecutor().execute(() -> {
|
||||
//Leto.init(getApplication(), Config.LETO_APPID);
|
||||
@ -193,6 +189,8 @@ public class HaloApp extends TinkerAppLike {
|
||||
if (!TextUtils.isEmpty(barData.getIconUnselect())) {
|
||||
Picasso.with(getApplication()).load(Uri.parse(barData.getIconUnselect())).fetch();
|
||||
}
|
||||
|
||||
AntiBotHelper.getManager();
|
||||
});
|
||||
PlayerFactory.setPlayManager(Exo2PlayerManager.class);
|
||||
CacheFactory.setCacheManager(ExoPlayerCacheManager.class);
|
||||
|
||||
@ -121,7 +121,8 @@
|
||||
android:paddingRight="8dp"
|
||||
android:text="@{game.commentCount > 3?game.star + ``: `评分过少`}"
|
||||
android:textColor="@{Color.parseColor(game.commentCount > 3?`#1383EB`:`#2496FF`)}"
|
||||
android:textStyle="bold" />
|
||||
android:textStyle="bold"
|
||||
android:visibility="gone" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/game_des"
|
||||
|
||||
@ -1,7 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<com.facebook.drawee.view.SimpleDraweeView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/icon_ad"
|
||||
app:roundedCornerRadius="5dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:scaleType="fitXY"/>
|
||||
app:placeholderImageScaleType="fitXY"/>
|
||||
@ -7,8 +7,8 @@ ext {
|
||||
targetSdkVersion = 26
|
||||
|
||||
// application info
|
||||
versionCode = 180
|
||||
versionName = "4.0.2"
|
||||
versionCode = 184
|
||||
versionName = "4.0.3"
|
||||
applicationId = "com.gh.gamecenter"
|
||||
|
||||
// AndroidX
|
||||
|
||||
@ -51,8 +51,8 @@ SENSITIVE_API_HOST=https\://and-core-api.ghzs.com/v4d0d2/
|
||||
|
||||
# 请不要手动改动下面的值,除非你明确需要以某个apk作为基准包,需要打包请以scripts/tinker*.sh为准
|
||||
TINKER_ENABLE=
|
||||
TINKER_ID=2aa4166
|
||||
TINKER_BASE_APK_DIR=app-0709-10-15-40_2aa4166
|
||||
TINKER_ID=801f0b9
|
||||
TINKER_BASE_APK_DIR=app-0721-17-12-02_801f0b9
|
||||
android.useAndroidX=true
|
||||
android.enableJetifier=true
|
||||
|
||||
|
||||
Submodule libraries/LGLibrary updated: b8111e68f0...909dddc4d1
Reference in New Issue
Block a user