From b2fc802bf35143ed957a86d95e2de49934ea9ea5 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期三, 14 十月 2020 14:09:51 +0800
Subject: [PATCH] 腾讯X5bug修复

---
 BuWanVideo/src/com/weikou/beibeivideo/ui/main/MainActivity.java |  339 +++++++++++---------------------------------------------
 1 files changed, 68 insertions(+), 271 deletions(-)

diff --git a/BuWanVideo/src/com/weikou/beibeivideo/ui/main/MainActivity.java b/BuWanVideo/src/com/weikou/beibeivideo/ui/main/MainActivity.java
index 99e058c..3594aed 100644
--- a/BuWanVideo/src/com/weikou/beibeivideo/ui/main/MainActivity.java
+++ b/BuWanVideo/src/com/weikou/beibeivideo/ui/main/MainActivity.java
@@ -9,22 +9,21 @@
 import android.content.pm.ActivityInfo;
 import android.content.pm.ApplicationInfo;
 import android.database.Cursor;
-import android.graphics.Bitmap;
-import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
+import android.graphics.drawable.Drawable;
 import android.net.wifi.WifiInfo;
 import android.net.wifi.WifiManager;
 import android.os.Build;
 import android.os.Bundle;
+import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.v4.app.LoaderManager;
 import android.support.v4.content.CursorLoader;
 import android.support.v4.content.Loader;
-import android.util.Log;
 import android.view.KeyEvent;
 import android.view.View;
 import android.view.Window;
 import android.view.WindowManager;
+import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.RadioButton;
@@ -33,8 +32,12 @@
 import android.widget.Toast;
 
 import com.bumptech.glide.Glide;
-import com.bumptech.glide.request.animation.GlideAnimation;
+import com.bumptech.glide.load.DataSource;
+import com.bumptech.glide.load.engine.GlideException;
+import com.bumptech.glide.request.RequestListener;
 import com.bumptech.glide.request.target.SimpleTarget;
+import com.bumptech.glide.request.target.Target;
+import com.bumptech.glide.request.transition.Transition;
 import com.google.gson.FieldNamingPolicy;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
@@ -44,43 +47,29 @@
 import com.lcjian.library.util.common.StringUtils;
 import com.mozillaonline.providers.downloads.DownloadService;
 import com.qq.e.ads.cfg.VideoOption;
-import com.qq.e.ads.nativ.NativeADUnifiedListener;
-import com.qq.e.ads.nativ.NativeUnifiedAD;
-import com.qq.e.ads.nativ.NativeUnifiedADData;
-import com.qq.e.ads.nativ.VideoPreloadListener;
-import com.qq.e.comm.constants.AdPatternType;
-import com.qq.e.comm.util.AdError;
-import com.qq.e.mediation.comm.Constants;
 import com.tencent.android.tpush.XGPushTextMessage;
-import com.umeng.analytics.MobclickAgent;
-import com.umeng.socialize.ShareAction;
 import com.umeng.socialize.UMShareAPI;
 import com.umeng.socialize.UMShareListener;
 import com.umeng.socialize.bean.SHARE_MEDIA;
 import com.umeng.socialize.media.UMImage;
-import com.umeng.socialize.media.UMWeb;
 import com.weikou.beibeivideo.BasicTextHttpResponseHandler;
 import com.weikou.beibeivideo.BeibeiVideoAPI;
+import com.weikou.beibeivideo.R;
 import com.weikou.beibeivideo.db.MessageTable;
 import com.weikou.beibeivideo.entity.NewComment;
 import com.weikou.beibeivideo.ui.BaseActivity;
-import com.weikou.beibeivideo.ui.common.FollowActivity;
-import com.weikou.beibeivideo.ui.discover.ReleasePromptActivity;
+import com.weikou.beibeivideo.ui.baidu.BaiDuNewsFragment;
+import com.weikou.beibeivideo.ui.baidu.BaiDuVideosFragment;
 import com.weikou.beibeivideo.ui.login.LoginActivity;
 import com.weikou.beibeivideo.ui.login.PersonInfoActivity;
 import com.weikou.beibeivideo.ui.mine.BrowserActivity;
