version:1.5.1018

bugfixes:
add:替换图标,优化网络连接
This commit is contained in:
2025-11-03 09:49:59 +08:00
parent 06513441bd
commit eea2af875b
33 changed files with 973 additions and 62 deletions

View File

@@ -29,8 +29,8 @@ android {
defaultConfig { defaultConfig {
applicationId "com.aoleyun.sn" applicationId "com.aoleyun.sn"
versionCode 192 versionCode 197
versionName "1.5.0821" versionName "1.5.1018"
//There are no CERT files because If the mini sdk version is 23+, the AGP will ignore the V1 scheme signature. //There are no CERT files because If the mini sdk version is 23+, the AGP will ignore the V1 scheme signature.
minSdkVersion 24 minSdkVersion 24

View File

@@ -81,7 +81,7 @@
<!-- 允许访问振动设备 --> <!-- 允许访问振动设备 -->
<uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.VIBRATE" />
<!-- 允许使用PowerManager的 WakeLocks保持进程在休眠时从屏幕消失 --> <!-- 允许使用PowerManager的 WakeLocks保持进程在休眠时从屏幕消失 -->
<!-- <uses-permission android:name="android.permission.WAKE_LOCK" />--> <uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- 允许程序读取或写入系统设置 --> <!-- 允许程序读取或写入系统设置 -->
<uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" />
<!-- android 9.0上使用前台服务,需要添加权限 --> <!-- android 9.0上使用前台服务,需要添加权限 -->
@@ -222,9 +222,18 @@
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity> </activity>
<activity
android:name=".activity.update.AppUpdateActivity"
android:theme="@style/DialogCloseOnTouchOutside" />
<activity <activity
android:name=".activity.requestlog.RequestLogActivity" android:name=".activity.requestlog.RequestLogActivity"
android:launchMode="singleTask" /> android:launchMode="singleTask" />
<activity
android:name=".activity.AudioActivity"
android:launchMode="singleTask"
android:screenOrientation="behind"
android:theme="@style/DialogCloseOnTouchOutside" />
<service <service
android:name=".service.main.MainService" android:name=".service.main.MainService"

View File

@@ -0,0 +1,160 @@
package com.aoleyun.sn.activity;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.PowerManager;
import android.os.Vibrator;
import android.util.Log;
import android.view.View;
import androidx.databinding.DataBindingUtil;
import com.aoleyun.sn.BuildConfig;
import com.aoleyun.sn.R;
import com.aoleyun.sn.base.BaseDataBindingActivity;
import com.aoleyun.sn.databinding.ActivityAudioBinding;
import com.aoleyun.sn.utils.WakeUpUtils;
public class AudioActivity extends BaseDataBindingActivity {
private static final String TAG = "AudioActivity";
private ActivityAudioBinding mBinding;
private PowerManager pm;
private PowerManager.WakeLock wakeLock;
private AudioManager audioManager;
private Vibrator vibrator;
@Override
protected void initDataBinding() {
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_audio);
}
@Override
public void initView() {
mBinding.tvStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
releasePlayer();
finish();
}
});
}
@Override
public void initData() {
pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, "WakeAndLock");
wakeLock.acquire(60 * 1000L);
vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
if (vibrator.hasVibrator()) {
long[] pattern = {1000, 5000, 1000, 5000};
vibrator.vibrate(pattern, 0);
} else {
Log.e(TAG, "initView: no vibrator");
}
WakeUpUtils.wakeUpAndUnlockScreen(this);
setMaxVolume();
defaultCallMediaPlayer();
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Log.e(TAG, "onNewIntent: " + intent.getAction());
}
@Override
protected void onDestroy() {
vibrator.cancel();
releasePlayer();
mediaPlayer = null;
super.onDestroy();
}
private void releasePlayer() {
try {
if (mediaPlayer != null) {
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
mediaPlayer.release();
}
} catch (Exception e) {
Log.e(TAG, "releasePlayer: " + e.getMessage());
}
}
/**
* 播放系统默认来电铃声
*
* @return MediaPlayer对象
* @throws Exception
*/
MediaPlayer mediaPlayer;
public void defaultCallMediaPlayer() {
if (mediaPlayer != null) {
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
mediaPlayer.release();
}
mediaPlayer = MediaPlayer.create(this, R.raw.test);
try {
// mediaPlayer.prepare();
mediaPlayer.setLooping(false);
int duration = mediaPlayer.getDuration() / 1000;
Log.e(TAG, "defaultCallMediaPlayer: " + "duration: " + duration);
int loop = 0;
if (duration <= 1) {
loop = 30;
} else {
loop = (30 / duration);
}
final int[] soundCount = {0};
int finalLoop = loop;
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
if (soundCount[0] <= finalLoop) {
setMaxVolume();
mediaPlayer.start();
soundCount[0] += 1;
Log.e(TAG, "onCompletion: " + "loop: " + finalLoop);
Log.e(TAG, "onCompletion: " + "soundCount: " + soundCount[0]);
} else {
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
mediaPlayer.release();
Log.e(TAG, "onCompletion: " + "loop: " + finalLoop);
Log.e(TAG, "onCompletion: " + "soundCount: " + soundCount[0]);
}
}
});
mediaPlayer.setLooping(false);
mediaPlayer.start();
} catch (Exception e) {
e.printStackTrace();
Log.e(TAG, "defaultCallMediaPlayer: " + e.getMessage());
}
}
private void setMaxVolume() {
if (BuildConfig.DEBUG) {
return;
}
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
int ringMax = audioManager.getStreamMaxVolume(AudioManager.STREAM_RING);
int musicMax = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
int voiceMax = audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL);
audioManager.setStreamVolume(AudioManager.STREAM_RING, ringMax, 0);
audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, voiceMax, 0);
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, musicMax, 0); //音乐音量
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
audioManager.setSpeakerphoneOn(true);
}
}

View File

