更换包名

This commit is contained in:
2022-09-27 19:11:46 +08:00
parent 35c747a334
commit 4f671a3b75
148 changed files with 585 additions and 630 deletions

View File

@@ -0,0 +1,43 @@
package com.fuying.sn.activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.WindowManager;
import androidx.appcompat.app.AppCompatActivity;
import com.fuying.sn.R;
import com.fuying.sn.activity.main.MainActivity;
import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
public class SplashActivity extends AppCompatActivity {
private static String TAG = SplashActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setBar();
setContentView(R.layout.activity_home);
new Handler().postDelayed(() -> {
startActivity(new Intent(SplashActivity.this, MainActivity.class));
finish();
}, 2000);
}
private void setBar() {
UltimateBarX.statusBar(this)
.transparent()
.colorRes(R.color.colorPrimaryDark)
.light(true)
.apply();
UltimateBarX.navigationBar(this)
.transparent()
.colorRes(R.color.colorPrimaryDark)
.light(true)
.apply();
}
}

View File

@@ -0,0 +1,34 @@
package com.fuying.sn.activity.main;
import android.graphics.Bitmap;
import com.fuying.sn.base.BasePresenter;
import com.fuying.sn.base.BaseView;
import com.fuying.sn.bean.BaseResponse;
import com.fuying.sn.bean.SnInfo;
public class MainAContact {
interface Presenter extends BasePresenter<MainView> {
/*获取设备信息*/
void getSnInfo();
/*获取小程序二维码*/
void getAppletQRCode();
/*获取二维码*/
void getQRCode();
/*检查更新*/
void checkUpdate();
/*获取强制下载*/
void getForceInstall();
/*获取所有全局更新*/
void getOverallApp();
}
public interface MainView extends BaseView {
void setSnInfo(BaseResponse<SnInfo> response);
void setAppletQRCode(String url);
void setQRCode(Bitmap bitmap);
void checkUpdateFinish();
void setForceInstall();
void setOverallApp();
}
}

View File

@@ -0,0 +1,148 @@
package com.fuying.sn.activity.main;
import android.content.Context;
import android.graphics.Bitmap;
import android.util.Log;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.fuying.sn.bean.BaseResponse;
import com.fuying.sn.bean.SnInfo;
import com.fuying.sn.config.CommonConfig;
import com.fuying.sn.disklrucache.CacheHelper;
import com.fuying.sn.network.NetInterfaceManager;
import com.fuying.sn.network.UrlAddress;
import com.fuying.sn.utils.CXAESUtil;
import com.fuying.sn.utils.Utils;
import java.lang.reflect.Type;
import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.subjects.BehaviorSubject;
/**
* @author jgy02
*/
public class MainAPresenter implements MainAContact.Presenter {
private String TAG = MainAPresenter.class.getSimpleName();
private MainAContact.MainView mView;
private Context mContext;
private CacheHelper mCacheHelper;
public MainAPresenter(Context context) {
this.mContext = context;
this.mCacheHelper = new CacheHelper(context);
}
private BehaviorSubject<ActivityEvent> lifecycle;
public void setLifecycle(BehaviorSubject<ActivityEvent> lifecycle) {
this.lifecycle = lifecycle;
}
public BehaviorSubject<ActivityEvent> getLifecycle() {
return lifecycle;
}
@Override
public void attachView(MainAContact.MainView view) {
this.mView = view;
}
@Override
public void detachView() {
this.mView = null;
}
@Override
public void getSnInfo() {
NetInterfaceManager.getInstance()
.getSnInfo(true, getLifecycle(), new NetInterfaceManager.ObserverCallback() {
@Override
public void onSubscribe(Disposable d) {
Log.e("getSnInfo", "onSubscribe: ");
}
@Override
public void onNext(BaseResponse response) {
Log.e("getSnInfo", "onNext: " + response);
mView.setSnInfo(response);
}
@Override
public void onError(Throwable e) {
Log.e("getSnInfo", "onError: " + e.getMessage());
String jsonString = mCacheHelper.getAsString(UrlAddress.SNINFO);
Gson gson = new Gson();
Type type = new TypeToken<BaseResponse<SnInfo>>() {
}.getType();
BaseResponse<SnInfo> userInfoBaseResponse = gson.fromJson(jsonString, type);
mView.setSnInfo(userInfoBaseResponse);
}
@Override
public void onComplete() {
Log.e("getSnInfo", "onComplete: ");
}
});
}
@Override
public void getAppletQRCode() {
NetInterfaceManager.getInstance()
.getQRCodeURL(true, getLifecycle(), new NetInterfaceManager.onNextCallback() {
@Override
public void onNext(Object o) {
Log.e("getAppletQRCode", "onNext: " + o);
mView.setAppletQRCode((String) o);
}
@Override
public void onError(Object o) {
Log.e("getAppletQRCode", "onError: " + o);
mView.setAppletQRCode(null);
}
@Override
public void onComplete() {
Log.e("getAppletQRCode", "onComplete: ");
}
});
}
@Override
public void getQRCode() {
String encryptString = CXAESUtil.encrypt(CommonConfig.AES_KEY, Utils.getIMEI(mContext));
Log.e("getQRCode", "setImageAndText: " + encryptString);
Bitmap bitmap = Utils.createQRImage(encryptString, 400, 400);
mView.setQRCode(bitmap);
}
@Override
public void checkUpdate() {
mView.checkUpdateFinish();
}
@Override
public void getForceInstall() {
NetInterfaceManager.getInstance().getForceInstall(false, getLifecycle(), new NetInterfaceManager.CompleteCallback() {
@Override
public void onComplete() {
Log.e("getForceInstall", "onComplete: ");
mView.setForceInstall();
}
});
}
@Override
public void getOverallApp() {
NetInterfaceManager.getInstance().getOverallApp(true, getLifecycle(), new NetInterfaceManager.CompleteCallback() {
@Override
public void onComplete() {
mView.setOverallApp();
}
});
}
}

