version:1.6

fix:
update:增加4:3适配
This commit is contained in:
2023-03-06 17:40:09 +08:00
parent f79567f303
commit a5e8623bed
45 changed files with 3540 additions and 123 deletions

View File

@@ -7,6 +7,7 @@ import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import com.uiui.zyos.R;
import com.uiui.zyos.base.BaseLightActivity;
import java.io.BufferedReader;
import java.io.IOException;
@@ -14,13 +15,16 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
public class PolicyActivity extends AppCompatActivity {
public class PolicyActivity extends BaseLightActivity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_policy);
public int getLayoutId() {
return R.layout.activity_policy;
}
@Override
public void initView() {
textView = findViewById(R.id.textView);
Intent intent = getIntent();
if (intent == null) {
@@ -52,7 +56,10 @@ public class PolicyActivity extends AppCompatActivity {
}
}
}
}
@Override
public void initData() {
}
}

View File

@@ -46,6 +46,7 @@ import com.uiui.zyos.service.NotificationService;
import com.uiui.zyos.utils.HomeWatcher;
import com.uiui.zyos.utils.OpenApkUtils;
import com.uiui.zyos.utils.ToastUtil;
import com.uiui.zyos.utils.Utils;
import com.uiui.zyos.view.ScaleCircleNavigator;
import net.lucode.hackware.magicindicator.MagicIndicator;
@@ -114,6 +115,8 @@ public class MainActivity extends BaseActivity implements MainContact.MainView,
mPresenter.setLifecycle(lifecycleSubject);
RemoteManager.setListener(this);
Utils.getAndroiodScreenProperty(this);
mFragmentManager = getSupportFragmentManager();
mFragments = new ArrayList<>();
mUserFragment = new UserFragment();
@@ -239,23 +242,17 @@ public class MainActivity extends BaseActivity implements MainContact.MainView,
OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_DICTIONARY_PACKAGE_NAME, JxwPackageConfig.JXW_DICTIONARY_CLASS_NAME);
}
});
}
@Override
public void initData() {
registmNewAppReceiver();
RemoteManager.setListener(new RemoteManager.ConnectedListener() {
@Override
public void onConnected() {
RemoteManager.getInstance().setDefaultDesktop();
}
});
}
@Override
public void onConnected() {
Log.e(TAG, "onConnected: ");
RemoteManager.getInstance().setDefaultDesktop();
}
public static void toggleNotificationListenerService(Context context) {
@@ -327,40 +324,7 @@ public class MainActivity extends BaseActivity implements MainContact.MainView,
if (agree == 0) {
showPolicyDialog();
} else {
XXPermissions.with(this)
// 申请单个权限
// .permission(Permission.RECORD_AUDIO)
// 申请多个权限
.permission(Permission.Group.STORAGE)
// 设置权限请求拦截器(局部设置)
//.interceptor(new PermissionInterceptor())
// 设置不触发错误检测机制(局部设置)
//.unchecked()
.request(new OnPermissionCallback() {
@Override
public void onGranted(@NonNull List<String> permissions, boolean allGranted) {
if (!allGranted) {
ToastUtil.show("获取部分权限成功,但部分权限未正常授予");
return;
}
// ToastUtil.show("获取录音和日历权限成功");
Log.e(TAG, "onGranted: 获取存储权限成功");
getData();
}
@Override
public void onDenied(@NonNull List<String> permissions, boolean doNotAskAgain) {
if (doNotAskAgain) {
ToastUtil.show("被永久拒绝授权,请手动授予存储权限");
// 如果是被永久拒绝就跳转到应用权限系统设置页面
XXPermissions.startPermissionActivity(MainActivity.this, permissions);
} else {
// ToastUtil.show("获取录音和日历权限失败");
Log.e(TAG, "onGranted: 获取存储权限权限失败");
}
}
});
getPermission();
}
}
@@ -394,7 +358,7 @@ public class MainActivity extends BaseActivity implements MainContact.MainView,
if (mNewAppReceiver != null) {
unregisterReceiver(mNewAppReceiver);
}
RemoteManager.removeListener(this);
}
@Override
@@ -430,6 +394,42 @@ public class MainActivity extends BaseActivity implements MainContact.MainView,
view.setVisibility(View.VISIBLE);
}
private void getPermission() {
XXPermissions.with(this)
// 申请单个权限
// .permission(Permission.RECORD_AUDIO)
// 申请多个权限
.permission(Permission.Group.STORAGE)
// 设置权限请求拦截器(局部设置)
//.interceptor(new PermissionInterceptor())
// 设置不触发错误检测机制(局部设置)
//.unchecked()
.request(new OnPermissionCallback() {
@Override
public void onGranted(@NonNull List<String> permissions, boolean allGranted) {
if (!allGranted) {
ToastUtil.show("获取部分权限成功,但部分权限未正常授予");
return;
}
// ToastUtil.show("获取录音和日历权限成功");
Log.e(TAG, "onGranted: 获取存储权限成功");
getData();
}
@Override
public void onDenied(@NonNull List<String> permissions, boolean doNotAskAgain) {
if (doNotAskAgain) {
ToastUtil.show("被永久拒绝授权,请手动授予存储权限");
// 如果是被永久拒绝就跳转到应用权限系统设置页面
XXPermissions.startPermissionActivity(MainActivity.this, permissions);
} else {
// ToastUtil.show("获取录音和日历权限失败");
Log.e(TAG, "onGranted: 获取存储权限权限失败");
}
}
});
}
private void getData() {
// if (!isNotificationListenersEnabled()) {
@@ -439,24 +439,29 @@ public class MainActivity extends BaseActivity implements MainContact.MainView,
// addHomeWatcher();
}
private void showPolicyDialog() {
PrivacyPolicyDialog privacyPolicyDialog = new PrivacyPolicyDialog(this);
privacyPolicyDialog.setCancelable(false);
privacyPolicyDialog.setPrivacyPolicyCallback(new PrivacyPolicyDialog.PrivacyPolicyCallback() {
@Override
public void onCancel() {
privacyPolicyDialog.dismiss();
finish();
}
PrivacyPolicyDialog privacyPolicyDialog;
@Override
public void onConfirm() {
mMMKV.encode("AgreePrivacyPolicy", 1);
privacyPolicyDialog.dismiss();
getData();
}
});
privacyPolicyDialog.show();
private void showPolicyDialog() {
if (privacyPolicyDialog == null) {
privacyPolicyDialog = new PrivacyPolicyDialog(this);
privacyPolicyDialog.setCancelable(false);
privacyPolicyDialog.setPrivacyPolicyCallback(new PrivacyPolicyDialog.PrivacyPolicyCallback() {
@Override
public void onCancel() {
privacyPolicyDialog.dismiss();
finish();
}
@Override
public void onConfirm() {
mMMKV.encode("AgreePrivacyPolicy", 1);
getPermission();
privacyPolicyDialog.dismiss();
getData();
}
});
privacyPolicyDialog.show();
}
}
// private void addHomeWatcher() {

View File

@@ -1,6 +1,11 @@
package com.uiui.zyos.base;
import android.app.Activity;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import androidx.annotation.CallSuper;
import androidx.annotation.CheckResult;
@@ -72,10 +77,27 @@ public abstract class BaseActivity extends AppCompatActivity implements Lifecycl
// .light(true)
.apply();
setContentView(this.getLayoutId());
// hideStatusBar(this);
initView();
initData();
}
// public static void hideStatusBar(Activity activity) {
// if (activity == null) return;
// Window window = activity.getWindow();
// if (window == null) return;
// window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
// WindowManager.LayoutParams.FLAG_FULLSCREEN);
// window.getDecorView()
// .setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
// WindowManager.LayoutParams lp = window.getAttributes();
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
// lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
// }
// window.setAttributes(lp);
// }
/**
* 设置布局
*/