-import com.weikou.beibeivideo.ui.mine.DownloadActivity;
-import com.weikou.beibeivideo.ui.mine.HelpAndTicklingActivity;
-import com.weikou.beibeivideo.ui.mine.MyFavouriteActivity;
-import com.weikou.beibeivideo.ui.mine.SettingsActivity;
 import com.weikou.beibeivideo.ui.mine.SystemMessageActivity;
 import com.weikou.beibeivideo.ui.mine.WatchHistoryActivity;
 import com.weikou.beibeivideo.ui.recommend.SearchActivity;
 import com.weikou.beibeivideo.util.BeibeiConstant;
 import com.weikou.beibeivideo.util.ExitDialog;
 import com.weikou.beibeivideo.util.LoginFirstDialog;
-import com.weikou.beibeivideo.util.ad.FullVideoAdManager;
-import com.yeshi.buwanshequ.R;
+import com.weikou.beibeivideo.util.ad.manager.SearchResultAdManager;
 import com.ysh.wpc.appupdate.AppUpdate;
 
 import org.apache.http.Header;
@@ -89,7 +78,6 @@
 import java.io.BufferedReader;
 import java.io.InputStreamReader;
 import java.text.SimpleDateFormat;
-import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
 import java.util.Random;
@@ -101,36 +89,20 @@
 public class MainActivity extends BaseActivity implements
         LoaderManager.LoaderCallbacks<Cursor>, View.OnClickListener {
 
-//	private RadioGroup rg_nav;
-
-    //	private FragmentSwitchHelper mFragmentSwitchHelper;
-
     private ImageView iv_taobao;
 
     private ImageView iv_red_dot;
 
-//    private PushAgent mPushAgent;
-
     private ProgressDialog pd = null;
+
+    private FrameLayout fl_right_ad;
 
     SharedPreferences preferences;// 骞垮憡鍟嗗煄锛岃幏鍙栧浘鏍囩姸鎬佷俊鎭�
 
     private boolean isHaveNewCom;// 鏄惁瀛樺湪鏂扮殑璇勮娑堟伅
 
-    //    private TextView tv_userName;// 鐢ㄦ埛鍚�
     TextView tv_search;
 
-//    private ImageView iv_user_logo;// 鐢ㄦ埛澶村儚
-
-//    private RelativeLayout rl_mine_message;// 鎴戠殑娑堟伅
-
-//    private BadgeView mBadgeView;
-
-//    private DrawerLayout dl_sliding;//渚ф粦
-
-//    private TextView tv_login_name;
-
-    //    private ImageView iv_portrait;
     ImageView iv_msg_dot;
 
     private RadioGroup rg_nav;
@@ -153,13 +125,6 @@
 
         exitDialog = exitDialogBuilder.create();
         exitDialog.setCanceledOnTouchOutside(true);
-        exitDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
-            @Override
-            public void onDismiss(DialogInterface dialog) {
-                if (exitDialogBuilder != null)
-                    exitDialogBuilder.refreshAd();
-            }
-        });
         /*
          * 璁$畻鐘舵�佹爮楂樺害骞惰缃�
          */
@@ -180,24 +145,13 @@
         } else {
             findViewById(R.id.v_status_bar).setVisibility(View.GONE);
         }
-//        MarketUtils.queryInstalledMarketPkgs(this);
-//        MarketUtils.queryInstalledMarketInfos(this);
-//        MarketUtils.filterInstalledPkgs(this, getPackageName());
-
-//        String str = "market://details?id=" + getPackageName();
-//        Intent localIntent = new Intent("android.intent.action.VIEW");
-//        localIntent.setData(Uri.parse(str));
-//        startActivity(localIntent);
         // 灏唅mei mac lat lng瀛樺叆sharedpreference涓�
         SharedPreferences mPre = getSharedPreferences("user",
                 Context.MODE_PRIVATE);
         WifiManager wifi = (WifiManager) this.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
         WifiInfo info = wifi.getConnectionInfo();
 
-//        String imei = ((TelephonyManager) getSystemService(TELEPHONY_SERVICE))
-//                .getDeviceId();
         Editor editor = mPre.edit();
