MainActivity.java 9.47 KB
package com.hjx.parent;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.content.FileProvider;

import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Looper;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.google.gson.JsonObject;
import com.hjq.permissions.OnPermissionCallback;
import com.hjq.permissions.Permission;
import com.hjq.permissions.XXPermissions;
import com.hjx.parent.dialog.TipDialog;
import com.hjx.parent.fragment.HomeFragment;
import com.hjx.parent.fragment.MeFragment;
import com.prws.common.base.BaseActivity;
import com.prws.common.base.BasePresenter;
import com.prws.common.bean.GradeAndSubject;
import com.prws.common.bean.ResponseResult;
import com.prws.common.bean.UpdateBean;
import com.prws.common.net.NetWorks;
import com.prws.common.utils.DownloadUtil;
import com.prws.common.utils.SharedPreferencesUtil;

import java.io.File;
import java.util.List;

import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

public class MainActivity extends BaseActivity {

    @Override
    protected int layoutResId() {
        return R.layout.activity_main;
    }

    @Override
    public Object getContract() {
        return null;
    }

    @Override
    public BasePresenter getPresenter() {
        return null;
    }


    HomeFragment homeFragment;
    MeFragment meFragment;
    ConstraintLayout cl_home;
    ConstraintLayout cl_me;
    ImageView iv_3, iv_4;
    TextView tv_1, tv_4;


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        fullScreen();
    }

    @Override
    protected void initView() {
        showFragment(getHomeFragment(), R.id.rl_content);
        cl_home = findViewById(R.id.cl_home);
        cl_me = findViewById(R.id.cl_me);
        iv_3 = findViewById(R.id.iv_3);
        iv_4 = findViewById(R.id.iv_4);
        tv_1 = findViewById(R.id.tv_1);
        tv_4 = findViewById(R.id.tv_4);
        iv_3.setBackgroundResource(R.mipmap.hoss);
        tv_1.setTextColor(Color.parseColor("#FE5E09"));
        NetWorks.getBaiduToken(new Observer<JsonObject>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(JsonObject jsonObject) {
                SharedPreferencesUtil.putData("baiduToken", jsonObject.get("access_token").getAsString());
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        });
        NetWorks.listGradeAndSubject(new Observer<ResponseResult<List<GradeAndSubject>>>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(ResponseResult<List<GradeAndSubject>> listResponseResult) {
                App.getInstance().setGradeAndSubjects(listResponseResult.getData());
            }

            @Override
            public void onError(Throwable e) {
                e.toString();
            }

            @Override
            public void onComplete() {

            }
        });
        checkUpdate();
    }

    public HomeFragment getHomeFragment() {
        if (homeFragment == null)
            homeFragment = new HomeFragment();
        return homeFragment;
    }

    public MeFragment getMeFragment() {
        if (meFragment == null)
            meFragment = new MeFragment();
        return meFragment;
    }


    @Override
    protected void initListener() {
        cl_home.setOnClickListener(view -> {
            fullScreen();
            showFragment(getHomeFragment(), R.id.rl_content);
            iv_3.setBackgroundResource(R.mipmap.hoss);
            tv_1.setTextColor(Color.parseColor("#1C90F3"));
            iv_4.setBackgroundResource(R.mipmap.wmus);
            tv_4.setTextColor(Color.parseColor("#333333"));
        });

        cl_me.setOnClickListener(view -> {
            blackBar();
            showFragment(getMeFragment(), R.id.rl_content);
            iv_3.setBackgroundResource(R.mipmap.hous);
            tv_1.setTextColor(Color.parseColor("#333333"));
            iv_4.setBackgroundResource(R.mipmap.wmss);
            tv_4.setTextColor(Color.parseColor("#1C90F3"));
        });
    }

    @Override
    protected void initData() {

    }

    @Override
    public void onNetChanged(int netWorkState) {

    }

    public void downloadApk(String url, int versionCode) {
        String filepath = getExternalFilesDir("apk").getPath() + "/" + versionCode + ".apk";
        ProgressDialog dialog = new ProgressDialog(this);
        dialog.setTitle("版本更新");
        dialog.setMessage("正在下载新版本,请稍后");
        dialog.setMax(100);
        dialog.setProgress(0);
        dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        dialog.show();
        DownloadUtil.download(url, filepath, new DownloadUtil.OnDownloadListener() {
            @Override
            public void onDownloadSuccess(String path) {
                dialog.setProgress(100);
                dialog.dismiss();
                installApk(filepath);
            }

            @Override
            public void onDownloading(int progress) {
                dialog.setProgress(progress);
            }

            @Override
            public void onDownloadFailed(String msg) {
                dialog.dismiss();
                Looper.prepare();
                showToast("下载失败。");
                Looper.loop();
            }
        });
    }

    public void installApk(String path) {
        //开启扫码界面
        Intent intentUpdate = new Intent("android.intent.action.VIEW");
        intentUpdate.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {  //对Android N及以上的版本做判断
            Uri apkUriN = FileProvider.getUriForFile(MainActivity.this,
                    getApplicationContext().getPackageName() + ".fileprovider", new File(path));
            intentUpdate.addCategory("android.intent.category.DEFAULT");
            intentUpdate.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);   //天假Flag 表示我们需要什么权限
            intentUpdate.setDataAndType(apkUriN, "application/vnd.android.package-archive");
        } else {
            Uri apkUri = Uri.fromFile(new File(path));
            intentUpdate.setDataAndType(apkUri, "application/vnd.android.package-archive");
        }
        startActivity(intentUpdate);
    }

    public void checkUpdate() {
        NetWorks.checkUpdate(BuildConfig.VERSION_CODE, BuildConfig.APPLICATION_ID, new Callback<ResponseResult<UpdateBean>>() {
            @Override
            public void onResponse(Call<ResponseResult<UpdateBean>> call, Response<ResponseResult<UpdateBean>> response) {
                if (response.body() != null && response.body().getCode() == 200) {
                    if (response.body().getData() != null) {
                        String msg = response.body().getData().getExplain();
                        String url = response.body().getData().getUrl();
                        int versionCode = response.body().getData().getVersion();
                        showUpdateDialog(msg, url, versionCode);
                    }
                }
            }

            @Override
            public void onFailure(Call<ResponseResult<UpdateBean>> call, Throwable t) {
            }
        });
    }

    public void showUpdateDialog(String msg, String url, int versionCode) {
        TipDialog tipDialog = new TipDialog(this, "检测到新版本", msg, "升级", "取消", new TipDialog.TipDialogInterface() {
            @Override
            public void onConfirm(Dialog dialog) {
                if (!XXPermissions.isGranted(MainActivity.this, Permission.MANAGE_EXTERNAL_STORAGE)) {
                    XXPermissions.with(MainActivity.this)
                            // 申请多个权限
                            .permission(Permission.MANAGE_EXTERNAL_STORAGE)
                            .request(new OnPermissionCallback() {
                                @Override
                                public void onGranted(List<String> permissions, boolean all) {
                                    if (all) {
                                        //开启扫码界面
                                        downloadApk(url, versionCode);
                                    } else {
                                        Toast.makeText(MainActivity.this, "需要权限", Toast.LENGTH_SHORT).show();
                                    }
                                }

                                @Override
                                public void onDenied(List<String> permissions, boolean never) {
                                    XXPermissions.startPermissionActivity(MainActivity.this, permissions);
                                }
                            });
                } else {
                    downloadApk(url, versionCode);
                }

            }

            @Override
            public void onCancel(Dialog dialog) {
                dialog.dismiss();
            }
        });
        tipDialog.show();
    }
}