View File

@@ -0,0 +1,428 @@
package com.fuying.sn.activity.main;
import android.annotation.SuppressLint;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.IBinder;
import android.os.SystemClock;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import com.blankj.utilcode.util.NetworkUtils;
import com.bumptech.glide.Glide;
import com.fuying.sn.BuildConfig;
import com.fuying.sn.R;
import com.fuying.sn.base.BaseActivity;
import com.fuying.sn.bean.BaseResponse;
import com.fuying.sn.bean.SnInfo;
import com.fuying.sn.config.CommonConfig;
import com.fuying.sn.dialog.UserDebugDialog;
import com.fuying.sn.fragment.AppletQRCodeFragment;
import com.fuying.sn.fragment.BaseFragmentPagerAdapter;
import com.fuying.sn.fragment.QRCodeFragment;
import com.fuying.sn.manager.ControlManager;
import com.fuying.sn.manager.DeviceManager;
import com.fuying.sn.network.NetInterfaceManager;
import com.fuying.sn.service.ControlPanelService;
import com.fuying.sn.service.DownloadService;
import com.fuying.sn.service.GuardService;
import com.fuying.sn.service.ManagerService;
import com.fuying.sn.service.StepService;
import com.fuying.sn.service.main.MainService;
import com.fuying.sn.gson.GsonUtils;
import com.fuying.sn.utils.JGYUtils;
import com.fuying.sn.utils.SPUtils;
import com.fuying.sn.utils.TimeUtils;
import com.fuying.sn.utils.ToastUtil;
import com.fuying.sn.utils.Utils;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
public class MainActivity extends BaseActivity implements MainAContact.MainView, NetworkUtils.OnNetworkStatusChangedListener {
private static final String TAG = MainActivity.class.getSimpleName();
@BindView(R.id.tv_exit)
TextView tv_exit;
@BindView(R.id.tv_title)
TextView tv_title;
@BindView(R.id.tv_customversion)
TextView tv_customversion;
@BindView(R.id.tv_sn)
TextView tv_sn;
@BindView(R.id.tv_bind)
TextView tv_bind;
@BindView(R.id.tv_version)
TextView tv_version;
@BindView(R.id.qr_code)
ImageView qr_code;
@BindView(R.id.iv_appqrcode)
ImageView iv_appqrcode;
@BindView(R.id.iv_exit)
ImageView iv_exit;
private MainAPresenter mPresenter;
@Override
public void onDisconnected() {
Log.e(TAG, "onDisconnected: ");
}
@Override
public void onConnected(NetworkUtils.NetworkType networkType) {
Log.e(TAG, "onConnected: ");
timeMillis = System.currentTimeMillis();
mPresenter.getSnInfo();
}
@Override
public int getLayoutId() {
return R.layout.activity_main;
}
@SuppressLint("SetTextI18n")
@Override
public void initView() {
Utils.getAndroiodScreenProperty(this);
ButterKnife.bind(this);
mPresenter = new MainAPresenter(this);
mPresenter.setLifecycle(lifecycleSubject);
mPresenter.attachView(this);
NetworkUtils.registerNetworkStatusChangedListener(this);
try {
PackageManager pm = getPackageManager();
pm.setApplicationEnabledSetting("com.uiui.os", PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
} catch (Exception e) {
Log.e(TAG, "initView: " + e.getMessage());
}
setOnClickListener();
tv_customversion.setText(JGYUtils.getCustomVersion());
tv_sn.setText("IMEI:" + Utils.getIMEI(MainActivity.this));
tv_version.setText(BuildConfig.VERSION_NAME);
task = new TimeTask();
task.execute("ntp.aliyun.com");
//更新设备信息之后停止停止这两个应用以免获取不到信息
int versionCode = (int) SPUtils.get(this, "versionCode", 0);
if (versionCode < BuildConfig.VERSION_CODE) {
SPUtils.put(this, "versionCode", BuildConfig.VERSION_CODE);
}
JGYUtils.getInstance().wakeUpAppstore();
JGYUtils.getInstance().wakeUpUpdateTools();
Utils.getBattery(this);
Utils.getBatterymAh(this);
}
private TimeTask task;
private static class TimeTask extends AsyncTask<String, Long, Long> {
@Override
protected Long doInBackground(String... strings) {
return TimeUtils.getTimeFromNtpServer(strings[0]);
}
@Override
protected void onPostExecute(Long aLong) {
super.onPostExecute(aLong);
Log.e(TAG, "getTimeFromNtpServer: " + aLong);
}
}
//执行所有接口耗时
long timeMillis;
@Override
public void initData() {
if (DeviceManager.isDebugMode()) {
Log.e(TAG, "getAllSPUtils: " + GsonUtils.toJSONString(SPUtils.getAll(this)));
Log.e(TAG, "getWeekDay: " + TimeUtils.inWeekDay());
Log.e(TAG, "getWeekDay: " + TimeUtils.inWeekDay(1627702095000L));
Log.e(TAG, "getWeekDayString: " + new TimeUtils().getWeekDayString());
Log.e(TAG, "getWeekDayString: " + new TimeUtils().getWeekDayString(1627702095000L));
}
if (DeviceManager.isDebugMode()) {
Settings.System.putInt(getContentResolver(), CommonConfig.AOLE_ACTION_DEVELOPER_OPTIONS, 0);
}
startService();
registerReceiver();
timeMillis = System.currentTimeMillis();
Intent intent = new Intent(MainActivity.this, MainService.class);
bindService(intent, mMainServiceConnection, BIND_AUTO_CREATE);
startService(intent);
}
MainService.MainBinder mMainBinder;
private MainServiceConnection mMainServiceConnection = new MainServiceConnection();
private class MainServiceConnection implements ServiceConnection {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
Log.e(TAG, "onServiceConnected: ");
mMainBinder = (MainService.MainBinder) iBinder;
mMainBinder.getService().getLocked();
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
Log.e(TAG, "onServiceDisconnected: ");
}
}
@Override
protected void onResume() {
super.onResume();
Log.e(TAG, "onResume: ");
mPresenter.getSnInfo();
}
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
task.cancel(true);
task = null;
mPresenter.detachView();
NetworkUtils.unregisterNetworkStatusChangedListener(this);
startService();
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (REFRESHACTION.equals(intent.getAction())) {
mPresenter.getSnInfo();
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == KeyEvent.ACTION_DOWN) {
lazyExit();
return true;
}
return super.onKeyDown(keyCode, event);
}
private boolean isDebugMode() {
if (DeviceManager.isDebugMode()) {
return true;
} else {
return (boolean) SPUtils.get(this, CommonConfig.userDebugMode, false);
}
}
final static int DEBUGCOUNTS = 8;//点击次数
final static long DEBUGDURATION = 4 * 1000;//规定有效时间
long[] mDEBUGHits = new long[DEBUGCOUNTS];
private void enterUserDebug() {
//每次点击时,数组向前移动一位
System.arraycopy(mDEBUGHits, 1, mDEBUGHits, 0, mDEBUGHits.length - 1);
//为数组最后一位赋值
mDEBUGHits[mDEBUGHits.length - 1] = SystemClock.uptimeMillis();
if (mDEBUGHits[0] >= SystemClock.uptimeMillis() - DEBUGDURATION) {
mDEBUGHits = new long[DEBUGCOUNTS]; //重新初始化数组
if ((boolean) SPUtils.get(MainActivity.this, CommonConfig.EnableDebug, false)) {
ToastUtil.show("已经是Debug模式");
} else {
showDebugDialog();
}
}
}
private void showDebugDialog() {
UserDebugDialog dialog = new UserDebugDialog(this);
dialog.setOnClickBottomListener(new UserDebugDialog.OnClickBottomListener() {
@Override
public void onPositiveClick() {
if ("53680320".equals(dialog.getEdittext())) {
SPUtils.put(MainActivity.this, CommonConfig.EnableDebug, true);
ToastUtil.show("进入用户Debug模式");
} else {
ToastUtil.show("密码错误");
}
dialog.dismiss();
}
@Override
public void onNegtiveClick() {
dialog.dismiss();
}
});
dialog.show();
dialog.getWindow().setGravity(Gravity.CENTER);
dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
}
private void initTabLayout() {
List<Fragment> fragmentList = new ArrayList<>();
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentList.add(new AppletQRCodeFragment());
fragmentList.add(new QRCodeFragment());
BaseFragmentPagerAdapter adapter = new BaseFragmentPagerAdapter(fragmentManager, fragmentList);
}
private void setOnClickListener() {
iv_exit.setOnClickListener(view -> lazyExit());
tv_title.setOnClickListener(view -> {
if (isDebugMode()) {
enterUserDebug();
}
});
}
private long mPreClickTime;
private void lazyExit() {
if (System.currentTimeMillis() - mPreClickTime > 3000) {
ToastUtil.show("再按一次,退出");
mPreClickTime = System.currentTimeMillis();
} else {
finish();
}
}
private final int COUNTS = 4; // 点击次数
private final long DURATION = 2 * 1000; // 规定有效时间
private long[] mHits = new long[COUNTS];
private void continuousClick(int count, long time) {
//每次点击时,数组向前移动一位
System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1);
//为数组最后一位赋值
mHits[mHits.length - 1] = SystemClock.uptimeMillis();
if (mHits[0] >= SystemClock.uptimeMillis() - DURATION) {
mHits = new long[COUNTS]; //重新初始化数组
ToastUtil.show("正在检查更新");
}
}
private void startService() {
startService(new Intent(this, MainService.class));
startService(new Intent(this, GuardService.class));
startService(new Intent(this, StepService.class));
startService(new Intent(this, DownloadService.class));
startService(new Intent(this, ManagerService.class));
startService(new Intent(this, ControlPanelService.class));
}
private void registerReceiver() {
registerRefreshReceiver();
}
public static final String REFRESHACTION = BuildConfig.APPLICATION_ID + ".REFRESH";
private RefreshReceiver mRefreshReceiver = new RefreshReceiver();
private void registerRefreshReceiver() {
IntentFilter filter = new IntentFilter();
filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
filter.addAction(REFRESHACTION);
registerReceiver(mRefreshReceiver, filter);
}
class RefreshReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (REFRESHACTION.equals(intent.getAction())) {
mPresenter.getSnInfo();
}
}
}
@Override
public void setSnInfo(BaseResponse<SnInfo> response) {
if (response != null) {
//设备已经绑定
if (response.code == 200) {
tv_bind.setText(getString(R.string.bind_succeed));
SnInfo snInfo = response.data;
NetInterfaceManager.getInstance().checkDeviceType(snInfo.getType_id());
}
//设备没有绑定
else if (response.code == 300) {
tv_bind.setText(getString(R.string.scan_tips));
ControlManager.getInstance().setDisableSetting();
}
//没有授权的设备
else if (response.code == 400) {
tv_bind.setText(getString(R.string.device_unauthorized));
ToastUtil.show(getString(R.string.device_unauthorized));
Log.e(TAG, "setSnInfo: " + getString(R.string.device_unauthorized));
ControlManager.getInstance().setDisableSetting();
}
}
mPresenter.getAppletQRCode();
}
@Override
public void setAppletQRCode(String url) {
if (!TextUtils.isEmpty(url)) {
Glide.with(iv_appqrcode)
.load(url)
.dontAnimate()
.placeholder(getDrawable(R.drawable.applet_qrcode))
.into(iv_appqrcode);
} else {
iv_appqrcode.setImageDrawable(getDrawable(R.drawable.applet_qrcode));
}
mPresenter.getQRCode();
}
@Override
public void setQRCode(@NotNull Bitmap bitmap) {
qr_code.setImageBitmap(bitmap);
mPresenter.checkUpdate();
}
@Override
public void checkUpdateFinish() {
mPresenter.getForceInstall();
}
@Override
public void setForceInstall() {
mPresenter.getOverallApp();
}
@Override
public void setOverallApp() {
Log.e(TAG, "SettingFinish: " + (System.currentTimeMillis() - timeMillis) + " ms");
}
}