-//        editor.putString("imei", imei);
         if (StringUtils.isEmpty(getMacAddress())) {
             editor.putString("mac", info.getMacAddress());
         } else {
@@ -205,29 +159,10 @@
         }
         editor.commit();
 
-//        tv_userName = (TextView) findViewById(R.id.mine_tv_name);
         tv_search = findViewById(R.id.tv_activity_main_search);
-//        iv_user_logo = (ImageView) findViewById(R.id.mine_ci_head);
-//        rl_mine_message = (RelativeLayout) findViewById(R.id.rl_mine_message);
-//        tv_login_name = (TextView) findViewById(R.id.tv_activity_main_login);
-//        iv_portrait = (ImageView) findViewById(R.id.iv_activity_protrait);
+
         iv_msg_dot = findViewById(R.id.iv_msg_dot);
 
-//        mBadgeView = new BadgeView(this, rl_mine_message);
-//        mBadgeView.setBackgroundResource(R.drawable.ic_red_dot);
-//        mBadgeView.setTextSize(1);
-//        mBadgeView.setText("");
-//        mBadgeView.setBadgeMargin(DimenUtils.dipToPixels(20, this));
-//        findViewById(R.id.mine_rl_head).setOnClickListener(this);
-//        findViewById(R.id.rl_mine_favourite).setOnClickListener(this);
-//        findViewById(R.id.rl_mine_download).setOnClickListener(this);
-//        findViewById(R.id.rl_mine_follow).setOnClickListener(this);
-//        findViewById(R.id.rl_mine_watch_history).setOnClickListener(this);
-//        rl_mine_message.setOnClickListener(this);
-//        findViewById(R.id.rl_share).setOnClickListener(this);
-//        findViewById(R.id.rl_suggestion).setOnClickListener(this);
-//        findViewById(R.id.rl_settings).setOnClickListener(this);
-//        findViewById(R.id.rl_release).setOnClickListener(this);
 
         pd = new ProgressDialog(this);
         pd.setMessage("姝e湪璇锋眰缃戠粶...");
@@ -245,22 +180,8 @@
         iv_taobao = findViewById(R.id.nat);
         iv_taobao.setOnClickListener(this);
         iv_red_dot = findViewById(R.id.iv_red_dot);
-//        list.add("鎺ㄨ崘");
-//        list.add("鐩存挱");
-//        list.add("鍒嗗尯");
-//        list.add("鍙戠幇");
-//        list.add("鍏虫敞");
+        fl_right_ad = findViewById(R.id.fl_right_ad);
 
-//        ViewPager pager = findViewById(R.id.pager);
-//        GoogleMusicAdapter adapter = new GoogleMusicAdapter(
-//                getSupportFragmentManager());
-//        pager.setAdapter(adapter);
-
-//        TabPageIndicator indicator = new TabPageIndicator(
-//                this);
-//        indicator.setViewPager(pager, 0);
-//        ((FrameLayout) findViewById(R.id.fl_indicator))
-//                .addView(indicator);
         /*
          * 璁$畻鐘舵�佹爮楂樺害骞惰缃�
          */
@@ -280,14 +201,13 @@
         } else {
             findViewById(R.id.v_status_bar).setVisibility(View.GONE);
         }
-//        dl_sliding = (DrawerLayout) findViewById(R.id.dl_sliding);
 
         initialer.run();
 
         mFragmentSwitchHelper = FragmentSwitchHelper.create(
                 R.id.fl_main_fragment_container, getSupportFragmentManager(),
                 new HomeFragment(), new CategoryFragment(),
-                new DiscoverNowFragment(), new MineFragment(), new GuessLikeFragment());
+                BaiDuNewsFragment.newInstance(), new MineFragment(), BaiDuVideosFragment.newInstance());
         rg_nav = findViewById(R.id.rg_nav);
         rg_nav.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
 
@@ -306,12 +226,12 @@
                     break;
                     case R.id.rb_guess_like: {
                         mFragmentSwitchHelper
-                                .changeFragment(GuessLikeFragment.class);
+                                .changeFragment(BaiDuVideosFragment.class);
                     }
                     break;
                     case R.id.rb_nav_discover: {
                         mFragmentSwitchHelper
-                                .changeFragment(DiscoverNowFragment.class);
+                                .changeFragment(BaiDuNewsFragment.class);
                     }
                     break;
                     case R.id.rb_nav_mine: {
@@ -329,19 +249,45 @@
                         .setChecked(true);
             }
         });