View File

@@ -2,6 +2,7 @@ package com.uiui.zyos.base;
import android.app.Application;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
@@ -20,6 +21,7 @@ import com.uiui.zyos.manager.ConnectManager;
import com.uiui.zyos.manager.RemoteManager;
import com.uiui.zyos.network.NetInterfaceManager;
import com.uiui.zyos.push.PushManager;
import com.uiui.zyos.receiver.APKinstallReceiver;
import com.uiui.zyos.service.main.MainService;
import com.uiui.zyos.utils.AppUsedTimeUtils;
import com.uiui.zyos.utils.OpenApkUtils;
@@ -65,9 +67,25 @@ public class BaseApplication extends Application {
ConnectManager.init(this);
NetInterfaceManager.init(this);
// startService(new Intent(this, MainService.class));
registAppReceive();
}
}
private APKinstallReceiver apKinstallReceiver;
private void registAppReceive() {
if (null == apKinstallReceiver) {
apKinstallReceiver = new APKinstallReceiver();
}
IntentFilter filter = new IntentFilter();
filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
filter.addAction(Intent.ACTION_PACKAGE_ADDED);
filter.addAction(Intent.ACTION_PACKAGE_REPLACED);
filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
filter.addDataScheme("package");
registerReceiver(apKinstallReceiver, filter);
}
private void tpushInit() {
XGPushConfig.enableDebug(this, true);
XGPushManager.registerPush(this, new XGIOperateCallback() {

View File

@@ -0,0 +1,129 @@
package com.uiui.zyos.base;
import android.os.Bundle;
import androidx.annotation.CallSuper;
import androidx.annotation.CheckResult;
import androidx.annotation.ContentView;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.trello.rxlifecycle4.LifecycleProvider;
import com.trello.rxlifecycle4.LifecycleTransformer;
import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.trello.rxlifecycle4.android.RxLifecycleAndroid;
import com.uiui.zyos.R;
import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.subjects.BehaviorSubject;
public abstract class BaseLightActivity extends AppCompatActivity implements LifecycleProvider<ActivityEvent> {
public final BehaviorSubject<ActivityEvent> lifecycleSubject = BehaviorSubject.create();
public BaseLightActivity() {
super();
}
@ContentView
public BaseLightActivity(@LayoutRes int contentLayoutId) {
super(contentLayoutId);
}
@Override
@NonNull
@CheckResult
public final Observable<ActivityEvent> lifecycle() {
return lifecycleSubject.hide();
}
@Override
@NonNull
@CheckResult
public final <T> LifecycleTransformer<T> bindUntilEvent(@NonNull ActivityEvent event) {
return RxLifecycle.bindUntilEvent(lifecycleSubject, event);
}
@Override
@NonNull
@CheckResult
public final <T> LifecycleTransformer<T> bindToLifecycle() {
return RxLifecycleAndroid.bindActivity(lifecycleSubject);
}
@Override
@CallSuper
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
lifecycleSubject.onNext(ActivityEvent.CREATE);
// StatusBarUtil.init(this);
UltimateBarX.statusBar(this)
.transparent()
.colorRes(R.color.colorPrimaryDark)
.light(true)
.apply();
UltimateBarX.navigationBar(this)
.transparent()
.colorRes(R.color.colorPrimaryDark)
.light(true)
.apply();
setContentView(this.getLayoutId());
initView();
initData();
}
/**
* 设置布局
*/
public abstract int getLayoutId();
/**
* 初始化视图
*/
public abstract void initView();
/**
* 初始化数据
*/
public abstract void initData();
@Override
@CallSuper
protected void onStart() {
super.onStart();
lifecycleSubject.onNext(ActivityEvent.START);
}
@Override
@CallSuper
protected void onResume() {
super.onResume();
lifecycleSubject.onNext(ActivityEvent.RESUME);
}
@Override
@CallSuper
protected void onPause() {
lifecycleSubject.onNext(ActivityEvent.PAUSE);
super.onPause();
}
@Override
@CallSuper
protected void onStop() {
lifecycleSubject.onNext(ActivityEvent.STOP);
super.onStop();
}
@Override
@CallSuper
protected void onDestroy() {
lifecycleSubject.onNext(ActivityEvent.DESTROY);
super.onDestroy();
}
}

View File

@@ -67,7 +67,7 @@ public class CustomDialog extends AlertDialog {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.custom_dialog);
setContentView(R.layout.dialog_custom);
//按空白处不能取消动画
setCanceledOnTouchOutside(false);
//初始化界面控件

View File

@@ -69,7 +69,7 @@ public class PasswordDialog extends AlertDialog {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.password_dialog);
setContentView(R.layout.dialog_password);
//按空白处不能取消动画
setCanceledOnTouchOutside(false);
//初始化界面控件

View File

@@ -65,20 +65,20 @@ public class PrivacyPolicyDialog extends AlertDialog {
@Override
public void onClick(@NonNull View widget) {
Intent intent = new Intent(mContext, PolicyActivity.class);
intent.putExtra("content",R.raw.privacy_policy);
intent.putExtra("content", R.raw.privacy_policy);
mContext.startActivity(intent);
}
}, 115, 121, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new ForegroundColorSpan(Color.BLUE), 115, 121, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}, 89, 95, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new ForegroundColorSpan(Color.BLUE), 89, 95, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new ClickableSpan() {
@Override
public void onClick(@NonNull View widget) {
Intent intent = new Intent(mContext, PolicyActivity.class);
intent.putExtra("content",R.raw.user_agreement);
intent.putExtra("content", R.raw.user_agreement);
mContext.startActivity(intent);
}
}, 122, 128, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new ForegroundColorSpan(Color.BLUE), 122, 128, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}, 96, 102, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new ForegroundColorSpan(Color.BLUE), 96, 102, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// spannableString.setSpan(new ClickableSpan() {
// @Override
// public void onClick(@NonNull View widget) {