@@ -217,7 +217,7 @@ public class MainViewModel extends BaseViewModel<ActivityMainBinding, ActivityEv
} else { } else {
int aihuaUnlock = Settings.System.getInt(getCtx().getContentResolver(), CommonConfig.AIHUA_UNLOCK, 0); int aihuaUnlock = Settings.System.getInt(getCtx().getContentResolver(), CommonConfig.AIHUA_UNLOCK, 0);
if (JgyUtils.getInstance().isAihuaFramwwork() && aihuaUnlock == 1) { if (JgyUtils.getInstance().isAihuaFramework() && aihuaUnlock == 1) {
Log.e(TAG, "getDefaultDesktop: " + "Device aihua"); Log.e(TAG, "getDefaultDesktop: " + "Device aihua");
} else { } else {

View File

@@ -0,0 +1,115 @@
package com.aoleyun.sn.activity.update;
import android.content.Intent;
import android.view.View;
import com.aoleyun.sn.BuildConfig;
import com.aoleyun.sn.R;
import com.aoleyun.sn.base.mvvm.BaseMvvmActivity;
import com.aoleyun.sn.bean.AppUpdateInfo;
import com.aoleyun.sn.databinding.ActivityAppUpdateBinding;
import com.aoleyun.sn.gson.GsonUtils;
import com.aoleyun.sn.service.main.MainService;
import com.aoleyun.sn.utils.Utils;
import com.arialyy.aria.core.Aria;
import com.arialyy.aria.core.download.DownloadEntity;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.hjq.toast.Toaster;
import static com.arialyy.aria.core.inf.IEntity.STATE_RUNNING;
public class AppUpdateActivity extends BaseMvvmActivity<AppUpdateViewModel, ActivityAppUpdateBinding> {
private AppUpdateInfo mAppInfoData;
@Override
protected int getLayoutId() {
return R.layout.activity_app_update;
}
@Override
protected void initDataBinding() {
mViewModel.setCtx(this);
mViewModel.setLifecycle(getLifecycleSubject());
mViewModel.setVDBinding(mViewDataBinding);
mViewDataBinding.setClick(new BtnClick());
}
@Override
protected void initView() {
}
@Override
protected void initData() {
Intent intent = getIntent();
mAppInfoData = (AppUpdateInfo) intent.getSerializableExtra("appUpdateInfo");
if (mAppInfoData != null) {
mViewDataBinding.setAppInfo(mAppInfoData);
mViewDataBinding.setMsg("检测到新版本,是否更新");
String pkg = mAppInfoData.getPackages();
switch (pkg) {
case "com.aoleyun.os":
mViewDataBinding.ivAppIcon.setImageDrawable(getDrawable(R.drawable.com_aoleyun_os));
break;
case "com.aoleyun.appstore":
mViewDataBinding.ivAppIcon.setImageDrawable(getDrawable(R.drawable.com_aoleyun_appstore));
break;
case "com.aoleyun.browser":
mViewDataBinding.ivAppIcon.setImageDrawable(getDrawable(R.drawable.com_aoleyun_browser));
break;
case "com.aoleyun.ailog":
mViewDataBinding.ivAppIcon.setImageDrawable(getDrawable(R.drawable.com_aoleyun_ailog));
break;
default:
case BuildConfig.APPLICATION_ID:
mViewDataBinding.ivAppIcon.setImageDrawable(getDrawable(R.mipmap.ic_launcher));
break;
}
} else {
finish();
}
}
public class BtnClick {
public void empty(View view) {
}
public void exit(View view) {
finish();
}
public void upgrade(View view) {
startService(new Intent(AppUpdateActivity.this, MainService.class));
if (mAppInfoData != null) {
DownloadEntity entity = Aria.download(this).getFirstDownloadEntity(mAppInfoData.getUrl());
if (null != entity) {
if (entity.isComplete()) {
JsonObject jsonObject = GsonUtils.getJsonObject(new Gson().toJson(mAppInfoData));
Utils.ariaDownload(AppUpdateActivity.this, mAppInfoData.getUrl(), jsonObject);
} else {
if (entity.getState() == STATE_RUNNING) {
Toaster.show("文件正在下载中");
finish();
} else {
Aria.download(this).resumeAllTask();
Toaster.show("正在下载");
finish();
}
}
} else {
JsonObject jsonObject = GsonUtils.getJsonObject(new Gson().toJson(mAppInfoData));
Utils.ariaDownload(AppUpdateActivity.this, mAppInfoData.getUrl(), jsonObject);
Toaster.show("正在下载更新");
finish();
}
}
}
}
}

View File

@@ -0,0 +1,18 @@
package com.aoleyun.sn.activity.update;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.aoleyun.sn.base.mvvm.BaseViewModel;
import com.aoleyun.sn.databinding.ActivityAppUpdateBinding;
public class AppUpdateViewModel extends BaseViewModel<ActivityAppUpdateBinding, ActivityEvent> {
@Override
public ActivityAppUpdateBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
}

View File

@@ -17,6 +17,7 @@ public class AppUpdateInfo implements Serializable {
@SerializedName("package") @SerializedName("package")
String packages; String packages;
String app_md5; String app_md5;
int is_forcedown;
public int getId() { public int getId() {
return id; return id;
@@ -74,6 +75,14 @@ public class AppUpdateInfo implements Serializable {
this.app_md5 = app_md5; this.app_md5 = app_md5;
} }
public int getIs_forcedown() {
return is_forcedown;
}
public void setIs_forcedown(int is_forcedown) {
this.is_forcedown = is_forcedown;
}
@Override @Override
public String toString() { public String toString() {
return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString(); return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString();

View File

@@ -8,6 +8,10 @@ public class CommonConfig {
public static final String DEFAULT_DESKTOP_PACKAGE = "default_desktop_package_key"; public static final String DEFAULT_DESKTOP_PACKAGE = "default_desktop_package_key";
/**
* 设备重启标志 重启后请求接口Service重启不请求
*/
public final static String DEVICES_REBOOT = "device_reboot_mark";
/*爱华解锁标识*/ /*爱华解锁标识*/
public final static String AIHUA_UNLOCK = "Aihua_unlock_state"; public final static String AIHUA_UNLOCK = "Aihua_unlock_state";

View File

@@ -22,6 +22,7 @@ import com.alibaba.sdk.android.push.CloudPushService;
import com.alibaba.sdk.android.push.CommonCallback; import com.alibaba.sdk.android.push.CommonCallback;
import com.alibaba.sdk.android.push.noonesdk.PushServiceFactory; import com.alibaba.sdk.android.push.noonesdk.PushServiceFactory;
import com.aoleyun.sn.BuildConfig; import com.aoleyun.sn.BuildConfig;
import com.aoleyun.sn.activity.update.AppUpdateActivity;
import com.aoleyun.sn.base.BaseApplication; import com.aoleyun.sn.base.BaseApplication;
import com.aoleyun.sn.bean.AdminAppInfo; import com.aoleyun.sn.bean.AdminAppInfo;
import com.aoleyun.sn.bean.AppAttr; import com.aoleyun.sn.bean.AppAttr;
@@ -1004,10 +1005,11 @@ public class NetInterfaceManager {
Log.e("checkAoleyunUpdate", "onNext: " + jsonString); Log.e("checkAoleyunUpdate", "onNext: " + jsonString);
if (appUpdateInfos != null && appUpdateInfos.size() != 0) { if (appUpdateInfos != null && appUpdateInfos.size() != 0) {
cacheHelper.put(UrlAddress.CHECK_UPDATE, jsonString); cacheHelper.put(UrlAddress.CHECK_UPDATE, jsonString);
for (AppUpdateInfo info : appUpdateInfos) { // for (AppUpdateInfo info : appUpdateInfos) {
JsonObject jsonObject = parseString(new Gson().toJson(info)).getAsJsonObject(); // JsonObject jsonObject = parseString(new Gson().toJson(info)).getAsJsonObject();
JgyUtils.getInstance().installAPK(jsonObject); // JgyUtils.getInstance().installAPK(jsonObject);
} // }
getAllAppUpdate(appUpdateInfos);
} else { } else {
cacheHelper.put(UrlAddress.CHECK_UPDATE, ""); cacheHelper.put(UrlAddress.CHECK_UPDATE, "");
} }
@@ -1027,6 +1029,59 @@ public class NetInterfaceManager {
}); });
} }
/**
* @param appInfos 获取所有app直接更新
*/
public void getAllAppUpdate(List<AppUpdateInfo> appInfos) {
if (appInfos == null || appInfos.size() == 0) {
return;
}
HashMap<String, AppUpdateInfo> appInfoHashMap = new HashMap<>();
for (AppUpdateInfo appInfo : appInfos) {
if (appInfo == null) continue;
appInfoHashMap.put(appInfo.getPackages(), appInfo);
}
PackageManager pm = mContext.getPackageManager();
for (Map.Entry<String, AppUpdateInfo> entry : appInfoHashMap.entrySet()) {
PackageInfo packageInfo = null;
try {
packageInfo = pm.getPackageInfo(entry.getKey(), 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (entry.getValue() != null) {
if (packageInfo == null) {
//未安装
String s = new Gson().toJson(entry.getValue());
Log.e(TAG, "getAllAppUpdate: " + s);
JsonObject jsonObject = GsonUtils.getJsonObject(s);
Utils.ariaDownload(mContext, entry.getValue().getUrl(), jsonObject);
} else {
long appVersionCode;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
appVersionCode = packageInfo.getLongVersionCode();
} else {
appVersionCode = packageInfo.versionCode;
}
long versionCode = entry.getValue().getVersion_code();
//版本升级
if (appVersionCode < versionCode) {
int is_forcedown = entry.getValue().getIs_forcedown();
if (is_forcedown == 1) {
JsonObject jsonObject = GsonUtils.getJsonObject(new Gson().toJson(entry.getValue()));
Utils.ariaDownload(mContext, entry.getValue().getUrl(), jsonObject);
} else {
Intent intent = new Intent(mContext, AppUpdateActivity.class);
intent.putExtra("appUpdateInfo", entry.getValue());
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);
}
}
}
}
}
}
public interface UpdateCallback { public interface UpdateCallback {
void onUpdate(List<AppUpdateInfo> appUpdateInfos); void onUpdate(List<AppUpdateInfo> appUpdateInfos);
} }
@@ -2582,10 +2637,10 @@ public class NetInterfaceManager {
public void onNext(@NonNull BaseResponse response) { public void onNext(@NonNull BaseResponse response) {
if (response.code == OK) { if (response.code == OK) {
cacheHelper.put(UrlAddress.SEND_DEVICES, macJson); cacheHelper.put(UrlAddress.SEND_DEVICES, macJson);
Log.e("sendMACAddress", response.msg); Log.e("sendMACAddress", "onNext: " + response.msg);
SPUtils.put(mContext, "macJson", macJson); SPUtils.put(mContext, "macJson", macJson);
} else { } else {
Log.e("sendMACAddress", response.toString()); Log.e("sendMACAddress", "onNext: " + response.toString());
} }
} }

View File

@@ -24,6 +24,7 @@ import android.view.Gravity;
import android.view.WindowManager; import android.view.WindowManager;
import com.aoleyun.sn.R; import com.aoleyun.sn.R;
import com.aoleyun.sn.activity.AudioActivity;
import com.aoleyun.sn.activity.main.MainActivity; import com.aoleyun.sn.activity.main.MainActivity;
import com.aoleyun.sn.bean.ApkInfoPush; import com.aoleyun.sn.bean.ApkInfoPush;
import com.aoleyun.sn.bean.BaseResponse; import com.aoleyun.sn.bean.BaseResponse;
@@ -1171,8 +1172,10 @@ public class PushManager {
} }
private void playSound(String extras) { private void playSound(String extras) {
JsonObject jsonObject = GsonUtils.getJsonObject(extras); // defaultCallMediaPlayer(mContext);
defaultCallMediaPlayer(mContext); Intent intent = new Intent(mContext, AudioActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);
} }
/** /**

View File

@@ -24,6 +24,7 @@ import io.reactivex.rxjava3.disposables.Disposable;
public class BootReceiver extends BroadcastReceiver { public class BootReceiver extends BroadcastReceiver {
private static String TAG = "BootReceiver" + ":aoleyunsn"; private static String TAG = "BootReceiver" + ":aoleyunsn";
public static final String BOOT_COMPLETED = "aoleyun.intent.action.BOOT_COMPLETED"; public static final String BOOT_COMPLETED = "aoleyun.intent.action.BOOT_COMPLETED";
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
static { static {
getLockedState(); getLockedState();
@@ -74,7 +75,8 @@ public class BootReceiver extends BroadcastReceiver {
default: default:
break; break;
case Intent.ACTION_BOOT_COMPLETED: case Intent.ACTION_BOOT_COMPLETED:
MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE).encode(ConnectManager.REBOOT_LAST_ONNECT_TIME, System.currentTimeMillis()); mMMKV.encode(CommonConfig.DEVICES_REBOOT, true);
mMMKV.encode(ConnectManager.REBOOT_LAST_ONNECT_TIME, System.currentTimeMillis());
if ((int) SPUtils.get(context, CommonConfig.FIRST_STARTUP, 0) == 0) { if ((int) SPUtils.get(context, CommonConfig.FIRST_STARTUP, 0) == 0) {
LogDBManager.getInstance().creatRebootLog("首次启动", TimeUtils.transferLongToDate(System.currentTimeMillis())); LogDBManager.getInstance().creatRebootLog("首次启动", TimeUtils.transferLongToDate(System.currentTimeMillis()));
SPUtils.put(context, CommonConfig.FIRST_STARTUP, 1); SPUtils.put(context, CommonConfig.FIRST_STARTUP, 1);

View File

@@ -22,7 +22,7 @@ public class MainSContact {
/*分支3 上传信息*/ /*分支3 上传信息*/
/*上传联网时间*/ /*上传联网时间*/
void sendNetwork(List<Long> time); void sendNetwork(List<Long> time);
/*发送mac地址*/ /*发送mac地址*/
void sendMacAddress(); void sendMacAddress();
/*更新设备信息*/ /*更新设备信息*/

View File

@@ -86,7 +86,7 @@ public class MainSPresenter implements MainSContact.Presenter {
@Override @Override
public void getLockedState() { public void getLockedState() {
Log.e(TAG, "getLockedState: "); Log.e(TAG, "getLockedState: ");
if (JgyUtils.getInstance().isAihuaFramwwork()) { if (JgyUtils.getInstance().isAihuaFramework()) {
int aihuaUnlock = Settings.System.getInt(mContext.getContentResolver(), CommonConfig.AIHUA_UNLOCK, 0); int aihuaUnlock = Settings.System.getInt(mContext.getContentResolver(), CommonConfig.AIHUA_UNLOCK, 0);
if (aihuaUnlock == 1) { if (aihuaUnlock == 1) {
return; return;
@@ -235,14 +235,14 @@ public class MainSPresenter implements MainSContact.Presenter {
if (JgyUtils.isOfficialVersion()) { if (JgyUtils.isOfficialVersion()) {
mView.updateDeviceInfoFinish(); mView.updateDeviceInfoFinish();
} }
if (!JgyUtils.getInstance().tagEmpty()) { // if (!JgyUtils.getInstance().tagEmpty()) {
NetInterfaceManager.getInstance().updateDeviceInfo(true, getLifecycle(), new NetInterfaceManager.onCompleteCallback() { NetInterfaceManager.getInstance().updateDeviceInfo(true, getLifecycle(), new NetInterfaceManager.onCompleteCallback() {
@Override @Override
public void onComplete() { public void onComplete() {
mView.updateDeviceInfoFinish(); mView.updateDeviceInfoFinish();
} }
}); });
} // }
} }
/** /**
@@ -250,14 +250,14 @@ public class MainSPresenter implements MainSContact.Presenter {
*/ */
@Override @Override
public void sendInstalled() { public void sendInstalled() {
if (!JgyUtils.getInstance().tagEmpty()) { // if (!JgyUtils.getInstance().tagEmpty()) {
NetInterfaceManager.getInstance().sendInstalledAppInfo(new NetInterfaceManager.onCompleteCallback() { NetInterfaceManager.getInstance().sendInstalledAppInfo(new NetInterfaceManager.onCompleteCallback() {
@Override @Override
public void onComplete() { public void onComplete() {
mView.sendInstalledFinish(); mView.sendInstalledFinish();
} }
}); });
} // }
} }
/** /**
@@ -375,7 +375,7 @@ public class MainSPresenter implements MainSContact.Presenter {
mView.getDefaultDesktopFinish(); mView.getDefaultDesktopFinish();
} else { } else {
int aihuaUnlock = Settings.System.getInt(mContext.getContentResolver(), CommonConfig.AIHUA_UNLOCK, 0); int aihuaUnlock = Settings.System.getInt(mContext.getContentResolver(), CommonConfig.AIHUA_UNLOCK, 0);
if (JgyUtils.getInstance().isAihuaFramwwork() && aihuaUnlock == 1) { if (JgyUtils.getInstance().isAihuaFramework() && aihuaUnlock == 1) {
Log.e(TAG, "getDefaultDesktop: " + "Device aihua"); Log.e(TAG, "getDefaultDesktop: " + "Device aihua");
mView.getDefaultDesktopFinish(); mView.getDefaultDesktopFinish();
} else { } else {

View File

@@ -108,14 +108,14 @@ public class MainService extends Service implements MainSContact.MainView, Netwo
String WiFiAlias = Utils.getWifiAlias(this); String WiFiAlias = Utils.getWifiAlias(this);
Log.e("OnNetworkStatusChanged", "onConnected: " + WiFiAlias); Log.e("OnNetworkStatusChanged", "onConnected: " + WiFiAlias);
JgyUtils.getInstance().addNetworkConnectedTime(System.currentTimeMillis() / 1000); JgyUtils.getInstance().addNetworkConnectedTime(System.currentTimeMillis() / 1000);
mPresenter.sendNetwork(JgyUtils.getInstance().getNetworkConnectedTime());
if (JgyUtils.getInstance().isScreenOn()) { if (JgyUtils.getInstance().isScreenOn()) {
TimeTask task = new TimeTask(); TimeTask task = new TimeTask();
task.execute("ntp.aliyun.com"); task.execute("ntp.aliyun.com");
if (!checkAoleyunApp()) { if (!checkAoleyunApp()) {
mPresenter.checkAoleyunUpdate(); mPresenter.checkAoleyunUpdate();
} }
mPresenter.sendNetwork(JgyUtils.getInstance().getNetworkConnectedTime()); mInternetConnected.onConnected(WiFiAlias);
mPresenter.getLockedState();
} }
} }
@@ -186,7 +186,49 @@ public class MainService extends Service implements MainSContact.MainView, Netwo
}); });
} }
private static KillAppListener killAppListener; private InternetConnected mInternetConnected;
public interface InternetConnected {
void onConnected(String alias);
}
private final ObservableOnSubscribe<String> networkSubscribe = new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter emitter) throws Exception {
mInternetConnected = new InternetConnected() {
@Override
public void onConnected(String alias) {
Log.e(TAG, "networkSubscribe: onConnected " + alias);
emitter.onNext(alias);
}
};
}
};
private Observer<String> networkObserver = new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
Log.e("networkObserver", "onSubscribe: ");
}
@Override
public void onNext(String action) {
Log.e("networkObserver", "onNext: " + action);
mPresenter.getLockedState();
}
@Override
public void onError(Throwable e) {
Log.e("networkObserver", "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Log.e("networkObserver", "onComplete: ");
}
};
private KillAppListener killAppListener;
public interface KillAppListener { public interface KillAppListener {
void killApp(String action); void killApp(String action);
@@ -217,6 +259,10 @@ public class MainService extends Service implements MainSContact.MainView, Netwo
JgyUtils.getInstance().killPackage(PackageNames.NOTIFICATIONS); JgyUtils.getInstance().killPackage(PackageNames.NOTIFICATIONS);
JgyUtils.getInstance().killPackage(PackageNames.BROWSER); JgyUtils.getInstance().killPackage(PackageNames.BROWSER);
JgyUtils.getInstance().killPackage(PackageNames.AILOG); JgyUtils.getInstance().killPackage(PackageNames.AILOG);
JgyUtils.getInstance().killPackage("com.jxw.launcher");
JgyUtils.getInstance().killPackage("com.jxw.newyouer.video");
JgyUtils.getInstance().killPackage("com.jxw.mskt.video");
// JgyUtils.getInstance().killPackage("com.ygyb.yischool"); // JgyUtils.getInstance().killPackage("com.ygyb.yischool");
} }
@@ -446,7 +492,14 @@ public class MainService extends Service implements MainSContact.MainView, Netwo
TimeTask task = new TimeTask(); TimeTask task = new TimeTask();
task.execute("ntp.aliyun.com"); task.execute("ntp.aliyun.com");
mPresenter.getLockedState(); boolean reboot = mMMKV.decodeBool(CommonConfig.DEVICES_REBOOT, false);
if (reboot) {
mPresenter.getLockedState();
mMMKV.encode(CommonConfig.DEVICES_REBOOT, false);
Log.e(TAG, "onCreate: device rebooted");
} else {
Log.e(TAG, "onCreate: device not reboot");
}
Settings.Global.putString(getContentResolver(), "AOLE_SERIAL", Utils.getSerial(MainService.this)); Settings.Global.putString(getContentResolver(), "AOLE_SERIAL", Utils.getSerial(MainService.this));
@@ -561,6 +614,11 @@ public class MainService extends Service implements MainSContact.MainView, Netwo
.throttleLast(30, TimeUnit.SECONDS) .throttleLast(30, TimeUnit.SECONDS)
// .throttleLast(3, TimeUnit.SECONDS) // .throttleLast(3, TimeUnit.SECONDS)
.subscribe(killObserver); .subscribe(killObserver);
Observable.create(networkSubscribe)
.throttleLast(1, TimeUnit.HOURS)
.subscribe(networkObserver);
JgyUtils.getInstance().checkAoleyunApp(); JgyUtils.getInstance().checkAoleyunApp();
} }
@@ -1133,9 +1191,43 @@ public class MainService extends Service implements MainSContact.MainView, Netwo
} else { } else {
mPresenter.getFirstConnect(); mPresenter.getFirstConnect();
mPresenter.getStudesInfo(); mPresenter.getStudesInfo();
mPresenter.getSystemSettingBegin();
mPresenter.getAppLimit();
mPresenter.getForceDownload();
mPresenter.getDefaultDesktop();
mPresenter.setLogoImg();
mPresenter.getWallpaper();
mPresenter.getAllAppList();
mPresenter.getBrowserBookmarks();
mPresenter.getBrowserWhiteList();
mPresenter.getDesktopIcon();
mPresenter.getAppAutoStartUpdateAndNet();
mPresenter.getSnAppAttr();
mPresenter.getAppIdControl();
mPresenter.setAppinsideWeb();
mPresenter.getSystemSetting();
mPresenter.getDefaultApp();
mPresenter.setTopApp();
mPresenter.getPoweroffTime();
mPresenter.getSnTimeControl();
mPresenter.getSnSetting();
mPresenter.getCloudLessonSettings();
mPresenter.getEbagCode();
mPresenter.getBlackList();
mPresenter.getWhiteList();
mPresenter.getWiFiPasswd();
} }
mPresenter.getDeveloper();
mPresenter.sendMacAddress(); mPresenter.sendMacAddress();
mPresenter.updateDeviceInfo();
mPresenter.sendInstalled();
mPresenter.checkAoleyunUpdate();
mPresenter.checkTestUpdate();
mPresenter.getDeveloper();
mPresenter.getRomApp();
mPresenter.getScreenLockState();
mPresenter.geteFence();
} }
/** /**
@@ -1152,7 +1244,6 @@ public class MainService extends Service implements MainSContact.MainView, Netwo
SysSettingUtils.setDisableSetting(this); SysSettingUtils.setDisableSetting(this);
JgyUtils.getInstance().writeAppPackageList(); JgyUtils.getInstance().writeAppPackageList();
} }
mPresenter.getSystemSettingBegin();
} }
@Override @Override
@@ -1167,23 +1258,22 @@ public class MainService extends Service implements MainSContact.MainView, Netwo
@Override @Override
public void sendMacFinish() { public void sendMacFinish() {
mPresenter.updateDeviceInfo();
} }
@Override @Override
public void updateDeviceInfoFinish() { public void updateDeviceInfoFinish() {
mPresenter.sendInstalled();
} }
@Override @Override
public void sendInstalledFinish() { public void sendInstalledFinish() {
Log.e(TAG, "sendInstalledFinish: "); Log.e(TAG, "sendInstalledFinish: ");
mPresenter.checkAoleyunUpdate();
} }
@Override @Override
public void checkAoleyunUpdateFinish() { public void checkAoleyunUpdateFinish() {
mPresenter.checkTestUpdate();
} }
@Override @Override
@@ -1193,12 +1283,11 @@ public class MainService extends Service implements MainSContact.MainView, Netwo
@Override @Override
public void getDeveloperFinish() { public void getDeveloperFinish() {
mPresenter.getRomApp();
} }
@Override @Override
public void getRomAppFinish() { public void getRomAppFinish() {
mPresenter.getScreenLockState();
} }
@Override @Override
@@ -1218,7 +1307,6 @@ public class MainService extends Service implements MainSContact.MainView, Netwo
SPUtils.put(this, "is_screen_lock", false); SPUtils.put(this, "is_screen_lock", false);
SPUtils.put(this, "screen_tips", ""); SPUtils.put(this, "screen_tips", "");
} }
mPresenter.geteFence();
} }
@Override @Override
@@ -1228,107 +1316,107 @@ public class MainService extends Service implements MainSContact.MainView, Netwo
@Override @Override
public void setSystemSetting() { public void setSystemSetting() {
mPresenter.getAppLimit();
} }
@Override @Override
public void getAppLimitFinish() { public void getAppLimitFinish() {
mPresenter.getForceDownload();
} }
@Override @Override
public void getForceDownloadFinish() { public void getForceDownloadFinish() {
mPresenter.getDefaultDesktop();
} }
@Override @Override
public void getDefaultDesktopFinish() { public void getDefaultDesktopFinish() {
mPresenter.setLogoImg();
} }
@Override @Override
public void setLogoImgFinish() { public void setLogoImgFinish() {
mPresenter.getWallpaper();
} }
@Override @Override
public void getWallpaperFinish() { public void getWallpaperFinish() {
mPresenter.getAllAppList();
} }
@Override @Override
public void getAllAppListFinish() { public void getAllAppListFinish() {
mPresenter.getBrowserBookmarks();
} }
@Override @Override
public void getBrowserBookmarksFinish() { public void getBrowserBookmarksFinish() {
mPresenter.getBrowserWhiteList();
} }
@Override @Override
public void setBrowserWhiteList() { public void setBrowserWhiteList() {
mPresenter.getDesktopIcon();
} }
@Override @Override
public void getDesktopIconFinish() { public void getDesktopIconFinish() {
mPresenter.getAppAutoStartUpdateAndNet();
} }
@Override @Override
public void getAppAutoStartUpdateAndNetFinish() { public void getAppAutoStartUpdateAndNetFinish() {
mPresenter.getSnAppAttr();
} }
@Override @Override
public void getSnAppAttrFinish() { public void getSnAppAttrFinish() {
mPresenter.getAppIdControl();
} }
@Override @Override
public void getAppIdControlFinish() { public void getAppIdControlFinish() {
mPresenter.setAppinsideWeb();
} }
@Override @Override
public void setAppinsideWebFinish() { public void setAppinsideWebFinish() {
mPresenter.getSystemSetting();
} }
@Override @Override
public void getSystemSettingFinish() { public void getSystemSettingFinish() {
mPresenter.getDefaultApp();
} }
@Override @Override
public void setDefaultAppFinish() { public void setDefaultAppFinish() {
mPresenter.setTopApp();
} }
@Override @Override
public void setTopAppFinish() { public void setTopAppFinish() {
mPresenter.getPoweroffTime();
} }
@Override @Override
public void setPoweroffTime() { public void setPoweroffTime() {
mPresenter.getSnTimeControl();
} }
@Override @Override
public void getSnTimeControlFinish() { public void getSnTimeControlFinish() {
mPresenter.getSnSetting();
} }
@Override @Override
public void getSnSettingFinish() { public void getSnSettingFinish() {
mPresenter.getCloudLessonSettings();
} }
@Override @Override
public void setCloudLessonSettings() { public void setCloudLessonSettings() {
mPresenter.getEbagCode();
} }
@Override @Override
@@ -1340,7 +1428,7 @@ public class MainService extends Service implements MainSContact.MainView, Netwo
// mPresenter.getBlackList(); // mPresenter.getBlackList();
Log.e(TAG, "getEBagCodeFinish: " + "未激活"); Log.e(TAG, "getEBagCodeFinish: " + "未激活");
} }
mPresenter.getBlackList();
} }
@Deprecated @Deprecated
@@ -1352,13 +1440,12 @@ public class MainService extends Service implements MainSContact.MainView, Netwo
@Override @Override
public void getBlackListFinish() { public void getBlackListFinish() {
Log.e(TAG, "getBlackListFinish: "); Log.e(TAG, "getBlackListFinish: ");
mPresenter.getWhiteList();
} }
@Override @Override
public void getWhiteListFinish() { public void getWhiteListFinish() {
Log.e(TAG, "getWhiteListFinish: "); Log.e(TAG, "getWhiteListFinish: ");
mPresenter.getWiFiPasswd();
} }
@Override @Override

View File

@@ -2106,8 +2106,13 @@ public class JgyUtils {
if (oldStatu == (state ^ 1)) { if (oldStatu == (state ^ 1)) {
Log.e(TAG, "setDeveloperOptions: oldStatu = " + oldStatu + " no changed"); Log.e(TAG, "setDeveloperOptions: oldStatu = " + oldStatu + " no changed");
} }
//这个需要反着来
Settings.System.putInt(crv, CommonConfig.AOLE_ACTION_DEVELOPER_OPTIONS, state ^ 1); if (MT8768Tag.equalsIgnoreCase(BuildConfig.platform)) {
Settings.System.putInt(crv, CommonConfig.AOLE_ACTION_DEVELOPER_OPTIONS, state);
} else {
//这个需要反着来
Settings.System.putInt(crv, CommonConfig.AOLE_ACTION_DEVELOPER_OPTIONS, state ^ 1);
}
Log.e(TAG, "setDeveloperOptions: DEVELOPMENT_SETTINGS_ENABLED = " + Settings.Global.getInt(crv, Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0)); Log.e(TAG, "setDeveloperOptions: DEVELOPMENT_SETTINGS_ENABLED = " + Settings.Global.getInt(crv, Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0));
Log.e(TAG, "setDeveloperOptions: ADB_ENABLED = " + Settings.Global.getInt(crv, Settings.Global.ADB_ENABLED, 0)); Log.e(TAG, "setDeveloperOptions: ADB_ENABLED = " + Settings.Global.getInt(crv, Settings.Global.ADB_ENABLED, 0));
@@ -3152,7 +3157,7 @@ public class JgyUtils {
return Build.HARDWARE; return Build.HARDWARE;
} }
public boolean isAihuaFramwwork() { public boolean isAihuaFramework() {
return (Utils.getProperty("ro.build.display.id", "获取失败").contains("_aihua")); return (Utils.getProperty("ro.build.display.id", "获取失败").contains("_aihua"));
} }
@@ -3171,8 +3176,17 @@ public class JgyUtils {
public boolean isScreenOn() { public boolean isScreenOn() {
PowerManager powerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); PowerManager powerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
boolean isScreenOn;
// 使用新版本的 API更准确
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
isScreenOn = powerManager.isInteractive();
} else {
// 旧版本 API已过时但用于兼容低版本系统
isScreenOn = powerManager.isScreenOn();
}
Log.e(TAG, "isScreenOn: " + isScreenOn);
return isScreenOn;
//true为打开false为关闭 //true为打开false为关闭
return powerManager.isInteractive();
} }
private static final String CONNECTED_TIME_KEY = "connectedTimeKey"; private static final String CONNECTED_TIME_KEY = "connectedTimeKey";

View File

@@ -0,0 +1,119 @@
package com.aoleyun.sn.utils;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.KeyguardManager;
import android.content.Context;
import android.os.Build;
import android.os.PowerManager;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;
import androidx.annotation.RequiresApi;
public class WakeUpUtils {
/**
* 唤醒手机屏幕并解锁
*/
public static void wakeUpAndUnlock(Activity activity) {
// 获取电源管理器对象
PowerManager pm = (PowerManager) activity.getApplicationContext()
.getSystemService(Context.POWER_SERVICE);
boolean screenOn = pm.isScreenOn();
Log.d("WakeScreen0", "screenOn: " + screenOn);
if (!screenOn) {
// 获取PowerManager.WakeLock对象,后面的参数|表示同时传入两个值,最后的是LogCat里用的Tag
@SuppressLint("InvalidWakeLockTag") PowerManager.WakeLock wl = pm.newWakeLock(
PowerManager.ACQUIRE_CAUSES_WAKEUP |
PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "bright");
wl.acquire(10000); // 点亮屏幕
wl.release(); // 释放
}
// 屏幕解锁
KeyguardManager keyguardManager = (KeyguardManager) activity.getApplicationContext()
.getSystemService(Context.KEYGUARD_SERVICE);
KeyguardManager.KeyguardLock keyguardLock = keyguardManager.newKeyguardLock("unLock");
// 屏幕锁定
// keyguardLock.reenableKeyguard();
keyguardLock.disableKeyguard(); // 解锁
unLockScreen(activity);
}
private static void unLockScreen(Activity activity) {
final Window win = activity.getWindow();
win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
| WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);
}
/**
* 唤醒手机屏幕并解锁
*/
@RequiresApi(api = Build.VERSION_CODES.O)
public static void wakeUpAndUnlockScreen(Activity activity) {
Window win = activity.getWindow();
win.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
PowerManager pm = (PowerManager) activity.getSystemService(Context.POWER_SERVICE);
@SuppressLint("InvalidWakeLockTag")
PowerManager.WakeLock wakelock = pm.newWakeLock(
PowerManager.FULL_WAKE_LOCK
| PowerManager.ACQUIRE_CAUSES_WAKEUP, "xx");
wakelock.acquire();
wakelock.release();
KeyguardManager keyguardManager = (KeyguardManager) activity.getApplicationContext()
.getSystemService(Context.KEYGUARD_SERVICE);
if (activity == null) return;
keyguardManager.requestDismissKeyguard(activity, new KeyguardManager.KeyguardDismissCallback() {
@Override
public void onDismissError() {
super.onDismissError();
Log.d("xxx-->", "1 onDismissError");
}
@Override
public void onDismissSucceeded() {
super.onDismissSucceeded();
Log.d("xxx-->", "1 onDismissSucceeded");
}
@Override
public void onDismissCancelled() {
super.onDismissCancelled();
Log.d("xxx-->", "1 onDismissCancelled");
}
});
if (activity == null) return;
keyguardManager.requestDismissKeyguard(activity, new KeyguardManager.KeyguardDismissCallback() {
@Override
public void onDismissError() {
super.onDismissError();
Log.d("xxx-->", "2 onDismissError");
}
@Override
public void onDismissSucceeded() {
super.onDismissSucceeded();
Log.d("xxx-->", "2 onDismissSucceeded");
}
@Override
public void onDismissCancelled() {
super.onDismissCancelled();
Log.d("xxx-->", "2 onDismissCancelled");
}
});
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 内部颜色 -->
<solid android:color="#D74255" />
<!-- 圆角的幅度 -->
<corners
android:bottomLeftRadius="8dp"
android:bottomRightRadius="8dp"
android:topLeftRadius="8dp"
android:topRightRadius="8dp" />
<padding
android:left="10dp"
android:right="10dp" />
</shape>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ffffff" />
<stroke
android:width="0.8dp"
android:color="#ffffff" />
<!-- 圆角 -->
<corners android:radius="12dp" />
</shape>

View File

@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="200dp"
android:height="200dp"
android:viewportWidth="1024"
android:viewportHeight="1024">
<path
android:fillColor="#BFBFBF"
android:pathData="M900,488c0,-35.2 -17.6,-68 -47.2,-88.8 -12,-7.2 -27.2,-4.8 -36,6.4 -8,12 -4.8,27.2 7.2,35.2 15.2,11.2 25.6,28.8 25.6,47.2 0,18.4 -9.6,36 -25.6,47.2 -12,7.2 -14.4,23.2 -7.2,35.2 4.8,6.4 12.8,11.2 21.6,11.2 4.8,0 10.4,-1.6 14.4,-4 28.8,-21.6 47.2,-54.4 47.2,-89.6zM899.2,314.4c-12,-7.2 -27.2,-4.8 -36,6.4 -8,12 -4.8,27.2 7.2,35.2 44.8,30.4 70.4,80 70.4,132 0,52.8 -26.4,102.4 -70.4,132 -12,7.2 -14.4,23.2 -7.2,35.2 4.8,6.4 12.8,11.2 21.6,11.2 4.8,0 10.4,-1.6 14.4,-4 58.4,-40 92.8,-104.8 92.8,-174.4s-34.4,-134.4 -92.8,-173.6zM210.4,445.6c12,-7.2 14.4,-23.2 7.2,-35.2 -8,-12 -24,-14.4 -36,-6.4 -29.6,20.8 -48.8,54.4 -48.8,91.2s17.6,70.4 48.8,91.2c4,3.2 9.6,4 14.4,4 8.8,0 16,-4 21.6,-11.2 8,-12 4.8,-27.2 -7.2,-35.2 -16.8,-11.2 -26.4,-29.6 -26.4,-49.6s9.6,-38.4 26.4,-48.8zM156.8,632c-46.4,-31.2 -73.6,-82.4 -73.6,-136.8s27.2,-105.6 73.6,-136.8c12,-7.2 14.4,-23.2 7.2,-35.2 -8,-12 -24,-14.4 -36,-6.4C68,356.8 32,424.8 32,496s36,137.6 95.2,179.2c4,3.2 9.6,4 14.4,4 8.8,0 16,-4 21.6,-11.2 8.8,-12.8 4.8,-28.8 -6.4,-36zM653.6,702.4l-344.8,-61.6 87.2,-469.6 344.8,61.6 -87.2,469.6zM482.4,808.8l-51.2,-8.8c-14.4,-2.4 -23.2,-16 -20.8,-29.6 2.4,-13.6 16,-22.4 29.6,-20l51.2,8.8c14.4,2.4 23.2,16 20.8,29.6 -2.4,13.6 -16,22.4 -29.6,20zM756.8,176.8l-356,-63.2c-28,-4.8 -55.2,12.8 -60,40.8L223.2,788.8c-4.8,27.2 13.6,53.6 41.6,59.2l356,63.2c28,4.8 55.2,-12.8 60,-40.8l117.6,-635.2c5.6,-27.2 -12.8,-53.6 -41.6,-58.4z"/>
</vector>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 内部颜色 -->
<solid android:color="@color/default_blue" />
<!-- 圆角的幅度 -->
<corners android:radius="32dp" />
<padding
android:bottom="6dp"
android:left="32dp"
android:right="32dp"
android:top="6dp" />
</shape>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 内部颜色 -->
<solid android:color="@color/lightGray" />
<!-- 圆角的幅度 -->
<corners android:radius="32dp" />
<padding
android:bottom="6dp"
android:left="32dp"
android:right="32dp"
android:top="6dp" />
</shape>

View File

@@ -0,0 +1,165 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".activity.update.AppUpdateActivity">
<data>
<variable
name="appInfo"
type="com.aoleyun.sn.bean.AppUpdateInfo" />
<variable
name="msg"
type="String" />
<variable
name="click"
type="com.aoleyun.sn.activity.update.AppUpdateActivity.BtnClick" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:background="@drawable/dialog_background"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:adjustViewBounds="true"
android:onClick="@{click::exit}"
android:scaleType="centerCrop"
android:src="@drawable/icon_close"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:gravity="center"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center_vertical"
android:text="检查更新"
android:textColor="@color/black"
android:textSize="18sp"
android:textStyle="bold"
android:visibility="visible" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:orientation="vertical"
app:layout_constraintBottom_toTopOf="@+id/linearLayout3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout2">
<TextView
android:id="@+id/message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginEnd="24dp"
android:gravity="center"
android:lineSpacingExtra="2dp"
android:lineSpacingMultiplier="1.2"
android:minHeight="50dp"
android:minLines="2"
android:text="@{msg}"
android:textColor="@color/black"
android:textSize="16sp"
tools:text="提示消息提示消息提示消息提示消息提示消息" />
<ImageView
android:id="@+id/iv_app_icon"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_gravity="center"
android:layout_marginTop="16dp"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
android:src="@mipmap/ic_launcher" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="8dp"
android:text="@{`V`+appInfo.version_name}"
android:textColor="@color/contact_text_color"
android:textSize="16sp" />
</LinearLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/linearLayout3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="32dp"
app:layout_constraintBottom_toBottomOf="parent">
<TextView
android:id="@+id/negative"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="24dp"
android:layout_weight="1"
android:background="@drawable/update_cancel_background"
android:gravity="center"
android:onClick="@{click::exit}"
android:singleLine="true"
android:text="取消"
android:textColor="@color/white"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/positive"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_weight="1"
android:background="@drawable/update_background"
android:gravity="center"
android:onClick="@{click::upgrade}"
android:singleLine="true"
android:text="更新"
android:textColor="@color/white"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -0,0 +1,68 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".activity.AudioActivity">
<data>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="300dp"
android:layout_height="320dp"
android:background="@drawable/background_main"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="设备提醒"
android:textColor="@color/black"
android:textSize="22sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
android:src="@drawable/ic_shake"
app:layout_constraintBottom_toTopOf="@+id/tv_stop"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView4" />
<TextView
android:id="@+id/tv_stop"
android:layout_width="200dp"
android:layout_height="40dp"
android:layout_marginBottom="24dp"
android:background="@drawable/bg_sure"
android:gravity="center"
android:paddingTop="2dp"
android:paddingBottom="2dp"
android:text="确定"
android:textColor="@color/white"
android:textSize="17sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/textView4"
app:layout_constraintStart_toStartOf="@+id/textView4" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View File

@@ -62,4 +62,7 @@
<color name="text_black">#1f1f1f</color> <color name="text_black">#1f1f1f</color>
<color name="text_hint_gray">#989898</color> <color name="text_hint_gray">#989898</color>
<color name="contact_text_color">#98999a</color>
<color name="lightGray">#FFD3D3D3</color>
<color name="default_blue">#0166ff</color>
</resources> </resources>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <resources xmlns:tools="http://schemas.android.com/tools" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">我的设备</string> <string name="app_name">设备管理</string>
<string name="unistall_error">卸载失败!</string> <string name="unistall_error">卸载失败!</string>
<string name="system_unistall_error">系统应用无法卸载!</string> <string name="system_unistall_error">系统应用无法卸载!</string>
<string name="cleaned">清理垃圾 (<xliff:g id="memory">%1$s</xliff:g>)</string> <string name="cleaned">清理垃圾 (<xliff:g id="memory">%1$s</xliff:g>)</string>

View File

@@ -74,4 +74,25 @@
<!-- <item name="android:backgroundDimAmount">0.7</item> //就是用来控制灰度的值当为1时界面除了我们的dialog内容是高亮显示的dialog以外的区域是黑色的完全看不到其他内容--> <!-- <item name="android:backgroundDimAmount">0.7</item> //就是用来控制灰度的值当为1时界面除了我们的dialog内容是高亮显示的dialog以外的区域是黑色的完全看不到其他内容-->
<!-- <item name="android:backgroundDimEnabled">true</item>--> <!-- <item name="android:backgroundDimEnabled">true</item>-->
</style> </style>
<style name="DialogCloseOnTouchOutside" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- <item name="android:windowFullscreen">true</item>-->
<!--设置dialog的背景-->
<item name="android:windowBackground">@android:color/transparent</item>
<!--设置Dialog的windowFrame框为无-->
<item name="android:windowFrame">@null</item>
<!--设置无标题-->
<item name="windowNoTitle">true</item>
<!--是否浮现在activity之上-->
<item name="android:windowIsFloating">true</item>
<!--是否半透明-->
<item name="android:windowIsTranslucent">true</item>
<!--设置窗口内容不覆盖-->
<item name="android:windowContentOverlay">@null</item>
<!--设置动画在这里使用让它继承系统的Animation.Dialog-->
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<!--背景是否模糊显示-->
<item name="android:backgroundDimEnabled">true</item>
<item name="android:windowCloseOnTouchOutside">true</item>
</style>
</resources> </resources>