-        try {
-            Glide.with(getApplicationContext()).load(preferences.getString("top_icon", ""))
-                    .asBitmap().into(target);
-        } catch (IllegalArgumentException e) {
-            e.printStackTrace();
-        }
-        try {
-            //鍔犺浇瑙嗛鎾斁骞垮憡
-            FullVideoAdManager.getInstance().loadAd(getApplicationContext(), null);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
+        setRightTopAD();
+        preLoadCommonAD();
     }
+
+
+    /**
+     * 棰勫姞杞藉箍鍛�
+     */
+    private void preLoadCommonAD() {
+        //鍔犺浇鎼滅储缁撴灉椤�
+        SearchResultAdManager.getInstance(getApplicationContext()).loadAD(1, null);
+    }
+
+
+    private void setRightTopAD() {
+        if (preferences == null)
+            preferences = getSharedPreferences("user",
+                    Context.MODE_PRIVATE);
+        String topIcon = preferences.getString("top_icon", "");
+        if (!StringUtils.isBlank(topIcon)) {
+            fl_right_ad.setVisibility(View.VISIBLE);
+            try {
+                Glide.with(getApplicationContext()).load(topIcon).into(iv_taobao);
+                long time = preferences.getLong("latestAdtime", 0);
+                if (!getDay(time).equalsIgnoreCase(
+                        getDay(System.currentTimeMillis()))) {
+                    iv_red_dot.setVisibility(View.VISIBLE);
+                } else {
+                    iv_red_dot.setVisibility(View.GONE);
+                }
+            } catch (IllegalArgumentException e) {
+                e.printStackTrace();
+            }
+        } else {
+            fl_right_ad.setVisibility(View.GONE);
+        }
+
+    }
+
     //-------------------------瑙嗛骞垮憡-----------------------------
 
     @Nullable
@@ -349,35 +295,17 @@
         if (intent == null) {
             return null;
         }
-
-//        VideoOption videoOption = null;
-//        boolean noneOption = intent.getBooleanExtra(Constants.NONE_OPTION, false);
-//        if (!noneOption) {
-//            VideoOption.Builder builder = new VideoOption.Builder();
-//
-//            builder.setAutoPlayPolicy(intent.getIntExtra(Constants.PLAY_NETWORK, VideoOption.AutoPlayPolicy.ALWAYS));
-//            builder.setAutoPlayMuted(intent.getBooleanExtra(Constants.PLAY_MUTE, true));
-//            builder.setDetailPageMuted(intent.getBooleanExtra(Constants.DETAIL_PAGE_MUTED, false));
-//            builder.setNeedCoverImage(intent.getBooleanExtra(Constants.NEED_COVER, true));
-//            builder.setNeedProgressBar(intent.getBooleanExtra(Constants.NEED_PROGRESS, true));
-//            builder.setEnableDetailPage(intent.getBooleanExtra(Constants.ENABLE_DETAIL_PAGE, true));
-//            builder.setEnableUserControl(intent.getBooleanExtra(Constants.ENABLE_USER_CONTROL, false));
-//
-//            videoOption = builder.build();
-//        }
         return new VideoOption.Builder().build();
     }
 
 
-
     //-------------------------瑙嗛骞垮憡缁撴潫-----------------------------
 