View File

@@ -67,7 +67,7 @@ public class SingleDialog extends AlertDialog {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.single_dialog);
setContentView(R.layout.dialog_single);
//按空白处不能取消动画
setCanceledOnTouchOutside(false);
//初始化界面控件

View File

@@ -6,6 +6,7 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.Log;
@@ -32,6 +33,7 @@ import com.uiui.zyos.bean.BaseResponse;
import com.uiui.zyos.bean.DesktopIcon;
import com.uiui.zyos.bean.SnInfo;
import com.uiui.zyos.config.CommonConfig;
import com.uiui.zyos.utils.ApkUtils;
import com.uiui.zyos.utils.TimeUtils;
import com.uiui.zyos.utils.ToastUtil;
import com.uiui.zyos.view.RecyclerViewSpacesItemDecoration;
@@ -66,6 +68,8 @@ public class UserFragment extends BaseFragment implements UserContact.UserView {
ConstraintLayout cl_usedata;
@BindView(R.id.tv_percent)
TextView tv_percent;
@BindView(R.id.tv_activated)
TextView tv_activated;
@BindView(R.id.tv_duration)
TextView tv_duration;
@BindView(R.id.cl_activation)
@@ -86,6 +90,8 @@ public class UserFragment extends BaseFragment implements UserContact.UserView {
RecyclerView rv_app;
@BindView(R.id.iv_nodata)
ImageView iv_nodata;
@BindView(R.id.tv_activation)
TextView tv_activation;
private AppAdapter mAppAdapter;
@@ -105,7 +111,7 @@ public class UserFragment extends BaseFragment implements UserContact.UserView {
public UserFragment() {
// Required empty public constructor
Log.e(TAG, "UserFragment: " );
Log.e(TAG, "UserFragment: ");
}
/**
@@ -192,6 +198,18 @@ public class UserFragment extends BaseFragment implements UserContact.UserView {
cl_activation.setVisibility(View.GONE);
cl_app.setVisibility(View.VISIBLE);
}
int is_activation = Settings.Global.getInt(mContext.getContentResolver(), CommonConfig.UIUI_ACTIVATION_KEY, 0);
if (is_activation != 1) {
tv_activation.setVisibility(View.VISIBLE);
} else {
tv_activation.setVisibility(View.GONE);
}
tv_activation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ApkUtils.openPackage(mContext, "com.uiui.zysn");
}
});
String avatar = mMMKV.decodeString("USERINFO_AVATAR", "");
Glide.with(iv_avatar).load(avatar).error(R.drawable.default_avatar).into(iv_avatar);
tv_date1.setText(TimeUtils.getDateAndWeek(System.currentTimeMillis()));
@@ -264,6 +282,7 @@ public class UserFragment extends BaseFragment implements UserContact.UserView {
case 300: //设备没有绑定
case 400://没有授权的设备
case 403://设备归属不存在
case 402://sn不存在
tv_name.setText(getString(R.string.unbind));
tv_grade.setText(getString(R.string.notset));
cl_nodata.setVisibility(View.VISIBLE);
@@ -271,16 +290,15 @@ public class UserFragment extends BaseFragment implements UserContact.UserView {
cl_activation.setVisibility(View.VISIBLE);
cl_app.setVisibility(View.GONE);
break;
case 402://sn不存在
ToastUtil.show(getString(R.string.device_unauthorized));
Log.e(TAG, "setSnInfo: " + getString(R.string.device_unauthorized));
tv_name.setText(getString(R.string.device_unauthorized));
tv_grade.setText(getString(R.string.device_unauthorized));
cl_nodata.setVisibility(View.GONE);
cl_usedata.setVisibility(View.GONE);
cl_activation.setVisibility(View.GONE);
cl_app.setVisibility(View.GONE);
break;
// ToastUtil.show(getString(R.string.device_unauthorized));
// Log.e(TAG, "setSnInfo: " + getString(R.string.device_unauthorized));
// tv_name.setText(getString(R.string.device_unauthorized));
// tv_grade.setText(getString(R.string.device_unauthorized));
// cl_nodata.setVisibility(View.GONE);
// cl_usedata.setVisibility(View.GONE);
// cl_activation.setVisibility(View.GONE);
// cl_app.setVisibility(View.GONE);
// break;
default:
}
}
@@ -385,7 +403,7 @@ public class UserFragment extends BaseFragment implements UserContact.UserView {
private UpdateDesktopReceiver updateDesktopReceiver;
private static final String UPDATE_DESKTOP_ICON_ACTION ="UPDATE_DESKTOP_ICON";
public static final String UPDATE_DESKTOP_ICON_ACTION = "UPDATE_DESKTOP_ICON";
private void registerUpdateDesktopReceiver() {
if (updateDesktopReceiver == null) {
@@ -403,10 +421,10 @@ public class UserFragment extends BaseFragment implements UserContact.UserView {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.e("UpdateDesktopReceiver", "onReceive: " + action);
if (TextUtils.isEmpty(action)){
if (TextUtils.isEmpty(action)) {
return;
}
if (UPDATE_DESKTOP_ICON_ACTION.equals(action)){
if (UPDATE_DESKTOP_ICON_ACTION.equals(action)) {
mPresenter.getInstalledApp();
}
}

View File

@@ -0,0 +1,23 @@
package com.uiui.zyos.receiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import com.uiui.zyos.fragment.user.UserFragment;
public class APKinstallReceiver extends BroadcastReceiver {
private static final String TAG = APKinstallReceiver.class.getSimpleName();
@Override
public void onReceive(final Context context, Intent intent) {
// an Intent broadcast.
String packageName = intent.getDataString().replace("package:", "");
Log.e(TAG, "onReceive: " + packageName + ": " + intent.getAction());
Intent updateIntent = new Intent(UserFragment.UPDATE_DESKTOP_ICON_ACTION);
intent.setPackage("com.uiui.zyos");
context.sendBroadcast(updateIntent);
}
}

View File

@@ -15,7 +15,9 @@ import android.os.BatteryManager;
import android.os.Build;
import android.os.Environment;
import android.os.PowerManager;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.WindowManager;
import androidx.core.content.ContextCompat;
@@ -64,6 +66,32 @@ public class Utils {
// return serial;
// }
public static String getAndroiodScreenProperty(Context context) {
Log.e("getAndroiodScreenProperty", "heightPixels" + context.getResources().getDisplayMetrics().heightPixels);
Log.e("getAndroiodScreenProperty", "widthPixels" + context.getResources().getDisplayMetrics().widthPixels);
Log.e("getAndroiodScreenProperty", "density" + context.getResources().getDisplayMetrics().density);
Log.e("getAndroiodScreenProperty", "densityDpi" + context.getResources().getDisplayMetrics().densityDpi);
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
wm.getDefaultDisplay().getRealMetrics(dm);
int width = dm.widthPixels; // 屏幕宽度(像素)
int height = dm.heightPixels; // 屏幕高度(像素)
float density = dm.density; // 屏幕密度0.75 / 1.0 / 1.5
int densityDpi = dm.densityDpi; // 屏幕密度dpi120 / 160 / 240
// 屏幕宽度算法:屏幕宽度(像素)/屏幕密度
int screenWidth = (int) (width / density); // 屏幕宽度(dp)
int screenHeight = (int) (height / density);// 屏幕高度(dp)
Log.e("getAndroiodScreenProperty", "屏幕宽度(像素):" + width);
Log.e("getAndroiodScreenProperty", "屏幕高度(像素):" + height);
Log.e("getAndroiodScreenProperty", "屏幕密度0.75 / 1.0 / 1.5" + density);
Log.e("getAndroiodScreenProperty", "屏幕密度dpi120 / 160 / 240" + densityDpi);
Log.e("getAndroiodScreenProperty", "屏幕宽度dp" + screenWidth);
Log.e("getAndroiodScreenProperty", "屏幕高度dp" + screenHeight);
return width + "×" + height;
}
public static String getDeviceSN() {
String serial = null;
try {