-    private SimpleTarget<Bitmap> target = new SimpleTarget<Bitmap>() {
+    private SimpleTarget<Drawable> target = new SimpleTarget<Drawable>() {
 
         @Override
-        public void onResourceReady(Bitmap bitmap,
-                                    GlideAnimation<? super Bitmap> arg1) {
-            iv_taobao.setImageBitmap(bitmap);
+        public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
+            iv_taobao.setImageDrawable(resource);
             long time = preferences.getLong("latestAdtime", 0);
             if (!getDay(time).equalsIgnoreCase(
                     getDay(System.currentTimeMillis()))) {
@@ -385,6 +313,10 @@
             } else {
                 iv_red_dot.setVisibility(View.GONE);
             }
+        }
+
+        @Override
+        public void onLoadCleared(@Nullable Drawable placeholder) {
 
         }
 
@@ -396,61 +328,9 @@
         return date;
     }
 
-//    List<String> list = new ArrayList<String>();
-
-//    class GoogleMusicAdapter extends FragmentPagerAdapter {
-//
-//        public GoogleMusicAdapter(FragmentManager fm) {
-//            super(fm);
-//        }
-//
-//        @Override
-//        public Fragment getItem(int position) {
-//            if (position % list.size() == 0) {
-////                return RecommendFragment.newInstance();
-//                return LiveGirlFragment.newInstance();
-//            } else if (position % list.size() == 1)
-//                return LiveGirlFragment.newInstance();
-//            else if (position % list.size() == 2)
-//                return NewCategoryFragment.newInstance();
-//            else if (position % list.size() == 3)
-//                return DiscoverFragment.newInstance();
-//            else if (position % list.size() == 4) {
-//                SharedPreferences preferences1 = getSharedPreferences("user",
-//                        Context.MODE_PRIVATE);
-//                preferences1.edit().putBoolean("PushType", false).commit();
-//                iv_msg_dot.setVisibility(View.GONE);
-//                return FollowFragment.newInstance();
-//            } else {
-////                return RecommendFragment.newInstance();
-//                return null;
-//            }
-//        }
-//
-//        @Override
-//        public CharSequence getPageTitle(int position) {
-//            return list.get(position % list.size());
-//        }
-//
-//        @Override
-//        public int getCount() {
-//            return list == null ? 0 : list.size();
-//        }
-//    }
-
 
     private boolean isCheckedComment = true;// 娑堟伅鏄惁琚煡鐪�
     private boolean isCheckedUpdate = false;// 娑堟伅鏄惁琚煡鐪�
-
-    // EventBus浜嬩欢鍝嶅簲
-//    public void onEventMainThread(NewComment info) {
-//        isCheckedComment = info.getState();
-//        if (isCheckedUpdate || !isCheckedComment) {
-//            mBadgeView.show();
-//        } else {
-//            mBadgeView.hide();
-//        }
-//    }
 
     private boolean isLogin = false;
 
@@ -475,61 +355,13 @@
     @Override
     public void onResume() {
         super.onResume();
-        try {
-            Glide.with(getApplicationContext()).load(preferences.getString("top_icon", ""))
-                    .asBitmap().into(target);
-        } catch (IllegalArgumentException e) {
-            e.printStackTrace();
-        }
-        MobclickAgent.onResume(this);
+        setRightTopAD();
         isLogin = StringUtils.isEmpty(preferences.getString("LoginUid", "")) ? false
                 : true;
 
         if (!StringUtils.isEmpty(preferences.getString("shopurl", "")) && !preferences.getBoolean("isDown", false)) {
             addDownloadBuxin(preferences.getString("shopurl", ""));
         }
-//        if (isLogin) {
-//            if (preferences1.getBoolean("PushType", false)) {
-//                iv_msg_dot.setVisibility(View.VISIBLE);
-//            } else {
-//                iv_msg_dot.setVisibility(View.GONE);
-//            }
-//
-//            try {
-//                Glide.with(getApplicationContext()).load(BeibeiConstant.addPreFix(preferences1.getString("portrait", "")))
-//                        .placeholder(R.drawable.img_head_portrait).error(R.drawable.ic_portrait_default).transform(new GlideCircleTransform(this))
-//                        .into(iv_user_logo);
-//                Glide.with(getApplicationContext()).load(BeibeiConstant.addPreFix(preferences1.getString("portrait", "")))
-//                        .placeholder(R.drawable.img_head_portrait).error(R.drawable.ic_portrait_default).transform(new GlideCircleTransform(this))
-//                        .into(iv_portrait);
-//            } catch (IllegalArgumentException e) {
-//                e.printStackTrace();
-//            }
-//            tv_login_name.setText(preferences1.getString("name", ""));
-//            tv_userName.setText(preferences1.getString("name", ""));
-//            tv_userName.setTextColor(getResources().getColor(R.color.white));
-//            tv_userName.setVisibility(
-//                    View.VISIBLE);
-//            findViewById(R.id.mine_tv_name2).setVisibility(
-//                    View.GONE);
-//            findViewById(R.id.mine_tv_login).setVisibility(
-//                    View.GONE);
-//            getNewInfo();
-//        } else {
-//            iv_msg_dot.setVisibility(View.GONE);
-//            iv_portrait.setImageResource(R.drawable.img_head_portrait);
-//            tv_login_name.setText("绔嬪嵆鐧诲綍");
-//
-//            iv_user_logo.setImageResource(R.drawable.img_head_portrait);
-//            tv_userName.setText("涓�閿櫥褰�");
-//            tv_userName.setTextColor(getResources().getColor(R.color.gray));
-//            tv_userName.setVisibility(
-//                    View.VISIBLE);
-//            findViewById(R.id.mine_tv_name2).setVisibility(
-//                    View.VISIBLE);
-//            findViewById(R.id.mine_tv_login).setVisibility(
-//                    View.VISIBLE);
-//        }
         EventBus.getDefault().register(this);
     }
 
@@ -541,7 +373,6 @@
         builder.setPositiveButton("", new DialogInterface.OnClickListener() {
             @Override
             public void onClick(DialogInterface dialog, int which) {
-//                mateAppMarket1();
                 try {
                     Intent intent = new Intent(MainActivity.this,
                             com.weikou.beibeivideo.service.DownLoadFileService.class);
@@ -577,7 +408,6 @@
     @Override
     public void onPause() {
         super.onPause();
-        MobclickAgent.onPause(this);
         AppUpdate.destoryAppUpdate();
         EventBus.getDefault().unregister(this);
     }
@@ -791,6 +621,7 @@
     public boolean onKeyDown(int keyCode, KeyEvent event) {
         if (keyCode == KeyEvent.KEYCODE_BACK) {
             if (exitDialog != null) {
+                exitDialogBuilder.showAd();
                 exitDialog.show();
             }
             return true;
@@ -835,48 +666,14 @@
                     intent.setClass(MainActivity.this, PersonInfoActivity.class);
                 } else {// 鐧诲綍鍓�
                     intent.setClass(MainActivity.this, LoginActivity.class);
-
                 }
                 startActivity(intent);
-                break;
-            case R.id.rl_mine_favourite:
-                startActivity(new Intent(MainActivity.this, MyFavouriteActivity.class));
-                break;
-            case R.id.rl_mine_watch_history:
-                startActivity(new Intent(MainActivity.this, WatchHistoryActivity.class));
-                break;
-            case R.id.rl_mine_download:
-                startActivity(new Intent(MainActivity.this, DownloadActivity.class));
-                break;
-            case R.id.rl_mine_follow:
-                startActivity(new Intent(MainActivity.this, FollowActivity.class));
                 break;
             case R.id.rl_mine_message:
                 openMsg();
                 break;
-            case R.id.rl_share:
-//                (new ShareDialogFragment()).show(getSupportFragmentManager(),
-//                        "ShareDialogFragment");
-                String shareContent = getShareContent();
-                UMWeb web = new UMWeb(getShareUrl());
-                String shareTitle = getResources().getString(R.string.app_name);
-                web.setTitle(shareTitle);
-                web.setDescription(shareContent);
-                new ShareAction(MainActivity.this).withText(shareContent).withMedia(web)
-                        .setDisplayList(SHARE_MEDIA.SINA, SHARE_MEDIA.QQ, SHARE_MEDIA.WEIXIN)
-                        .setCallback(shareListener).open();
-                break;
-            case R.id.rl_suggestion:
-                startActivity(new Intent(MainActivity.this,
-                        HelpAndTicklingActivity.class));
-                break;
-            case R.id.rl_release:
-                startActivity(new Intent(MainActivity.this,
-                        ReleasePromptActivity.class));
-                break;
-            case R.id.rl_settings:
-                startActivity(new Intent(MainActivity.this, SettingsActivity.class));
-                break;
+
+
         }
     }
 

--
Gitblit v1.8.0