version:1.9.1

fix:
update:个人信息页面完善
This commit is contained in:
2024-09-14 09:40:25 +08:00
parent 58b3e18727
commit 2c4af66ad8
156 changed files with 4819 additions and 1731 deletions

View File

@@ -16,8 +16,8 @@ android {
minSdkVersion 24
targetSdkVersion 29
versionCode 81
versionName "1.8.9"
versionCode 83
versionName "1.9.1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
@@ -85,7 +85,7 @@ android {
signingConfig signingConfigs.U807
buildConfigField "String", "platform", '"U807"'
manifestPlaceholders = [
AMAP_KEY : "8200776fc8cad995184a9a3a17a552e4"
AMAP_KEY: "8200776fc8cad995184a9a3a17a552e4"
]
}
@@ -94,7 +94,7 @@ android {
signingConfig signingConfigs.U807
buildConfigField "String", "platform", '"U807"'
manifestPlaceholders = [
AMAP_KEY : "8200776fc8cad995184a9a3a17a552e4"
AMAP_KEY: "8200776fc8cad995184a9a3a17a552e4"
]
}
@@ -105,7 +105,7 @@ android {
zipAlignEnabled true
buildConfigField "String", "platform", '"tuixin"'
manifestPlaceholders = [
AMAP_KEY : "9c9fabf3934df224e927b2f9fbc51064"
AMAP_KEY: "9c9fabf3934df224e927b2f9fbc51064"
]
signingConfig signingConfigs.tuixin
applicationVariants.all { variant ->
@@ -129,7 +129,7 @@ android {
signingConfig signingConfigs.tuixin
buildConfigField "String", "platform", '"tuixin"'
manifestPlaceholders = [
AMAP_KEY : "9c9fabf3934df224e927b2f9fbc51064"
AMAP_KEY: "9c9fabf3934df224e927b2f9fbc51064"
]
// 将release版本的包名重命名加上版本及日期
applicationVariants.all { variant ->
@@ -148,6 +148,7 @@ android {
dependencies {
// implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
compileOnly files('libs/framework.jar')
implementation project(path: ':niceimageview')
implementation project(path: ':FlycoTabLayoutZ_Lib')
@@ -232,6 +233,8 @@ dependencies {
implementation 'com.github.getActivity:XXPermissions:18.63'
// 吐司框架https://github.com/getActivity/Toaster
implementation 'com.github.getActivity:Toaster:12.6'
//图片选择
implementation 'io.github.lucksiege:pictureselector:v3.11.1'
}
preBuild {

View File

@@ -26,7 +26,7 @@
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 允许读设备等信息,用于问题排查 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- <uses-permission android:name="android.permission.CALL_PHONE" />-->
<!-- <uses-permission android:name="android.permission.CALL_PHONE" />-->
<!-- 【必须】 移动推送 TPNS SDK 所需权限 -->
<uses-permission android:name="android.permission.INTERNET" />
@@ -154,10 +154,29 @@
android:launchMode="singleTask"
android:screenOrientation="userLandscape"
android:theme="@style/DialogCloseOnTouchOutside" />
<activity
android:name=".activity.edit.EditActivity"
android:launchMode="singleTask"
android:screenOrientation="userLandscape"
android:theme="@style/activity_styles_full" />
<activity
android:name=".activity.selectegrade.SelecteGradeActivity"
android:launchMode="singleTask"
android:screenOrientation="userLandscape"
android:theme="@style/DialogCloseOnTouchOutside" />
<activity
android:name=".activity.permission.PermissionActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait" />
<activity
android:name=".activity.user.UserActivity"
android:launchMode="singleTask"
android:screenOrientation="userLandscape" />
<activity
android:name=".activity.homework.HomeworkActivity"
android:launchMode="singleTask"
android:screenOrientation="userLandscape" />
<receiver
android:name=".receiver.BootReceiver"

View File

@@ -0,0 +1,117 @@
package com.uiui.zyos.activity.edit;
import android.content.Intent;
import android.text.InputFilter;
import android.text.TextUtils;
import android.view.View;
import androidx.lifecycle.Observer;
import com.hjq.toast.Toaster;
import com.tencent.mmkv.MMKV;
import com.uiui.zyos.R;
import com.uiui.zyos.base.mvvm.BaseMvvmActivity;
import com.uiui.zyos.config.CommonConfig;
import com.uiui.zyos.databinding.ActivityEditBinding;
import com.uiui.zyos.manager.RemoteManager;
import com.uiui.zyos.utils.ActivationUtil;
import java.util.HashMap;
import java.util.Map;
public class EditActivity extends BaseMvvmActivity<EditViewModel, ActivityEditBinding> {
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
private String mTypeName;
@Override
protected int getLayoutId() {
return R.layout.activity_edit;
}
@Override
protected void initDataBinding() {
mViewModel.setCtx(this);
mViewModel.setVDBinding(mViewDataBinding);
mViewModel.setLifecycle(getLifecycleSubject());
mViewDataBinding.setClick(new BtnClick());
}
@Override
protected void initView() {
Intent intent = getIntent();
if (intent == null) {
finish();
return;
}
mTypeName = intent.getStringExtra("type");
if (TextUtils.isEmpty(mTypeName)) {
finish();
return;
}
String data = intent.getStringExtra("data");
if (!TextUtils.isEmpty(data) && !"未设置".equals(data)) {
mViewDataBinding.editText.setText(data);
}
int maxEms = intent.getIntExtra("maxLength", 16);
mViewDataBinding.editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(maxEms)});
switch (mTypeName) {
case "name":
mViewDataBinding.tvTitle.setText("请输入昵称");
break;
case "school":
mViewDataBinding.tvTitle.setText("请输入学校");
break;
case "sn_grade":
mViewDataBinding.tvTitle.setText("请输入年级");
break;
case "class_name":
mViewDataBinding.tvTitle.setText("请输入班级");
break;
default:
}
}
@Override
protected void initData() {
mViewModel.mSuccessfulData.observe(this, new Observer<Boolean>() {
@Override
public void onChanged(Boolean aBoolean) {
if (aBoolean) {
finish();
}
}
});
}
public class BtnClick {
public void confirm(View view) {
if (TextUtils.isEmpty(mViewDataBinding.editText.getText())) {
Toaster.show("不能为空");
return;
}
if (ActivationUtil.isActivation(EditActivity.this)) {
Map<String, String> params = new HashMap<>();
params.put("sn", RemoteManager.getInstance().getSerial());
params.put(mTypeName, mViewDataBinding.editText.getText().toString());
mViewModel.updateInfo(params);
} else {
mMMKV.encode("local_" + mTypeName, mViewDataBinding.editText.getText().toString());
finish();
}
}
public void exit(View view) {
finish();
}
public void empty(View view) {
}
}
}

View File

@@ -0,0 +1,71 @@
package com.uiui.zyos.activity.edit;
import android.util.Log;
import androidx.lifecycle.MutableLiveData;
import com.hjq.toast.Toaster;
import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiui.zyos.base.mvvm.BaseViewModel;
import com.uiui.zyos.bean.BaseResponse;
import com.uiui.zyos.databinding.ActivityEditBinding;
import com.uiui.zyos.network.NetInterfaceManager;
import com.uiui.zyos.utils.ActivationUtil;
import java.util.Map;
import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
public class EditViewModel extends BaseViewModel<ActivityEditBinding, ActivityEvent> {
@Override
public ActivityEditBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
public MutableLiveData<Boolean> mSuccessfulData = new MutableLiveData<>();
public void updateInfo(Map<String, String> params) {
if (!ActivationUtil.isActivation(getCtx())) {
return;
}
NetInterfaceManager.getInstance().getUpdateInfoObservable(params)
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
.subscribe(new Observer<BaseResponse>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("updateInfo", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse baseResponse) {
Log.e("updateInfo", "onNext: " + baseResponse);
if (baseResponse.code == 200) {
mSuccessfulData.setValue(true);
} else {
Toaster.show(baseResponse.msg);
mSuccessfulData.setValue(false);
}
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("updateInfo", "onError: " + e.getMessage());
mSuccessfulData.setValue(false);
}
@Override
public void onComplete() {
Log.e("updateInfo", "onComplete: ");
}
});
}
}

View File

@@ -0,0 +1,185 @@
package com.uiui.zyos.activity.homework;
import android.graphics.Color;
import android.util.Log;
import android.view.View;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.lifecycle.Observer;
import androidx.viewpager.widget.ViewPager;
import com.flyco.tablayout.SlidingTabLayout;
import com.uiui.zyos.R;
import com.uiui.zyos.base.mvvm.BaseMvvmActivity;
import com.uiui.zyos.bean.HomeworkBean;
import com.uiui.zyos.databinding.ActivityHomeworkBinding;
import com.uiui.zyos.fragment.content.ContentFragment;
import com.uiui.zyos.view.ScaleCircleNavigator;
import com.uiui.zyos.view.viewpager.BaseFragmentPagerAdapter;
import net.lucode.hackware.magicindicator.ViewPagerHelper;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class HomeworkActivity extends BaseMvvmActivity<HomeworkViewModel, ActivityHomeworkBinding> {
private static final String TAG = "HomeworkActivity";
private String[] title = new String[]{"语文", "数学", "英语", "物理", "化学", "地理", "生物", "政治", "历史"};
private int defaultCurrent = 0;
private FragmentManager mFragmentManager;
private BaseFragmentPagerAdapter mBaseFragmentPagerAdapter;
private List<Fragment> mFragments;
private ScaleCircleNavigator scaleCircleNavigator;
private ContentFragment mChineseFragment;
private ContentFragment mMathFragment;
private ContentFragment mEnglishFragment;
private ContentFragment mPhysicsFragment;
private ContentFragment mChemicalFragment;
private ContentFragment mGeographyFragment;
private ContentFragment mBiologyFragment;
private ContentFragment mPoliticsFragment;
private ContentFragment mHistoryFragment;
/**
* 设置布局
*/
@Override
public int getLayoutId() {
return R.layout.activity_homework;
}
@Override
protected void initDataBinding() {
mViewModel.setCtx(this);
mViewModel.setVDBinding(mViewDataBinding);
mViewModel.setLifecycle(getLifecycleSubject());
mViewDataBinding.setClick(new BtnClick());
}
/**
* 初始化视图
*/
@Override
public void initView() {
mFragmentManager = getSupportFragmentManager();
mFragments = new ArrayList<>();
mChineseFragment = ContentFragment.newInstance("语文");
if (!mChineseFragment.isAdded()) mFragments.add(mChineseFragment);
mMathFragment = ContentFragment.newInstance("数学");
if (!mMathFragment.isAdded()) mFragments.add(mMathFragment);
mEnglishFragment = ContentFragment.newInstance("英语");
if (!mEnglishFragment.isAdded()) mFragments.add(mEnglishFragment);
mPhysicsFragment = ContentFragment.newInstance("物理");
if (!mPhysicsFragment.isAdded()) mFragments.add(mPhysicsFragment);
mChemicalFragment = ContentFragment.newInstance("化学");
if (!mChemicalFragment.isAdded()) mFragments.add(mChemicalFragment);
mGeographyFragment = ContentFragment.newInstance("地理");
if (!mGeographyFragment.isAdded()) mFragments.add(mGeographyFragment);
mBiologyFragment = ContentFragment.newInstance("生物");
if (!mBiologyFragment.isAdded()) mFragments.add(mBiologyFragment);
mPoliticsFragment = ContentFragment.newInstance("政治");
if (!mPoliticsFragment.isAdded()) mFragments.add(mPoliticsFragment);
mHistoryFragment = ContentFragment.newInstance("历史");
if (!mHistoryFragment.isAdded()) mFragments.add(mHistoryFragment);
mBaseFragmentPagerAdapter = new BaseFragmentPagerAdapter(mFragmentManager, mFragments);
mViewDataBinding.viewPager.setAdapter(mBaseFragmentPagerAdapter);
mViewDataBinding.viewPager.setOffscreenPageLimit(9);
mViewDataBinding.viewPager.setCurrentItem(defaultCurrent);
mViewDataBinding.mainSlidingTabLayout.setViewPager(mViewDataBinding.viewPager, title);
scaleCircleNavigator = new ScaleCircleNavigator(this);
scaleCircleNavigator.setCircleCount(mFragments.size());
scaleCircleNavigator.setNormalCircleColor(Color.DKGRAY);
scaleCircleNavigator.setSelectedCircleColor(Color.LTGRAY);
scaleCircleNavigator.setCircleClickListener(new ScaleCircleNavigator.OnCircleClickListener() {
@Override
public void onClick(int index) {
}
});
mViewDataBinding.magicIndicator.setNavigator(scaleCircleNavigator);
ViewPagerHelper.bind(mViewDataBinding.magicIndicator, mViewDataBinding.viewPager);
mViewDataBinding.viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
mViewDataBinding.magicIndicator.onPageScrolled(position, positionOffset, positionOffsetPixels);
}
@Override
public void onPageSelected(int position) {
mViewDataBinding.magicIndicator.onPageSelected(position);
}
@Override
public void onPageScrollStateChanged(int state) {
mViewDataBinding.magicIndicator.onPageScrollStateChanged(state);
}
});
if (mFragments.size() > 1) {
mViewDataBinding.viewPager.setCurrentItem(defaultCurrent);
mViewDataBinding.magicIndicator.onPageSelected(defaultCurrent);
}
}
/**
* 初始化数据
*/
@Override
public void initData() {
mViewModel.mHomeworkBeanListData.observe(this, new Observer<List<HomeworkBean>>() {
@Override
public void onChanged(List<HomeworkBean> homeWorkList) {
if (homeWorkList != null && homeWorkList.size() != 0) {
List<HomeworkBean> chineseHomeWorkList = homeWorkList.stream().filter(homeWork -> "语文".equals(homeWork.getSubject().getName())).collect(Collectors.toList());
mChineseFragment.setHomeWorkList(chineseHomeWorkList);
List<HomeworkBean> mathHomeWorkList = homeWorkList.stream().filter(homeWork -> "数学".equals(homeWork.getSubject().getName())).collect(Collectors.toList());
mMathFragment.setHomeWorkList(mathHomeWorkList);
List<HomeworkBean> englishHomeWorkList = homeWorkList.stream().filter(homeWork -> "英语".equals(homeWork.getSubject().getName())).collect(Collectors.toList());
mEnglishFragment.setHomeWorkList(englishHomeWorkList);
List<HomeworkBean> physicsHomeWorkList = homeWorkList.stream().filter(homeWork -> "物理".equals(homeWork.getSubject().getName())).collect(Collectors.toList());
mPhysicsFragment.setHomeWorkList(physicsHomeWorkList);
List<HomeworkBean> chemicalHomeWorkList = homeWorkList.stream().filter(homeWork -> "化学".equals(homeWork.getSubject().getName())).collect(Collectors.toList());
mChemicalFragment.setHomeWorkList(chemicalHomeWorkList);
List<HomeworkBean> geographyHomeWorkList = homeWorkList.stream().filter(homeWork -> "地理".equals(homeWork.getSubject().getName())).collect(Collectors.toList());
mGeographyFragment.setHomeWorkList(geographyHomeWorkList);
List<HomeworkBean> biologyHomeWorkList = homeWorkList.stream().filter(homeWork -> "生物".equals(homeWork.getSubject().getName())).collect(Collectors.toList());
mBiologyFragment.setHomeWorkList(biologyHomeWorkList);
List<HomeworkBean> politicsHomeWorkList = homeWorkList.stream().filter(homeWork -> "政治".equals(homeWork.getSubject().getName())).collect(Collectors.toList());
mPoliticsFragment.setHomeWorkList(politicsHomeWorkList);
List<HomeworkBean> historyHomeWorkList = homeWorkList.stream().filter(homeWork -> "历史".equals(homeWork.getSubject().getName())).collect(Collectors.toList());
mHistoryFragment.setHomeWorkList(historyHomeWorkList);
}
}
});
mViewModel.getHomeWork();
}
@Override
protected void onResume() {
super.onResume();
Log.e(TAG, "onResume: ");
}
public class BtnClick {
public void exit(View v) {
finish();
}
}
}

View File

@@ -0,0 +1,68 @@
package com.uiui.zyos.activity.homework;
import android.util.Log;
import androidx.lifecycle.MutableLiveData;
import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.trello.rxlifecycle4.android.FragmentEvent;
import com.uiui.zyos.base.mvvm.BaseViewModel;
import com.uiui.zyos.bean.BaseResponse;
import com.uiui.zyos.bean.HomeworkBean;
import com.uiui.zyos.databinding.ActivityHomeworkBinding;
import com.uiui.zyos.network.NetInterfaceManager;
import com.uiui.zyos.utils.ActivationUtil;
import java.util.List;
import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
public class HomeworkViewModel extends BaseViewModel<ActivityHomeworkBinding, ActivityEvent> {
@Override
public ActivityHomeworkBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
public MutableLiveData<List<HomeworkBean>> mHomeworkBeanListData = new MutableLiveData<>();
public void getHomeWork(){
boolean activation = ActivationUtil.isActivation(getCtx());
if (!activation) {
return;
}
NetInterfaceManager.getInstance().getHomeworkObservable()
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
.subscribe(new Observer<BaseResponse<List<HomeworkBean>>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("getHomework", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse<List<HomeworkBean>> listBaseResponse) {
Log.e("getHomework", "onNext: " + listBaseResponse);
List<HomeworkBean> homeworkBeans = listBaseResponse.data;
mHomeworkBeanListData.setValue(homeworkBeans);
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("getHomework", "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Log.e("getHomework", "onComplete: ");
}
});
}
}

View File

@@ -21,11 +21,8 @@ import android.view.animation.TranslateAnimation;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.lifecycle.Observer;
import androidx.viewpager.widget.ViewPager;
import com.arialyy.aria.core.Aria;
import com.arialyy.aria.core.download.DownloadEntity;
import com.hjq.permissions.OnPermissionCallback;
import com.hjq.permissions.Permission;
import com.hjq.permissions.XXPermissions;
@@ -35,7 +32,6 @@ import com.uiui.zyos.BuildConfig;
import com.uiui.zyos.R;
import com.uiui.zyos.activity.ExitActivity;
import com.uiui.zyos.activity.permission.PermissionActivity;
import com.uiui.zyos.activity.update.UpdateActivity;
import com.uiui.zyos.base.mvvm.BaseMvvmActivity;
import com.uiui.zyos.bean.AppUpdateInfo;
import com.uiui.zyos.config.CommonConfig;
@@ -56,8 +52,6 @@ import com.uiui.zyos.view.viewpager.BaseFragmentPagerAdapter;
import java.util.ArrayList;
import java.util.List;
import static com.arialyy.aria.core.inf.IEntity.STATE_RUNNING;
public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBinding> implements RemoteManager.ConnectedListener {
private static final String TAG = "MainActivity";
@@ -100,6 +94,9 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBi
public void initView() {
Log.e(TAG, "initView: ");
mViewDataBinding.ivIcon2.setImageDrawable(ApkUtils.getAppDrawable(MainActivity.this, "com.uiui.zy", R.drawable.com_uiui_sn));
mViewDataBinding.tvAppname2.setText(ApkUtils.getAppName(MainActivity.this, "com.uiui.zy", "设备守护"));
// OpenApkUtils.getInstance().openWordLecture();
// OpenApkUtils.getInstance().openExamSprint();
// OpenApkUtils.getInstance().openApp(JxwPackageConfig.JXW_USAGEDATE_NAME, JxwPackageConfig.JXW_USAGEDATE_CLASS);
@@ -216,25 +213,25 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBi
public void initData() {
registmNewAppReceiver();
registmUpdateAddressReceiver();
mViewModel.getAppUpdateInfoData().observe(this, new Observer<AppUpdateInfo>() {
@Override
public void onChanged(AppUpdateInfo appUpdateInfo) {
mAppUpdateInfo = appUpdateInfo;
if (appUpdateInfo == null) {
// Toaster.show("已是最新版本");
} else {
if (ApkUtils.isUpdate(MainActivity.this, appUpdateInfo)) {
Intent intent = new Intent(MainActivity.this, UpdateActivity.class);
intent.putExtra("appUpdateInfo", appUpdateInfo);
startActivity(intent);
Toaster.show("有新的版本需要更新");
} else {
// Toaster.show("已是最新版本");
}
}
}
});
mViewModel.checkUpdate();
// mViewModel.getAppUpdateInfoData().observe(this, new Observer<AppUpdateInfo>() {
// @Override
// public void onChanged(AppUpdateInfo appUpdateInfo) {
// mAppUpdateInfo = appUpdateInfo;
// if (appUpdateInfo == null) {
//// Toaster.show("已是最新版本");
// } else {
// if (ApkUtils.isUpdate(MainActivity.this, appUpdateInfo)) {
// Intent intent = new Intent(MainActivity.this, UpdateActivity.class);
// intent.putExtra("appUpdateInfo", appUpdateInfo);
// startActivity(intent);
// Toaster.show("有新的版本需要更新");
// } else {
//// Toaster.show("已是最新版本");
// }
// }
// }
// });
// mViewModel.checkUpdate();
}
private void hideSystemUI() {
@@ -337,7 +334,7 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBi
showPolicyDialog();
} else {
if (checkPermission()) {
Log.e(TAG, "onResume: all permission granted" );
Log.e(TAG, "onResume: all permission granted");
} else {
startActivity(new Intent(MainActivity.this, PermissionActivity.class));
}
@@ -474,7 +471,7 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBi
return;
}
Log.e(TAG, "onGranted: 获取权限成功");
mViewModel.checkUpdate();
// mViewModel.checkUpdate();
}
@Override

View File

@@ -0,0 +1,166 @@
package com.uiui.zyos.activity.selectegrade;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import androidx.lifecycle.Observer;
import com.tencent.mmkv.MMKV;
import com.uiui.zyos.R;
import com.uiui.zyos.base.mvvm.BaseMvvmActivity;
import com.uiui.zyos.config.CommonConfig;
import com.uiui.zyos.databinding.ActivitySelecteGradeBinding;
import com.uiui.zyos.manager.RemoteManager;
import com.uiui.zyos.utils.ActivationUtil;
import java.util.HashMap;
import java.util.Map;
public class SelecteGradeActivity extends BaseMvvmActivity<SelecteGradeViewModel, ActivitySelecteGradeBinding> {
private static final String TAG = "SelecteGradeActivity";
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
private String grade = "一年级";
private void showGroup1() {
mViewDataBinding.radioGroup2.clearCheck();
mViewDataBinding.radioGroup3.clearCheck();
mViewDataBinding.radioGroup4.clearCheck();
}
private void showGroup2() {
mViewDataBinding.radioGroup1.clearCheck();
mViewDataBinding.radioGroup3.clearCheck();
mViewDataBinding.radioGroup4.clearCheck();
}
private void showGroup3() {
mViewDataBinding.radioGroup1.clearCheck();
mViewDataBinding.radioGroup2.clearCheck();
mViewDataBinding.radioGroup4.clearCheck();
}
private void showGroup4() {
mViewDataBinding.radioGroup1.clearCheck();
mViewDataBinding.radioGroup2.clearCheck();
mViewDataBinding.radioGroup3.clearCheck();
}
@Override
public int getLayoutId() {
return R.layout.activity_selecte_grade;
}
@Override
protected void initDataBinding() {
mViewModel.setCtx(this);
mViewModel.setLifecycle(getLifecycleSubject());
mViewModel.setVDBinding(mViewDataBinding);
mViewDataBinding.setClick(new BtnClick());
}
@Override
public void initView() {
mViewDataBinding.radioButton1.setOnCheckedChangeListener((compoundButton, b) -> {
if (b) setPrimary(compoundButton);
});
mViewDataBinding.radioButton2.setOnCheckedChangeListener((compoundButton, b) -> {
if (b) setPrimary(compoundButton);
});
mViewDataBinding.radioButton3.setOnCheckedChangeListener((compoundButton, b) -> {
if (b) setPrimary(compoundButton);
});
mViewDataBinding.radioButton4.setOnCheckedChangeListener((compoundButton, b) -> {
if (b) setPrimary2(compoundButton);
});
mViewDataBinding.radioButton5.setOnCheckedChangeListener((compoundButton, b) -> {
if (b) setPrimary2(compoundButton);
});
mViewDataBinding.radioButton6.setOnCheckedChangeListener((compoundButton, b) -> {
if (b) setPrimary2(compoundButton);
});
mViewDataBinding.radioButton7.setOnCheckedChangeListener((compoundButton, b) -> {
if (b) setJuniorHighSchool(compoundButton);
});
mViewDataBinding.radioButton8.setOnCheckedChangeListener((compoundButton, b) -> {
if (b) setJuniorHighSchool(compoundButton);
});
mViewDataBinding.radioButton9.setOnCheckedChangeListener((compoundButton, b) -> {
if (b) setJuniorHighSchool(compoundButton);
});
mViewDataBinding.radioButton10.setOnCheckedChangeListener((compoundButton, b) -> {
if (b) setHighSchool(compoundButton);
});
mViewDataBinding.radioButton11.setOnCheckedChangeListener((compoundButton, b) -> {
if (b) setHighSchool(compoundButton);
});
mViewDataBinding.radioButton12.setOnCheckedChangeListener((compoundButton, b) -> {
if (b) setHighSchool(compoundButton);
});
}
@Override
public void initData() {
mViewModel.mSuccessfulData.observe(this, new Observer<Boolean>() {
@Override
public void onChanged(Boolean aBoolean) {
if (aBoolean) {
finish();
}
}
});
}
public void setPrimary(View view) {
showGroup1();
grade = ((TextView) view).getText().toString();
Log.e(TAG, "setPrimary: " + grade);
}
public void setPrimary2(View view) {
showGroup2();
grade = ((TextView) view).getText().toString();
Log.e(TAG, "setPrimary: " + grade);
}
public void setJuniorHighSchool(View view) {
showGroup3();
grade = ((TextView) view).getText().toString();
Log.e(TAG, "setJuniorHighSchool: " + grade);
}
public void setHighSchool(View view) {
showGroup4();
grade = ((TextView) view).getText().toString();
Log.e(TAG, "setHighSchool: " + grade);
}
public class BtnClick {
public void exit(View view) {
finish();
}
public void empty(View view) {
}
public void submit(View view) {
if (ActivationUtil.isActivation(SelecteGradeActivity.this)) {
Map<String, String> params = new HashMap<>();
params.put("sn", RemoteManager.getInstance().getSerial());
params.put("sn_grade", grade);
mViewModel.updateInfo(params);
} else {
mMMKV.encode("local_" + "sn_grade", grade);
}
finish();
}
}
}

View File

@@ -0,0 +1,74 @@
package com.uiui.zyos.activity.selectegrade;
import android.util.Log;
import androidx.lifecycle.MutableLiveData;
import com.hjq.toast.Toaster;
import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiui.zyos.base.mvvm.BaseViewModel;
import com.uiui.zyos.bean.BaseResponse;
import com.uiui.zyos.databinding.ActivitySelecteGradeBinding;
import com.uiui.zyos.network.NetInterfaceManager;
import com.uiui.zyos.utils.ActivationUtil;
import java.util.Map;
import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
public class SelecteGradeViewModel extends BaseViewModel<ActivitySelecteGradeBinding, ActivityEvent> {
@Override
public ActivitySelecteGradeBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
public MutableLiveData<Boolean> mSuccessfulData = new MutableLiveData<>();
public void updateInfo(Map<String, String> params) {
if (!ActivationUtil.isActivation(getCtx())) {
return;
}
NetInterfaceManager.getInstance().getUpdateInfoObservable(params)
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
.subscribe(new Observer<BaseResponse>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("updateInfo", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse baseResponse) {
Log.e("updateInfo", "onNext: " + baseResponse);
if (baseResponse.code == 200) {
mSuccessfulData.setValue(true);
} else {
Toaster.show(baseResponse.msg);
mSuccessfulData.setValue(false);
}
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("updateInfo", "onError: " + e.getMessage());
mSuccessfulData.setValue(false);
}
@Override
public void onComplete() {
Log.e("updateInfo", "onComplete: ");
}
});
}
}

View File

@@ -0,0 +1,278 @@
package com.uiui.zyos.activity.user;
import android.content.Intent;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.CompoundButton;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import androidx.lifecycle.Observer;
import com.hjq.toast.Toaster;
import com.luck.picture.lib.basic.PictureSelector;
import com.luck.picture.lib.config.SelectMimeType;
import com.luck.picture.lib.entity.LocalMedia;
import com.luck.picture.lib.interfaces.OnResultCallbackListener;
import com.tencent.mmkv.MMKV;
import com.uiui.zyos.BuildConfig;
import com.uiui.zyos.R;
import com.uiui.zyos.activity.edit.EditActivity;
import com.uiui.zyos.activity.update.UpdateActivity;
import com.uiui.zyos.base.mvvm.BaseMvvmActivity;
import com.uiui.zyos.bean.AppUpdateInfo;
import com.uiui.zyos.bean.UserAvatarInfo;
import com.uiui.zyos.config.CommonConfig;
import com.uiui.zyos.custom.GlideEngine;
import com.uiui.zyos.databinding.ActivityUserBinding;
import com.uiui.zyos.fragment.usercenter.device.DeviceFragment;
import com.uiui.zyos.fragment.usercenter.info.InfoFragment;
import com.uiui.zyos.fragment.usercenter.parents.ParentsFragment;
import com.uiui.zyos.manager.RemoteManager;
import com.uiui.zyos.utils.ActivationUtil;
import com.uiui.zyos.utils.ApkUtils;
import com.uiui.zyos.utils.FileUtil;
import com.uiui.zyos.utils.GlideLoadUtils;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
public class UserActivity extends BaseMvvmActivity<UserViewModel, ActivityUserBinding> {
private static final String TAG = "UserActivity";
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
private FragmentManager mFragmentManager;
private Fragment[] mFragments;
@Override
public boolean setNightMode() {
return true;
}
@Override
protected int getLayoutId() {
return R.layout.activity_user;
}
@Override
protected void initDataBinding() {
mViewModel.setCtx(this);
mViewModel.setVDBinding(mViewDataBinding);
mViewModel.setLifecycle(getLifecycleSubject());
mViewDataBinding.setClick(new BtnClick());
}
@Override
protected void initView() {
mFragments = new Fragment[3];
mFragmentManager = getSupportFragmentManager();
mViewDataBinding.tvVersion.setText("版本V" + BuildConfig.VERSION_NAME);
mViewDataBinding.rbCenter.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
Log.d(TAG, "onCheckedChanged: rbCenter Checked = " + b);
if (b) {
switchContent(0);
}
}
});
mViewDataBinding.rbParents.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
Log.d(TAG, "onCheckedChanged: rbParents Checked = " + b);
if (b) {
switchContent(1);
}
}
});
mViewDataBinding.rbDevice.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
Log.d(TAG, "onCheckedChanged: rbDevice Checked = " + b);
if (b) {
switchContent(2);
}
}
});
mViewDataBinding.rbCenter.setChecked(true);
switchContent(0);
}
@Override
protected void initData() {
mViewModel.mUserAvatarInfoData.observe(this, new Observer<UserAvatarInfo>() {
@Override
public void onChanged(UserAvatarInfo userAvatarInfo) {
mViewDataBinding.setUserAvatarInfo(userAvatarInfo);
}
});
mViewModel.getAppUpdateInfoData().observe(this, new Observer<AppUpdateInfo>() {
@Override
public void onChanged(AppUpdateInfo appUpdateInfo) {
if (appUpdateInfo == null) {
Toaster.show("已是最新版本");
} else {
if (ApkUtils.isUpdate(UserActivity.this, appUpdateInfo)) {
Intent intent = new Intent(UserActivity.this, UpdateActivity.class);
intent.putExtra("appUpdateInfo", appUpdateInfo);
startActivity(intent);
Toaster.show("有新的版本需要更新");
} else {
Toaster.show("已是最新版本");
}
}
}
});
mViewModel.mSuccessfulData.observe(this, new Observer<Boolean>() {
@Override
public void onChanged(Boolean aBoolean) {
if (aBoolean) {
Toaster.show("更新成功");
}
}
});
}
@Override
protected void onResume() {
super.onResume();
if (ActivationUtil.isActivation(this)) {
mViewModel.getUserAvatarInfo();
} else {
setLocalData();
}
}
private void setLocalData() {
String avatarFilePath = mMMKV.decodeString("local_" + "avatar");
GlideLoadUtils.getInstance().glideLoad(UserActivity.this, avatarFilePath, mViewDataBinding.nvAvatar, R.drawable.default_avatar);
String nickName = mMMKV.decodeString("local_" + "name", "");
if (TextUtils.isEmpty(nickName)) {
mViewDataBinding.tvNickName.setText(getString(R.string.default_nickname));
} else {
mViewDataBinding.tvNickName.setText(nickName);
}
}
// 切换显示内容
public void switchContent(int index) {
FragmentTransaction transaction = mFragmentManager.beginTransaction();
hideFragments(transaction);
try {
switch (index) {
case 0:
if (mFragments[0] == null) {
mFragments[0] = new InfoFragment();
transaction.add(R.id.content, mFragments[0], 0 + "");
} else {
transaction.show(mFragments[0]);
}
break;
case 1:
if (mFragments[1] == null) {
mFragments[1] = new ParentsFragment();
transaction.add(R.id.content, mFragments[1], 1 + "");
} else {
transaction.show(mFragments[1]);
}
break;
case 2:
if (mFragments[2] == null) {
mFragments[2] = new DeviceFragment();
transaction.add(R.id.content, mFragments[2], 2 + "");
} else {
transaction.show(mFragments[2]);
}
break;
default:
}
transaction.commit();
} catch (Exception e) {
e.printStackTrace();
}
}
// 将所有的Fragment都置为隐藏状态。
private void hideFragments(FragmentTransaction transaction) {
if (mFragments != null) {
for (Fragment fragment : mFragments) {
if (fragment != null) {
transaction.hide(fragment);
}
}
}
}
private void selectPicture() {
PictureSelector.create(this)
.openGallery(SelectMimeType.ofImage())
.setSelectionMode(1)
.setImageEngine(GlideEngine.createGlideEngine())
.forResult(new OnResultCallbackListener<LocalMedia>() {
@Override
public void onResult(ArrayList<LocalMedia> result) {
String avatarFilePath = result.get(0).getPath();
Log.e("selectPicture", "onResult: " + avatarFilePath);
GlideLoadUtils.getInstance().glideLoad(UserActivity.this, avatarFilePath, mViewDataBinding.nvAvatar, R.drawable.default_avatar);
if (ActivationUtil.isActivation(UserActivity.this)) {
File avatarFile;
if (TextUtils.isEmpty(avatarFilePath)) {
avatarFile = FileUtil.drawableToFile(UserActivity.this, R.drawable.default_avatar, "avatar");
} else {
// Uri uri = Uri.parse(avatarFilePath);
// avatarFile = FileUtil.uriToFile(uri, UserActivity.this);
avatarFile = new File(avatarFilePath);
}
MediaType mediaType = MediaType.Companion.parse("image/png");
RequestBody requestBody = RequestBody.Companion.create(avatarFile, mediaType);
MultipartBody.Part body = MultipartBody.Part.createFormData("avatar", avatarFile.getName(), requestBody);
Map<String, String> params = new HashMap<>();
params.put("sn", RemoteManager.getInstance().getSerial());
mViewModel.updateInfo(params, body);
} else {
mMMKV.encode("local_" + "avatar", avatarFilePath);
}
}
@Override
public void onCancel() {
Log.e("selectPicture", "onCancel: ");
}
});
}
public class BtnClick {
public void exit(View view) {
finish();
}
public void checkUpdate(View view) {
mViewModel.checkUpdate();
}
public void edit(View view) {
Intent intent = new Intent(UserActivity.this, EditActivity.class);
intent.putExtra("type", "name");
intent.putExtra("data", mViewDataBinding.tvNickName.getText());
intent.putExtra("maxLength", 8);
startActivity(intent);
}
public void selectPic(View v) {
selectPicture();
}
}
}

View File

@@ -0,0 +1,148 @@
package com.uiui.zyos.activity.user;
import android.util.Log;
import androidx.lifecycle.MutableLiveData;
import com.hjq.toast.Toaster;
import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.trello.rxlifecycle4.android.FragmentEvent;
import com.uiui.zyos.BuildConfig;
import com.uiui.zyos.base.mvvm.BaseViewModel;
import com.uiui.zyos.bean.AppUpdateInfo;
import com.uiui.zyos.bean.BaseResponse;
import com.uiui.zyos.bean.UserAvatarInfo;
import com.uiui.zyos.databinding.ActivityUserBinding;
import com.uiui.zyos.network.NetInterfaceManager;
import com.uiui.zyos.utils.ActivationUtil;
import java.util.Map;
import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
import okhttp3.MultipartBody;
public class UserViewModel extends BaseViewModel<ActivityUserBinding, ActivityEvent> {
private static final String TAG = "UserViewModel";
@Override
public ActivityUserBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
public MutableLiveData<UserAvatarInfo> mUserAvatarInfoData = new MutableLiveData<>();
public void getUserAvatarInfo() {
NetInterfaceManager.getInstance()
.getUserAvatarInfoControl()
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
.subscribe(new Observer<BaseResponse<UserAvatarInfo>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("getUserAvatarInfo", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse<UserAvatarInfo> userAvatarInfoBaseResponse) {
Log.e("getUserAvatarInfo", "onNext: " + userAvatarInfoBaseResponse);
mUserAvatarInfoData.setValue(userAvatarInfoBaseResponse.data);
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("getUserAvatarInfo", "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Log.e("getUserAvatarInfo", "onComplete: ");
}
});
}
private MutableLiveData<AppUpdateInfo> mAppUpdateInfoData = new MutableLiveData<>();
public MutableLiveData<AppUpdateInfo> getAppUpdateInfoData() {
return mAppUpdateInfoData;
}
public void checkUpdate() {
NetInterfaceManager.getInstance().getCheckUpdateObservable(BuildConfig.APPLICATION_ID)
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
.subscribe(new Observer<BaseResponse<AppUpdateInfo>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("checkUpdate", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse<AppUpdateInfo> appUpdateInfoBaseResponse) {
Log.e("checkUpdate", "onNext: " + appUpdateInfoBaseResponse);
if (appUpdateInfoBaseResponse.code == 200) {
AppUpdateInfo appUpdateInfo = appUpdateInfoBaseResponse.data;
mAppUpdateInfoData.setValue(appUpdateInfo);
} else {
mAppUpdateInfoData.setValue(null);
}
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("checkUpdate", "onError: ");
Toaster.show("网络连接失败");
}
@Override
public void onComplete() {
Log.e("checkUpdate", "onComplete: ");
}
});
}
public MutableLiveData<Boolean> mSuccessfulData = new MutableLiveData<>();
public void updateInfo(Map<String, String> params, MultipartBody.Part multipartBody) {
if (!ActivationUtil.isActivation(getCtx())) {
return;
}
NetInterfaceManager.getInstance().getUpdateInfoObservable(params, multipartBody)
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
.subscribe(new Observer<BaseResponse>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("updateInfo", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse baseResponse) {
Log.e("updateInfo", "onNext: " + baseResponse);
if (baseResponse.code == 200) {
mSuccessfulData.setValue(true);
} else {
Toaster.show(baseResponse.msg);
mSuccessfulData.setValue(false);
}
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("updateInfo", "onError: " + e.getMessage());
mSuccessfulData.setValue(false);
}
@Override
public void onComplete() {
Log.e("updateInfo", "onComplete: ");
}
});
}
}

View File

@@ -1,57 +0,0 @@
package com.uiui.zyos.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.RecyclerView;
import com.uiui.zyos.R;
import java.util.List;
public class HomeworkAdapter extends RecyclerView.Adapter<HomeworkAdapter.Holder> {
private Context mContext;
private List<String> mHomeworkList;
public void setHomeworkList(List<String> homeworkList) {
mHomeworkList = homeworkList;
notifyDataSetChanged();
}
@NonNull
@Override
public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
mContext = parent.getContext();
return new Holder(LayoutInflater.from(mContext).inflate(R.layout.item_homework, parent, false));
}
@Override
public void onBindViewHolder(@NonNull Holder holder, int position) {
holder.tv_content.setText(mHomeworkList.get(position));
}
@Override
public int getItemCount() {
return mHomeworkList == null ? 0 : mHomeworkList.size();
}
class Holder extends RecyclerView.ViewHolder {
ConstraintLayout root;
ImageView imageView;
TextView tv_content;
public Holder(@NonNull View itemView) {
super(itemView);
root = itemView.findViewById(R.id.root);
imageView = itemView.findViewById(R.id.imageView);
tv_content = itemView.findViewById(R.id.tv_content);
}
}
}

View File

@@ -1,6 +1,8 @@
package com.uiui.zyos.adapter;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -11,14 +13,22 @@ import androidx.annotation.NonNull;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.RecyclerView;
import com.arialyy.annotations.Download;
import com.arialyy.aria.core.Aria;
import com.arialyy.aria.core.task.DownloadTask;
import com.shehuan.niv.NiceImageView;
import com.uiui.zyos.R;
import com.uiui.zyos.bean.HomeworkBean;
import com.uiui.zyos.utils.FileUtil;
import com.uiui.zyos.utils.GlideLoadUtils;
import com.uiui.zyos.utils.OpenFileUtil;
import com.uiui.zyos.utils.TimeUtils;
import java.io.File;
import java.util.List;
public class NewHomeworkAdapter extends RecyclerView.Adapter<NewHomeworkAdapter.Holder> {
private static final String TAG = "NewHomeworkAdapter";
private Context mContext;
private List<HomeworkBean> mHomeworkList;
@@ -37,11 +47,48 @@ public class NewHomeworkAdapter extends RecyclerView.Adapter<NewHomeworkAdapter.
@Override
public void onBindViewHolder(@NonNull Holder holder, int position) {
Aria.download(this).register();
HomeworkBean homeworkBean = mHomeworkList.get(position);
GlideLoadUtils.getInstance().glideLoad(mContext, homeworkBean.getFile_url(), holder.imageView, R.drawable.item_icon_homework);
holder.tv_content.setText(homeworkBean.getTitle());
holder.tv_type.setText(homeworkBean.getContent());
holder.tv_time.setText(homeworkBean.getCreated_at());
GlideLoadUtils.getInstance().glideLoad(mContext, homeworkBean.getFile_url(), holder.iv_cover, R.drawable.icon_homework_sample);
holder.tv_title.setText(homeworkBean.getTitle());
holder.tv_content.setText(homeworkBean.getContent());
switch (homeworkBean.getFile_type()) {
case 2:
holder.tv_type.setText("图片");
break;
case 3:
holder.tv_type.setText("视频");
break;
case 4:
holder.tv_type.setText("文档");
break;
default:
holder.tv_type.setText("文字");
}
holder.tv_time.setText(TimeUtils.getHomeworkTime(homeworkBean.getCreated_at()));
String mFileUrl = homeworkBean.getFile_url();
File file = new File(FileUtil.getDownLoadPath(mContext) + FileUtil.getFileNamefromURL(mFileUrl));
if (file.exists()) {
holder.iv_download.setVisibility(View.GONE);
holder.root.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
OpenFileUtil.openFile(mContext, file);
}
});
} else {
holder.iv_download.setVisibility(View.VISIBLE);
holder.iv_download.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FileUtil.ariaDownloadTestPaper(mContext, mFileUrl, homeworkBean);
notifyDataSetChanged();
}
});
}
}
@Override
@@ -51,16 +98,27 @@ public class NewHomeworkAdapter extends RecyclerView.Adapter<NewHomeworkAdapter.
class Holder extends RecyclerView.ViewHolder {
ConstraintLayout root;
NiceImageView imageView;
TextView tv_content, tv_type, tv_time;
NiceImageView iv_cover;
ImageView iv_download;
TextView tv_title, tv_content, tv_type, tv_time;
public Holder(@NonNull View itemView) {
super(itemView);
root = itemView.findViewById(R.id.root);
imageView = itemView.findViewById(R.id.imageView);
iv_cover = itemView.findViewById(R.id.iv_cover);
iv_download = itemView.findViewById(R.id.iv_download);
tv_title = itemView.findViewById(R.id.tv_title);
tv_content = itemView.findViewById(R.id.tv_content);
tv_type = itemView.findViewById(R.id.tv_type);
tv_time = itemView.findViewById(R.id.tv_time);
}
}
@Download.onTaskComplete
void taskComplete(DownloadTask task) {
//在这里处理任务完成的状态
Log.e(TAG, "taskComplete: " + task.getFilePath());
Log.e(TAG, "taskComplete: " + task.getDownloadEntity().getUrl());
notifyDataSetChanged();
}
}

View File

@@ -0,0 +1,17 @@
package com.uiui.zyos.bean;
import java.io.Serializable;
public class PhraseContent implements Serializable {
private static final long serialVersionUID = -3136093792143273374L;
String content;
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}

View File

@@ -10,27 +10,17 @@ import java.io.Serializable;
public class SnInfo implements Serializable {
private static final long serialVersionUID = -5268233433601073239L;
int id;
String sn_value;
int is_log;
int is_log_type;
int sex;
int age;
String height;
String weight;
int sex;//1 男 2 女 0 默认
String devices_version;
String sn_name;
String school;
String is_lock;
String is_reset;
String grade;
int admin_id;
String mobile;
String avatar;
long binding_time;
long study_time;
String study_time_ranking;
String class_name;
/*
*3 商用——企业用户
4 C端——老人用户
@@ -41,14 +31,11 @@ public class SnInfo implements Serializable {
*
* */
int type_id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
String mobile;
String avatar;
long binding_time;
long study_time;
int study_time_ranking;
public String getSn_value() {
return sn_value;
@@ -82,30 +69,6 @@ public class SnInfo implements Serializable {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getHeight() {
return height;
}
public void setHeight(String height) {
this.height = height;
}
public String getWeight() {
return weight;
}
public void setWeight(String weight) {
this.weight = weight;
}
public String getDevices_version() {
return devices_version;
}
@@ -154,12 +117,20 @@ public class SnInfo implements Serializable {
this.grade = grade;
}
public int getAdmin_id() {
return admin_id;
public String getClass_name() {
return class_name;
}
public void setAdmin_id(int admin_id) {
this.admin_id = admin_id;
public void setClass_name(String class_name) {
this.class_name = class_name;
}
public int getType_id() {
return type_id;
}
public void setType_id(int type_id) {
this.type_id = type_id;
}
public String getMobile() {
@@ -186,15 +157,7 @@ public class SnInfo implements Serializable {
this.binding_time = binding_time;
}
public int getType_id() {
return type_id;
}
public void setType_id(int type_id) {
this.type_id = type_id;
}
public Long getStudy_time() {
public long getStudy_time() {
return study_time;
}
@@ -202,11 +165,11 @@ public class SnInfo implements Serializable {
this.study_time = study_time;
}
public String getStudy_time_ranking() {
public int getStudy_time_ranking() {
return study_time_ranking;
}
public void setStudy_time_ranking(String study_time_ranking) {
public void setStudy_time_ranking(int study_time_ranking) {
this.study_time_ranking = study_time_ranking;
}

View File

@@ -0,0 +1,118 @@
package com.uiui.zyos.custom;
import android.content.Context;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.luck.picture.lib.engine.ImageEngine;
import com.luck.picture.lib.utils.ActivityCompatHelper;
import com.uiui.zyos.R;
/**
* @authorluck
* @date2019-11-13 17:02
* @describeGlide加载引擎
*/
public class GlideEngine implements ImageEngine {
/**
* 加载图片
*
* @param context 上下文
* @param url 资源url
* @param imageView 图片承载控件
*/
@Override
public void loadImage(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
if (!ActivityCompatHelper.assertValidRequest(context)) {
return;
}
Glide.with(context)
.load(url)
.into(imageView);
}
@Override
public void loadImage(Context context, ImageView imageView, String url, int maxWidth, int maxHeight) {
if (!ActivityCompatHelper.assertValidRequest(context)) {
return;
}
Glide.with(context)
.load(url)
.override(maxWidth, maxHeight)
.into(imageView);
}
/**
* 加载相册目录封面
*
* @param context 上下文
* @param url 图片路径
* @param imageView 承载图片ImageView
*/
@Override
public void loadAlbumCover(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
if (!ActivityCompatHelper.assertValidRequest(context)) {
return;
}
Glide.with(context)
.asBitmap()
.load(url)
.override(180, 180)
.sizeMultiplier(0.5f)
.transform(new CenterCrop(), new RoundedCorners(8))
.placeholder(R.drawable.ps_image_placeholder)
.into(imageView);
}
/**
* 加载图片列表图片
*
* @param context 上下文
* @param url 图片路径
* @param imageView 承载图片ImageView
*/
@Override
public void loadGridImage(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
if (!ActivityCompatHelper.assertValidRequest(context)) {
return;
}
Glide.with(context)
.load(url)
.override(200, 200)
.centerCrop()
.placeholder(R.drawable.ps_image_placeholder)
.into(imageView);
}
@Override
public void pauseRequests(Context context) {
Glide.with(context).pauseRequests();
}
@Override
public void resumeRequests(Context context) {
Glide.with(context).resumeRequests();
}
private GlideEngine() {
}
private static GlideEngine instance;
public static GlideEngine createGlideEngine() {
if (null == instance) {
synchronized (GlideEngine.class) {
if (null == instance) {
instance = new GlideEngine();
}
}
}
return instance;
}
}

View File

@@ -12,7 +12,6 @@ import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.uiui.zyos.R;
import com.uiui.zyos.adapter.HomeworkAdapter;
import com.uiui.zyos.base.BaseDataBindingFragment;
import com.uiui.zyos.databinding.FragmentArStudyBinding;
import com.uiui.zyos.utils.ApkUtils;
@@ -32,7 +31,7 @@ public class ARStudyFragment extends BaseDataBindingFragment<FragmentArStudyBind
private Activity mContext;
private HomeworkAdapter mHomeworkAdapter;
// private HomeworkAdapter mHomeworkAdapter;
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
@@ -99,14 +98,14 @@ public class ARStudyFragment extends BaseDataBindingFragment<FragmentArStudyBind
// stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.RIGHT_DECORATION, (int) (density * 20));//右间距
mViewDataBinding.recyclerView.addItemDecoration(new RecyclerViewSpacesItemDecoration(stringIntegerHashMap));
mHomeworkAdapter = new HomeworkAdapter();
// mHomeworkAdapter = new HomeworkAdapter();
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mViewDataBinding.recyclerView.setLayoutManager(linearLayoutManager);
mViewDataBinding.recyclerView.setAdapter(mHomeworkAdapter);
// mViewDataBinding.recyclerView.setAdapter(mHomeworkAdapter);
List<String> homeworkList = new ArrayList<>();
homeworkList.add("暂时没有作业");
mHomeworkAdapter.setHomeworkList(homeworkList);
// mHomeworkAdapter.setHomeworkList(homeworkList);
mViewDataBinding.ivApp.setOnClickListener(new View.OnClickListener() {
@Override

View File

@@ -0,0 +1,148 @@
package com.uiui.zyos.fragment.content;
import android.content.Context;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import com.tencent.mmkv.MMKV;
import com.uiui.zyos.R;
import com.uiui.zyos.adapter.NewHomeworkAdapter;
import com.uiui.zyos.base.mvvm.fragment.BaseMvvmFragment;
import com.uiui.zyos.bean.HomeworkBean;
import com.uiui.zyos.config.CommonConfig;
import com.uiui.zyos.databinding.FragmentContentBinding;
import com.uiui.zyos.view.RecyclerViewSpacesItemDecoration;
import java.util.HashMap;
import java.util.List;
/**
* A simple {@link Fragment} subclass.
* Use the {@link ContentFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class ContentFragment extends BaseMvvmFragment<ContentViewModel, FragmentContentBinding> {
private static final String TAG = "ContentFragment";
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
private FragmentActivity mContext;
private NewHomeworkAdapter mHomeworkAdapter;
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String SUBJECT_NAME = "subject_name";
// TODO: Rename and change types of parameters
private String mSubject;
public ContentFragment() {
// Required empty public constructor
}
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param subject Parameter 1.
* @return A new instance of fragment ContentFragment.
*/
// TODO: Rename and change types and number of parameters
public static ContentFragment newInstance(String subject) {
ContentFragment fragment = new ContentFragment();
Bundle args = new Bundle();
args.putString(SUBJECT_NAME, subject);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mSubject = getArguments().getString(SUBJECT_NAME);
}
}
@Override
protected int getLayoutId() {
return R.layout.fragment_content;
}
@Override
protected void initDataBinding() {
mContext = getActivity();
mViewModel.setCtx(getCtx());
mViewModel.setLifecycle(getLifecycleSubject());
mViewModel.setVDBinding(mViewDataBinding);
// mViewDataBinding.setClick(new BtnClick());
}
@Override
protected void initView(Bundle bundle) {
mHomeworkAdapter = new NewHomeworkAdapter();
HashMap<String, Integer> stringIntegerHashMap = new HashMap<>();
WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
wm.getDefaultDisplay().getRealMetrics(dm);
float density = dm.density; // 屏幕密度0.75 / 1.0 / 1.5
stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.TOP_DECORATION, (int) (density * 10));//top间距
stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.BOTTOM_DECORATION, (int) (density * 10));//底部间距
stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.LEFT_DECORATION, (int) (density * 10));//左间距
stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.RIGHT_DECORATION, (int) (density * 10));//右间距
mViewDataBinding.recyclerView.addItemDecoration(new RecyclerViewSpacesItemDecoration(stringIntegerHashMap));
mViewDataBinding.recyclerView.setLayoutManager(new GridLayoutManager(mContext, 2));
mViewDataBinding.recyclerView.setAdapter(mHomeworkAdapter);
}
@Override
protected void initData(Bundle savedInstanceState) {
}
@Override
public void fetchData() {
}
public void setHomeWorkList(List<HomeworkBean> homeWorkList) {
if (homeWorkList == null || homeWorkList.size() == 0) {
mViewDataBinding.ivNodata.setVisibility(View.VISIBLE);
mViewDataBinding.recyclerView.setVisibility(View.GONE);
} else {
mViewDataBinding.ivNodata.setVisibility(View.GONE);
mViewDataBinding.recyclerView.setVisibility(View.VISIBLE);
mHomeworkAdapter.setHomeworkList(homeWorkList);
}
}
@Override
public void onResume() {
super.onResume();
Log.e(TAG, "onResume: ");
}
@Override
public void onDestroyView() {
super.onDestroyView();
}
public class BtnClick {
}
}

View File

@@ -0,0 +1,18 @@
package com.uiui.zyos.fragment.content;
import com.trello.rxlifecycle4.android.FragmentEvent;
import com.uiui.zyos.base.mvvm.BaseViewModel;
import com.uiui.zyos.databinding.FragmentContentBinding;
public class ContentViewModel extends BaseViewModel<FragmentContentBinding, FragmentEvent> {
@Override
public FragmentContentBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
}

View File

@@ -10,7 +10,6 @@ import android.provider.Settings;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.WindowManager;
@@ -24,18 +23,20 @@ import com.bumptech.glide.Glide;
import com.tencent.mmkv.MMKV;
import com.uiui.zyos.R;
import com.uiui.zyos.activity.ExitActivity;
import com.uiui.zyos.activity.homework.HomeworkActivity;
import com.uiui.zyos.activity.more.MoreAppActivity;
import com.uiui.zyos.activity.user.UserActivity;
import com.uiui.zyos.adapter.AppAdapter;
import com.uiui.zyos.adapter.NewHomeworkAdapter;
import com.uiui.zyos.base.mvvm.fragment.BaseMvvmFragment;
import com.uiui.zyos.bean.BaseResponse;
import com.uiui.zyos.bean.DesktopIcon;
import com.uiui.zyos.bean.HomeworkBean;
import com.uiui.zyos.bean.PhraseContent;
import com.uiui.zyos.bean.SnInfo;
import com.uiui.zyos.bean.StudyStatBean;
import com.uiui.zyos.config.CommonConfig;
import com.uiui.zyos.databinding.FragmentUserBinding;
import com.uiui.zyos.dialog.SingleDialog;
import com.uiui.zyos.jxw.JxwPackageConfig;
import com.uiui.zyos.utils.ApkUtils;
import com.uiui.zyos.utils.OpenApkUtils;
@@ -115,35 +116,13 @@ public class UserFragment extends BaseMvvmFragment<UserViewModel, FragmentUserBi
mViewModel.setCtx(getCtx());
mViewModel.setLifecycle(getLifecycleSubject());
mViewModel.setVDBinding(mViewDataBinding);
// mViewDataBinding.setClick(new BtnClick());
mViewDataBinding.setClick(new BtnClick());
}
@Override
protected void initView(Bundle bundle) {
Log.e(TAG, "initView: ");
mViewDataBinding.tvNotification.requestFocus();
mViewDataBinding.tvActivated2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_LAUNCHER_PACKAGE_NAME, JxwPackageConfig.JXW_LAUNCHER_UPDATE_CLASS_NAME);
}
});
mViewDataBinding.tvActivated.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// ApkUtils.openPackage(mContext, "com.uiui.zy", "com.uiui.zy.activity.main.MainActivity");
OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_LAUNCHER_PACKAGE_NAME, JxwPackageConfig.JXW_LAUNCHER_UPDATE_CLASS_NAME);
}
});
mViewDataBinding.tvApplet.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ApkUtils.openPackage(mContext, "com.uiui.zy", "com.uiui.zy.activity.main.MainActivity");
}
});
mViewDataBinding.ivAvatar.setOnClickListener(view -> ApkUtils.openPackage(mContext, "com.uiui.zy", "com.uiui.zy.activity.main.MainActivity"));
mViewDataBinding.ivAppletQrcode.setOnClickListener(view -> ApkUtils.openPackage(mContext, "com.uiui.zy", "com.uiui.zy.activity.main.MainActivity"));
mViewDataBinding.ivDeviceQrcode.setOnClickListener(view -> ApkUtils.openPackage(mContext, "com.uiui.zy", "com.uiui.zy.activity.main.MainActivity"));
registerOwnReceiver();
String name = mMMKV.decodeString("USERINFO_NAME", "");
if (TextUtils.isEmpty(name)) {
@@ -159,48 +138,17 @@ public class UserFragment extends BaseMvvmFragment<UserViewModel, FragmentUserBi
}
int logined = mMMKV.decodeInt(CommonConfig.isLogined, 0);
if (logined == 1) {
mViewDataBinding.clNodata.setVisibility(View.GONE);
mViewDataBinding.clUsedata.setVisibility(View.VISIBLE);
mViewDataBinding.ivActivation.setVisibility(View.GONE);
mViewDataBinding.clStudyTime.setVisibility(View.VISIBLE);
}
setButtonVisibility();
mViewDataBinding.tvExit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent("Receiver_Refresh_Password_Action");
intent.setPackage("com.uiui.zy");
mContext.sendBroadcast(intent);
int is_activation = Settings.Global.getInt(mContext.getContentResolver(), CommonConfig.UIUI_ACTIVATION_KEY, 0);
if (is_activation == 1) {
showPassword();
} else {
Utils.exitDesktop(mContext);
}
}
});
mViewDataBinding.ivActivation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ApkUtils.openPackage(mContext, "com.uiui.zy", "com.uiui.zy.activity.main.MainActivity");
}
});
String avatar = mMMKV.decodeString("USERINFO_AVATAR", "");
Glide.with(mViewDataBinding.ivAvatar).load(avatar).error(R.drawable.default_avatar).into(mViewDataBinding.ivAvatar);
mViewDataBinding.tvDate1.setText(TimeUtils.getDateAndWeek(System.currentTimeMillis()));
mViewDataBinding.tvDate2.setText(TimeUtils.getDateAndWeek(System.currentTimeMillis()));
mViewDataBinding.clMore.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(mContext, MoreAppActivity.class));
}
});
mViewDataBinding.clBindStatu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ApkUtils.openPackage(mContext, "com.uiui.zy", "com.uiui.zy.activity.main.MainActivity");
}
});
mViewDataBinding.tvDate3.setText(TimeUtils.getDateAndWeek(System.currentTimeMillis()));
mViewDataBinding.rvApp.setLayoutManager(new GridLayoutManager(mContext, 4));
HashMap<String, Integer> stringIntegerHashMap = new HashMap<>();
WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
@@ -248,27 +196,19 @@ public class UserFragment extends BaseMvvmFragment<UserViewModel, FragmentUserBi
mViewDataBinding.tvPercent.setText(snInfo.getStudy_time_ranking() + "%");
mViewDataBinding.tvDuration.setText(String.format(getString(R.string.today_study_time), TimeUtils.formatTime(snInfo.getStudy_time())));
mViewDataBinding.clNodata.setVisibility(View.GONE);
mViewDataBinding.clUsedata.setVisibility(View.VISIBLE);
mViewDataBinding.ivBind.setVisibility(View.GONE);
mViewDataBinding.ivActivation.setVisibility(View.GONE);
mViewDataBinding.clStudyTime.setVisibility(View.VISIBLE);
break;
case 300: //设备没有绑定
case 400://没有授权的设备
case 403://设备归属不存在
case 402://sn不存在
mViewDataBinding.tvName.setText(getString(R.string.unbind));
mViewDataBinding.tvGrade.setText(getString(R.string.notset));
mViewDataBinding.clNodata.setVisibility(View.VISIBLE);
mViewDataBinding.clUsedata.setVisibility(View.GONE);
mViewDataBinding.ivBind.setVisibility(View.VISIBLE);
case 403://设备归属不存在
// mViewDataBinding.tvName.setText(getString(R.string.default_nickname));
// mViewDataBinding.tvGrade.setText(getString(R.string.default_grade));
mViewDataBinding.ivActivation.setVisibility(View.VISIBLE);
mViewDataBinding.clStudyTime.setVisibility(View.GONE);
break;
// Toaster.show(getString(R.string.device_unauthorized));
// Log.e(TAG, "setSnInfo: " + getString(R.string.device_unauthorized));
// tvName.setText(getString(R.string.device_unauthorized));
// tvGrade.setText(getString(R.string.device_unauthorized));
// clNodata.setVisibility(View.GONE);
// clUsedata.setVisibility(View.GONE);
// break;
default:
}
}
@@ -324,10 +264,10 @@ public class UserFragment extends BaseMvvmFragment<UserViewModel, FragmentUserBi
@Override
public void onChanged(List<HomeworkBean> homeworkBeans) {
mHomeworkAdapter.setHomeworkList(homeworkBeans);
if (homeworkBeans==null||homeworkBeans.isEmpty()){
if (homeworkBeans == null || homeworkBeans.isEmpty()) {
mViewDataBinding.llNodata.setVisibility(View.VISIBLE);
mViewDataBinding.rvHomework.setVisibility(View.GONE);
}else {
} else {
mViewDataBinding.llNodata.setVisibility(View.GONE);
mViewDataBinding.rvHomework.setVisibility(View.VISIBLE);
}
@@ -335,13 +275,21 @@ public class UserFragment extends BaseMvvmFragment<UserViewModel, FragmentUserBi
});
mViewModel.getHomework();
mViewModel.mPhraseData.observe(this, new Observer<PhraseContent>() {
@Override
public void onChanged(PhraseContent phraseContent) {
String text = phraseContent.getContent();
mViewDataBinding.tvNotification.setText(text);
mViewDataBinding.tvNotification.requestFocus();
}
});
mViewModel.getPhrase();
}
@Override
public void fetchData() {
Log.e(TAG, "fetchData: ");
// mPresenter.getInstalledApp();
// mPresenter.getSnInfo();
}
@Override
@@ -349,57 +297,16 @@ public class UserFragment extends BaseMvvmFragment<UserViewModel, FragmentUserBi
super.onDestroyView();
}
private void showSingleDialog() {
SingleDialog singleDialog = new SingleDialog(mContext);
singleDialog.setTitle("温馨提示");
singleDialog.setMessage("退出请绑定小程序后设置退出密码");
singleDialog.setOnClickBottomListener(new SingleDialog.OnClickBottomListener() {
@Override
public void onPositiveClick() {
singleDialog.dismiss();
}
});
singleDialog.show();
singleDialog.getWindow().setGravity(Gravity.CENTER);
singleDialog.setCancelable(true);
}
private void showPassword() {
// PasswordDialog passwordDialog = new PasswordDialog(mContext);
// passwordDialog.setTitle("退出智慧课堂");
// passwordDialog.setOnClickBottomListener(new PasswordDialog.OnClickBottomListener() {
// @Override
// public void onPositiveClick() {
// String password = Settings.Global.getString(mContext.getContentResolver(), CommonConfig.LOCK_SCREEN_PASSWORD);
// if (TextUtils.isEmpty(password)) {
// password = CommonConfig.DEFAULT_PASSWORD;
// }
// if (password.equals(passwordDialog.getPassword())) {
// passwordDialog.dismiss();
// exitDesktop();
// } else {
// Toaster.show("密码错误");
// }
// }
//
// @Override
// public void onNegtiveClick() {
// passwordDialog.dismiss();
// }
// });
// passwordDialog.show();
// passwordDialog.getWindow().setGravity(Gravity.CENTER);
// passwordDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
// passwordDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
startActivity(new Intent(mContext, ExitActivity.class));
}
private void setButtonVisibility() {
int is_activation = Settings.Global.getInt(mContext.getContentResolver(), CommonConfig.UIUI_ACTIVATION_KEY, 0);
Log.e(TAG, "setButtonVisibility: " + is_activation);
if (is_activation != 1) {
// tvExit.setVisibility(View.VISIBLE);
mViewDataBinding.ivActivation.setVisibility(View.VISIBLE);
mViewDataBinding.clStudyTime.setVisibility(View.GONE);
Glide.with(mViewDataBinding.ivAvatar).load(mMMKV.decodeString("local_" + "avatar")).error(R.drawable.default_avatar).into(mViewDataBinding.ivAvatar);
mViewDataBinding.tvName.setText(mMMKV.decodeString("local_" + "name", getString(R.string.default_nickname)));
mViewDataBinding.tvGrade.setText(mMMKV.decodeString("local_" + "sn_grade", getString(R.string.default_grade)));
} else {
int isReturnAndroid = Settings.Global.getInt(mContext.getContentResolver(), CommonConfig.UIUI_RETURN_ANDROID_KEY, 1);
if (isReturnAndroid == 0) {
@@ -408,6 +315,7 @@ public class UserFragment extends BaseMvvmFragment<UserViewModel, FragmentUserBi
// tvExit.setVisibility(View.VISIBLE);
}
mViewDataBinding.ivActivation.setVisibility(View.GONE);
mViewDataBinding.clStudyTime.setVisibility(View.VISIBLE);
}
}
@@ -490,6 +398,7 @@ public class UserFragment extends BaseMvvmFragment<UserViewModel, FragmentUserBi
case Intent.ACTION_TIME_TICK:
mViewDataBinding.tvDate1.setText(TimeUtils.getDateAndWeek(System.currentTimeMillis()));
mViewDataBinding.tvDate2.setText(TimeUtils.getDateAndWeek(System.currentTimeMillis()));
mViewDataBinding.tvDate3.setText(TimeUtils.getDateAndWeek(System.currentTimeMillis()));
default:
break;
}
@@ -579,4 +488,40 @@ public class UserFragment extends BaseMvvmFragment<UserViewModel, FragmentUserBi
}
}
public class BtnClick {
public void exit(View view) {
Intent intent = new Intent("Receiver_Refresh_Password_Action");
intent.setPackage("com.uiui.zy");
mContext.sendBroadcast(intent);
int is_activation = Settings.Global.getInt(mContext.getContentResolver(), CommonConfig.UIUI_ACTIVATION_KEY, 0);
if (is_activation == 1) {
startActivity(new Intent(mContext, ExitActivity.class));
} else {
Utils.exitDesktop(mContext);
}
}
public void openSn(View view) {
ApkUtils.openPackage(mContext, "com.uiui.zy", "com.uiui.zy.activity.main.MainActivity");
}
public void openUser(View view) {
startActivity(new Intent(mContext, UserActivity.class));
}
public void toMore(View view) {
startActivity(new Intent(mContext, MoreAppActivity.class));
}
public void openJxwUpdate(View view) {
OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_LAUNCHER_PACKAGE_NAME, JxwPackageConfig.JXW_LAUNCHER_UPDATE_CLASS_NAME);
}
public void openHomework(View view) {
startActivity(new Intent(mContext, HomeworkActivity.class));
}
}
}

View File

@@ -18,6 +18,7 @@ import com.uiui.zyos.bean.AppUsed;
import com.uiui.zyos.bean.BaseResponse;
import com.uiui.zyos.bean.DesktopIcon;
import com.uiui.zyos.bean.HomeworkBean;
import com.uiui.zyos.bean.PhraseContent;
import com.uiui.zyos.bean.SnInfo;
import com.uiui.zyos.bean.StudyStatBean;
import com.uiui.zyos.config.CommonConfig;
@@ -58,6 +59,10 @@ public class UserViewModel extends BaseViewModel<FragmentUserBinding, FragmentEv
public MutableLiveData<BaseResponse<SnInfo>> mSnInfoData = new MutableLiveData<>();
public void getSnInfo() {
boolean activation = ActivationUtil.isActivation(getCtx());
if (!activation) {
return;
}
NetInterfaceManager.getInstance().getSnInfo(getLifecycle(), new NetInterfaceManager.ObserverCallback() {
@Override
public void onSubscribe(Disposable d) {
@@ -195,6 +200,10 @@ public class UserViewModel extends BaseViewModel<FragmentUserBinding, FragmentEv
public MutableLiveData<List<HomeworkBean>> mHomeworkBeanListData = new MutableLiveData<>();
public void getHomework() {
boolean activation = ActivationUtil.isActivation(getCtx());
if (!activation) {
return;
}
NetInterfaceManager.getInstance().getHomeworkObservable()
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY))
.subscribe(new Observer<BaseResponse<List<HomeworkBean>>>() {
@@ -206,8 +215,8 @@ public class UserViewModel extends BaseViewModel<FragmentUserBinding, FragmentEv
@Override
public void onNext(@NonNull BaseResponse<List<HomeworkBean>> listBaseResponse) {
Log.e("getHomework", "onNext: " + listBaseResponse);
List<HomeworkBean> homeworkBeans = listBaseResponse.data;
mHomeworkBeanListData.setValue(homeworkBeans);
List<HomeworkBean> homeworkBeans = listBaseResponse.data;
mHomeworkBeanListData.setValue(homeworkBeans);
}
@Override
@@ -221,4 +230,40 @@ public class UserViewModel extends BaseViewModel<FragmentUserBinding, FragmentEv
}
});
}
public MutableLiveData<PhraseContent> mPhraseData = new MutableLiveData<>();
public void getPhrase() {
boolean activation = ActivationUtil.isActivation(getCtx());
if (!activation) {
return;
}
NetInterfaceManager.getInstance().getPhraseObservable()
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY))
.subscribe(new Observer<BaseResponse<PhraseContent>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("getPhrase", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse<PhraseContent> phraseContentBaseResponse) {
Log.e("getPhrase", "onNext: " + phraseContentBaseResponse);
if (phraseContentBaseResponse.code == 200) {
PhraseContent phraseContent = phraseContentBaseResponse.data;
mPhraseData.setValue(phraseContent);
}
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("getPhrase", "onError: ");
}
@Override
public void onComplete() {
Log.e("getPhrase", "onComplete: ");
}
});
}
}

View File

@@ -0,0 +1,61 @@
package com.uiui.zyos.fragment.usercenter.device;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import com.uiui.zyos.R;
import com.uiui.zyos.activity.ServiceActivity;
import com.uiui.zyos.base.mvvm.fragment.BaseMvvmFragment;
import com.uiui.zyos.databinding.FragmentDeviceBinding;
import com.uiui.zyos.manager.RemoteManager;
import com.uiui.zyos.utils.Utils;
public class DeviceFragment extends BaseMvvmFragment<DeviceViewModel, FragmentDeviceBinding> {
private Context mContext;
public static DeviceFragment newInstance() {
return new DeviceFragment();
}
@Override
protected int getLayoutId() {
return R.layout.fragment_device;
}
@Override
protected void initDataBinding() {
mContext = getActivity();
mViewModel.setCtx(getCtx());
mViewModel.setLifecycle(getLifecycleSubject());
mViewModel.setVDBinding(mViewDataBinding);
mViewDataBinding.setClick(new BtnClick());
}
@Override
protected void initView(Bundle bundle) {
mViewDataBinding.tvModel.setText(Build.MODEL);
mViewDataBinding.tvVersion.setText(Utils.getCustomVersion());
mViewDataBinding.tvMac.setText(RemoteManager.getInstance().getSerial());
}
@Override
protected void initData(Bundle savedInstanceState) {
}
@Override
public void fetchData() {
}
public class BtnClick {
public void openService(View view) {
startActivity(new Intent(mContext, ServiceActivity.class));
}
}
}

View File

@@ -0,0 +1,18 @@
package com.uiui.zyos.fragment.usercenter.device;
import com.trello.rxlifecycle4.android.FragmentEvent;
import com.uiui.zyos.base.mvvm.BaseViewModel;
import com.uiui.zyos.databinding.FragmentDeviceBinding;
public class DeviceViewModel extends BaseViewModel<FragmentDeviceBinding, FragmentEvent> {
@Override
public FragmentDeviceBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
}

View File

@@ -0,0 +1,189 @@
package com.uiui.zyos.fragment.usercenter.info;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.CompoundButton;
import androidx.lifecycle.Observer;
import com.hjq.toast.Toaster;
import com.tencent.mmkv.MMKV;
import com.uiui.zyos.R;
import com.uiui.zyos.activity.edit.EditActivity;
import com.uiui.zyos.activity.selectegrade.SelecteGradeActivity;
import com.uiui.zyos.base.mvvm.fragment.BaseMvvmFragment;
import com.uiui.zyos.bean.SnInfo;
import com.uiui.zyos.config.CommonConfig;
import com.uiui.zyos.databinding.FragmentInfoBinding;
import com.uiui.zyos.manager.RemoteManager;
import com.uiui.zyos.utils.ActivationUtil;
import java.util.HashMap;
import java.util.Map;
public class InfoFragment extends BaseMvvmFragment<InfoViewModel, FragmentInfoBinding> {
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
private Context mContext;
public static InfoFragment newInstance() {
return new InfoFragment();
}
@Override
protected int getLayoutId() {
return R.layout.fragment_info;
}
@Override
protected void initDataBinding() {
mContext = getActivity();
mViewModel.setCtx(getCtx());
mViewModel.setLifecycle(getLifecycleSubject());
mViewModel.setVDBinding(mViewDataBinding);
mViewDataBinding.setClick(new BtnClick());
}
@Override
protected void initView(Bundle bundle) {
mViewDataBinding.rbMale.setChecked(true);
}
private void setRadioButton() {
mViewDataBinding.rbMale.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (b) {
if (ActivationUtil.isActivation(mContext)) {
Map<String, String> params = new HashMap<>();
params.put("sn", RemoteManager.getInstance().getSerial());
params.put("sex", "1");
mViewModel.updateInfo(params);
} else {
mMMKV.encode("local_" + "sex", 1);
}
}
}
});
mViewDataBinding.rbFemale.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (b) {
if (ActivationUtil.isActivation(mContext)) {
Map<String, String> params = new HashMap<>();
params.put("sn", RemoteManager.getInstance().getSerial());
params.put("sex", "2");
mViewModel.updateInfo(params);
} else {
mMMKV.encode("local_" + "sex", 2);
}
}
}
});
}
@Override
protected void initData(Bundle savedInstanceState) {
mViewModel.mSnInfoData.observe(this, new Observer<SnInfo>() {
@Override
public void onChanged(SnInfo snInfo) {
mViewDataBinding.setSnInfo(snInfo);
int gender = snInfo.getSex();
if (gender == 0) {
mViewDataBinding.rgGender.clearCheck();
} else if (gender == 1) {
mViewDataBinding.rbMale.setChecked(true);
} else if (gender == 2) {
mViewDataBinding.rbFemale.setChecked(true);
}
setRadioButton();
}
});
mViewModel.mSuccessfulData.observe(this, new Observer<Boolean>() {
@Override
public void onChanged(Boolean aBoolean) {
if (aBoolean) {
Toaster.show("更新成功");
}
}
});
}
@Override
public void fetchData() {
}
@Override
public void onResume() {
super.onResume();
if (ActivationUtil.isActivation(mContext)) {
mViewModel.getSnInfo();
} else {
getLocalData();
}
}
private void getLocalData() {
int gender = mMMKV.decodeInt("local_" + "sex", 1);
if (gender == 1) {
mViewDataBinding.rbMale.setChecked(true);
} else {
mViewDataBinding.rbFemale.setChecked(true);
}
setRadioButton();
String class_name = mMMKV.decodeString("local_" + "class_name", "");
if (TextUtils.isEmpty(class_name)) {
mViewDataBinding.tvClass.setText(getString(R.string.notset));
} else {
mViewDataBinding.tvClass.setText(class_name);
}
String sn_grade = mMMKV.decodeString("local_" + "sn_grade", "");
if (TextUtils.isEmpty(sn_grade)) {
mViewDataBinding.tvGrade.setText(getString(R.string.default_grade));
} else {
mViewDataBinding.tvGrade.setText(sn_grade);
}
String school = mMMKV.decodeString("local_" + "school", "");
if (TextUtils.isEmpty(class_name)) {
mViewDataBinding.tvSchool.setText(getString(R.string.notset));
} else {
mViewDataBinding.tvSchool.setText(school);
}
}
private void edit(String type, String text, int maxLength) {
Intent intent = new Intent(mContext, EditActivity.class);
intent.putExtra("type", type);
intent.putExtra("data", text);
intent.putExtra("maxLength", maxLength);
startActivity(intent);
}
public class BtnClick {
public void editClass(View view) {
String text = mViewDataBinding.tvClass.getText().toString();
edit("class_name", text, 8);
}
public void editGrade(View view) {
Intent intent = new Intent(mContext, SelecteGradeActivity.class);
intent.putExtra("data", mViewDataBinding.tvGrade.getText());
startActivity(intent);
}
public void editSchool(View view) {
String text = mViewDataBinding.tvSchool.getText().toString();
edit("school", text, 16);
}
}
}

View File

@@ -0,0 +1,110 @@
package com.uiui.zyos.fragment.usercenter.info;
import android.util.Log;
import androidx.lifecycle.MutableLiveData;
import com.blankj.utilcode.util.ActivityUtils;
import com.hjq.toast.Toaster;
import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.trello.rxlifecycle4.android.FragmentEvent;
import com.uiui.zyos.base.mvvm.BaseViewModel;
import com.uiui.zyos.bean.BaseResponse;
import com.uiui.zyos.bean.SnInfo;
import com.uiui.zyos.databinding.FragmentInfoBinding;
import com.uiui.zyos.network.NetInterfaceManager;
import com.uiui.zyos.utils.ActivationUtil;
import java.util.Map;
import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
public class InfoViewModel extends BaseViewModel<FragmentInfoBinding, FragmentEvent> {
@Override
public FragmentInfoBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
public MutableLiveData<SnInfo> mSnInfoData = new MutableLiveData<>();
public void getSnInfo() {
if (!ActivationUtil.isActivation(getCtx())) {
return;
}
NetInterfaceManager.getInstance().getsnInfoControl()
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY))
.subscribe(new Observer<BaseResponse<SnInfo>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("getSnInfo", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse<SnInfo> snInfoBaseResponse) {
Log.e("getSnInfo", "onNext: " + snInfoBaseResponse);
if (snInfoBaseResponse.code == 200) {
mSnInfoData.setValue(snInfoBaseResponse.data);
}
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("getSnInfo", "onError: ");
}
@Override
public void onComplete() {
Log.e("getSnInfo", "onComplete: ");
}
});
}
public MutableLiveData<Boolean> mSuccessfulData = new MutableLiveData<>();
public void updateInfo(Map<String, String> params) {
if (!ActivationUtil.isActivation(getCtx())) {
return;
}
NetInterfaceManager.getInstance().getUpdateInfoObservable(params)
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY))
.subscribe(new Observer<BaseResponse>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("updateInfo", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse baseResponse) {
Log.e("updateInfo", "onNext: " + baseResponse);
if (baseResponse.code == 200) {
mSuccessfulData.setValue(true);
} else {
Toaster.show(baseResponse.msg);
mSuccessfulData.setValue(false);
}
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("updateInfo", "onError: " + e.getMessage());
mSuccessfulData.setValue(false);
}
@Override
public void onComplete() {
Log.e("updateInfo", "onComplete: ");
}
});
}
}

View File

@@ -0,0 +1,58 @@
package com.uiui.zyos.fragment.usercenter.parents;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import com.uiui.zyos.R;
import com.uiui.zyos.base.mvvm.fragment.BaseMvvmFragment;
import com.uiui.zyos.databinding.FragmentParentsBinding;
import com.uiui.zyos.fragment.usercenter.device.DeviceFragment;
import com.uiui.zyos.utils.OpenApkUtils;
public class ParentsFragment extends BaseMvvmFragment<ParentsViewModel, FragmentParentsBinding> {
private Context mContext;
public static ParentsFragment newInstance() {
return new ParentsFragment();
}
@Override
protected int getLayoutId() {
return R.layout.fragment_parents;
}
@Override
protected void initDataBinding() {
mContext = getActivity();
mViewModel.setCtx(getCtx());
mViewModel.setLifecycle(getLifecycleSubject());
mViewModel.setVDBinding(mViewDataBinding);
mViewDataBinding.setClick(new BtnClick());
}
@Override
protected void initView(Bundle bundle) {
}
@Override
protected void initData(Bundle savedInstanceState) {
}
@Override
public void fetchData() {
}
public class BtnClick {
public void openSn(View view) {
OpenApkUtils.getInstance().openApp("com.uiui.zy", "com.uiui.zy.activity.main.MainActivity");
}
}
}

View File

@@ -0,0 +1,18 @@
package com.uiui.zyos.fragment.usercenter.parents;
import com.trello.rxlifecycle4.android.FragmentEvent;
import com.uiui.zyos.base.mvvm.BaseViewModel;
import com.uiui.zyos.databinding.FragmentParentsBinding;
public class ParentsViewModel extends BaseViewModel<FragmentParentsBinding, FragmentEvent> {
@Override
public FragmentParentsBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
}

View File

@@ -21,6 +21,7 @@ import com.uiui.zyos.bean.HomeworkBean;
import com.uiui.zyos.bean.LessonApp;
import com.uiui.zyos.bean.LessonJson;
import com.uiui.zyos.bean.LessonSetting;
import com.uiui.zyos.bean.PhraseContent;
import com.uiui.zyos.bean.SnInfo;
import com.uiui.zyos.bean.StudyStatBean;
import com.uiui.zyos.bean.UserAvatarInfo;
@@ -35,11 +36,13 @@ import com.uiui.zyos.network.api.CloudLessonAppApi;
import com.uiui.zyos.network.api.GetFilesApi;
import com.uiui.zyos.network.api.GetHomeworkApi;
import com.uiui.zyos.network.api.HomeworkDetailApi;
import com.uiui.zyos.network.api.PhraseApi;
import com.uiui.zyos.network.api.RunNewApp;
import com.uiui.zyos.network.api.SNInfoApi;
import com.uiui.zyos.network.api.StudyStatApi;
import com.uiui.zyos.network.api.UpdateAddressApi;
import com.uiui.zyos.network.api.UpdateAlarmClockApi;
import com.uiui.zyos.network.api.UpdateInfoControl;
import com.uiui.zyos.network.api.UserInfoControl;
import com.uiui.zyos.network.api.uiuios.CheckUpdateApi;
import com.uiui.zyos.network.interceptor.RepeatRequestInterceptor;
@@ -48,6 +51,7 @@ import com.uiui.zyos.utils.OpenApkUtils;
import java.io.File;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -61,8 +65,11 @@ import io.reactivex.rxjava3.schedulers.Schedulers;
import io.reactivex.rxjava3.subjects.BehaviorSubject;
import okhttp3.Cache;
import okhttp3.Headers;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
@@ -197,6 +204,18 @@ public class NetInterfaceManager {
return mOkHttpClient;
}
public static RequestBody convertToRequestBody(Object param) {
MediaType mediaType = MediaType.Companion.parse("text/plain");
RequestBody requestBody = RequestBody.Companion.create(String.valueOf(param), mediaType);
return requestBody;
}
public static RequestBody convertToJsonRequestBody(String param) {
MediaType mediaType = MediaType.Companion.parse("application/json; charset=utf-8");
RequestBody requestBody = RequestBody.Companion.create(String.valueOf(param), mediaType);
return requestBody;
}
/**
* 检查更新
*
@@ -239,6 +258,24 @@ public class NetInterfaceManager {
.observeOn(AndroidSchedulers.mainThread());
}
public Observable<BaseResponse> getUpdateInfoObservable(Map<String, String> params) {
String json = GsonUtils.toJSONString(params);
RequestBody body = convertToJsonRequestBody(json);
return mRetrofit.create(UpdateInfoControl.class)
.updateUserInfo(body)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable<BaseResponse> getUpdateInfoObservable(Map<String, String> params, MultipartBody.Part multipartBody) {
String json = GsonUtils.toJSONString(params);
RequestBody requestBody = convertToJsonRequestBody(json);
return mRetrofit.create(UpdateInfoControl.class)
.updateUserInfo(requestBody, multipartBody)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable<BaseResponse> getRunningAppObservable(String json) {
return mRetrofit.create(RunNewApp.class)
.sendRunningInfo(RemoteManager.getInstance().getSerial(), json)
@@ -310,6 +347,13 @@ public class NetInterfaceManager {
.observeOn(AndroidSchedulers.mainThread());
}
public Observable<BaseResponse<PhraseContent>> getPhraseObservable() {
return mRetrofit.create(PhraseApi.class)
.getPhrase(RemoteManager.getInstance().getSerial())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
/*
*
* execution
@@ -390,7 +434,6 @@ public class NetInterfaceManager {
if (userInfoBaseResponse.code == 200) {
mMMKV.encode(CommonConfig.isLogined, 1);
SnInfo snInfo = userInfoBaseResponse.data;
mMMKV.encode("sn_id", snInfo.getId());
if (!TextUtils.isEmpty(snInfo.getSn_name())) {
mMMKV.encode("USERINFO_NAME", snInfo.getSn_name());
}

View File

@@ -7,6 +7,9 @@ public class UrlAddress {
public static final String SNINFO = "sn/getSnInfo";
/*获取用户头像和信息*/
public static final String GET_USER_AVATAR_INFO = "sn/getUserAvatarInfo";
/*修改设备个人信息*/
public static final String UPDATE_INFO = "sn/update-info";
/*获取统计*/
public static final String GET_STUDY_STAT = "Sn/getStudyStat";
/*上传地址信息*/
@@ -28,6 +31,8 @@ public class UrlAddress {
public static final String GET_HOMEWORK = "homework/index";
/*家庭作业详情*/
public static final String GET_HOMEWORK_DETAIL = "homework/show";
/*获取桌面短语*/
public static final String GET_PHRASES = "other/phrase";
/*网课模式*/
public final static String GET_CLOUD_LESSON = "Control/getCloudLessonSetting";

View File

@@ -0,0 +1,16 @@
package com.uiui.zyos.network.api;
import com.uiui.zyos.bean.BaseResponse;
import com.uiui.zyos.bean.PhraseContent;
import com.uiui.zyos.network.UrlAddress;
import io.reactivex.rxjava3.core.Observable;
import retrofit2.http.GET;
import retrofit2.http.Query;
public interface PhraseApi {
@GET(UrlAddress.GET_PHRASES)
Observable<BaseResponse<PhraseContent>> getPhrase(
@Query("sn") String sn
);
}

View File

@@ -0,0 +1,26 @@
package com.uiui.zyos.network.api;
import com.uiui.zyos.bean.BaseResponse;
import com.uiui.zyos.bean.UserAvatarInfo;
import com.uiui.zyos.network.UrlAddress;
import io.reactivex.rxjava3.core.Observable;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
public interface UpdateInfoControl {
@POST(UrlAddress.UPDATE_INFO)
Observable<BaseResponse> updateUserInfo(@Body RequestBody requestBody);
@Multipart
@POST(UrlAddress.UPDATE_INFO)
Observable<BaseResponse> updateUserInfo(
@Body RequestBody requestBody,
@Part MultipartBody.Part body);
}

View File

@@ -9,6 +9,7 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Binder;
import android.os.Build;
@@ -20,6 +21,7 @@ import androidx.annotation.RequiresApi;
import androidx.core.content.FileProvider;
import com.uiui.zyos.BuildConfig;
import com.uiui.zyos.R;
import com.uiui.zyos.bean.AppUpdateInfo;
import com.uiui.zyos.bean.DesktopIcon;
import com.uiui.zyos.manager.RemoteManager;
@@ -719,4 +721,65 @@ public class ApkUtils {
e.printStackTrace();
}
}
public static Drawable getAppDrawable(Context context, String pkg) {
PackageManager pm = context.getPackageManager();
PackageInfo packageInfo = null;
try {
packageInfo = pm.getPackageInfo(pkg, 0);
} catch (Exception e) {
Log.e(TAG, "getAppDrawable: ");
}
if (packageInfo != null) {
return packageInfo.applicationInfo.loadIcon(pm);
} else {
return context.getDrawable(R.mipmap.ic_launcher);
}
}
public static Drawable getAppDrawable(Context context, String pkg, int resId) {
PackageManager pm = context.getPackageManager();
PackageInfo packageInfo = null;
try {
packageInfo = pm.getPackageInfo(pkg, 0);
} catch (Exception e) {
Log.e(TAG, "getAppDrawable: ");
}
if (packageInfo != null) {
return packageInfo.applicationInfo.loadIcon(pm);
} else {
return context.getDrawable(resId);
}
}
public static String getAppName(Context context, String pkg) {
PackageManager pm = context.getPackageManager();
ApplicationInfo applicationInfo = null;
try {
applicationInfo = pm.getApplicationInfo(pkg, 0);
} catch (Exception e) {
Log.e(TAG, "getAppName: " + e.getMessage());
}
if (applicationInfo != null) {
return applicationInfo.loadLabel(pm).toString();
} else {
return context.getString(R.string.app_name);
}
}
public static String getAppName(Context context, String pkg, String defaultName) {
PackageManager pm = context.getPackageManager();
ApplicationInfo applicationInfo = null;
try {
applicationInfo = pm.getApplicationInfo(pkg, 0);
} catch (Exception e) {
Log.e(TAG, "getAppName: " + e.getMessage());
}
if (applicationInfo != null) {
return applicationInfo.loadLabel(pm).toString();
} else {
return defaultName;
}
}
}

View File

@@ -16,6 +16,7 @@ import androidx.core.content.ContextCompat;
import com.arialyy.aria.core.Aria;
import com.uiui.zyos.bean.AppUpdateInfo;
import com.uiui.zyos.bean.AriaDownloadInfo;
import com.uiui.zyos.bean.HomeworkBean;
import com.uiui.zyos.gson.GsonUtils;
import java.io.File;
@@ -265,4 +266,19 @@ public class FileUtil {
.create(); //启动下载}
}
}
public static void ariaDownloadTestPaper(Context context, String url, HomeworkBean homeworkBean) {
String fileName = getFileNamefromURL(url);
File file = new File(getDownLoadPath(context) + fileName);
if (file.exists() && !file.isDirectory()) {
Log.e(TAG, "ariaDownload: " + "file exists");
} else {
Aria.download(context)
.load(url) //读取下载地址
.setFilePath(getDownLoadPath(context) + fileName)
.ignoreFilePathOccupy()
.setExtendField(GsonUtils.toJSONString(homeworkBean))
.create(); //启动下载}
}
}
}

View File

@@ -0,0 +1,221 @@
package com.uiui.zyos.utils;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.provider.MediaStore;
import android.text.TextUtils;
import android.util.Log;
import android.webkit.MimeTypeMap;
import androidx.annotation.RequiresApi;
import androidx.core.content.FileProvider;
import com.uiui.zyos.BuildConfig;
import java.io.File;
import java.util.HashMap;
import java.util.Locale;
public class OpenFileUtil {
public static void openFile(Context context, String filePath) {
File file = new File(filePath);
openFile(context, file);
}
public static void openFile(Context context, File file) {
Intent intent = new Intent(Intent.ACTION_VIEW);
//intent.addCategory(Intent.CATEGORY_DEFAULT);
Uri uriForFile;
if (Build.VERSION.SDK_INT > 23) {
//Android 7.0之后
uriForFile = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".FileProvider", file);
intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);//给目标文件临时授权
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//给目标文件临时授权
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
} else {
uriForFile = Uri.fromFile(file);
}
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//系统会检查当前所有已创建的Task中是否有该要启动的Activity的Task;
// 若有则在该Task上创建Activity若没有则新建具有该Activity属性的Task并在该新建的Task上创建Activity。
intent.setDataAndType(uriForFile, getMimeTypeFromFile(file));
context.startActivity(intent);
}
/**
* 使用自定义方法获得文件的MIME类型
*/
private static String getMimeTypeFromFile(File file) {
String type = "*/*";
String fName = file.getName();
//获取后缀名前的分隔符"."在fName中的位置。
int dotIndex = fName.lastIndexOf(".");
if (dotIndex > 0) {
//获取文件的后缀名
String end = fName.substring(dotIndex, fName.length()).toLowerCase(Locale.getDefault());
//在MIME和文件类型的匹配表中找到对应的MIME类型。
HashMap<String, String> map = MyMimeMap.getMimeMap();
if (!TextUtils.isEmpty(end) && map.keySet().contains(end)) {
type = map.get(end);
}
}
return type;
}
public static class MyMimeMap {
private static final HashMap<String, String> mapSimple = new HashMap<>();
/**
* 常用"文件扩展名—MIME类型"匹配表。
* 注意此表并不全也并不是唯一的就像有人喜欢用浏览器打开TXT一样你可以根据自己的爱好自定义。
*/
public static HashMap<String, String> getMimeMap() {
if (mapSimple.size() == 0) {
mapSimple.put(".3gp", "video/3gpp");
mapSimple.put(".apk", "application/vnd.android.package-archive");
mapSimple.put(".asf", "video/x-ms-asf");
mapSimple.put(".avi", "video/x-msvideo");
mapSimple.put(".bin", "application/octet-stream");
mapSimple.put(".bmp", "image/bmp");
mapSimple.put(".c", "text/plain");
mapSimple.put(".chm", "application/x-chm");
mapSimple.put(".class", "application/octet-stream");
mapSimple.put(".conf", "text/plain");
mapSimple.put(".cpp", "text/plain");
mapSimple.put(".doc", "application/msword");
mapSimple.put(".docx", "application/msword");
mapSimple.put(".exe", "application/octet-stream");
mapSimple.put(".gif", "image/gif");
mapSimple.put(".gtar", "application/x-gtar");
mapSimple.put(".gz", "application/x-gzip");
mapSimple.put(".h", "text/plain");
mapSimple.put(".htm", "text/html");
mapSimple.put(".html", "text/html");
mapSimple.put(".jar", "application/java-archive");
mapSimple.put(".java", "text/plain");
mapSimple.put(".jpeg", "image/jpeg");
mapSimple.put(".jpg", "image/jpeg");
mapSimple.put(".js", "application/x-javascript");
mapSimple.put(".log", "text/plain");
mapSimple.put(".m3u", "audio/x-mpegurl");
mapSimple.put(".m4a", "audio/mp4a-latm");
mapSimple.put(".m4b", "audio/mp4a-latm");
mapSimple.put(".m4p", "audio/mp4a-latm");
mapSimple.put(".m4u", "video/vnd.mpegurl");
mapSimple.put(".m4v", "video/x-m4v");
mapSimple.put(".mov", "video/quicktime");
mapSimple.put(".mp2", "audio/x-mpeg");
mapSimple.put(".mp3", "audio/x-mpeg");
mapSimple.put(".mp4", "video/mp4");
mapSimple.put(".mpc", "application/vnd.mpohun.certificate");
mapSimple.put(".mpe", "video/mpeg");
mapSimple.put(".mpeg", "video/mpeg");
mapSimple.put(".mpg", "video/mpeg");
mapSimple.put(".mpg4", "video/mp4");
mapSimple.put(".mpga", "audio/mpeg");
mapSimple.put(".msg", "application/vnd.ms-outlook");
mapSimple.put(".ogg", "audio/ogg");
mapSimple.put(".pdf", "application/pdf");
mapSimple.put(".png", "image/png");
mapSimple.put(".pps", "application/vnd.ms-powerpoint");
mapSimple.put(".ppt", "application/vnd.ms-powerpoint");
mapSimple.put(".pptx", "application/vnd.ms-powerpoint");
mapSimple.put(".prop", "text/plain");
mapSimple.put(".rar", "application/x-rar-compressed");
mapSimple.put(".rc", "text/plain");
mapSimple.put(".rmvb", "audio/x-pn-realaudio");
mapSimple.put(".rtf", "application/rtf");
mapSimple.put(".sh", "text/plain");
mapSimple.put(".tar", "application/x-tar");
mapSimple.put(".tgz", "application/x-compressed");
mapSimple.put(".txt", "text/plain");
mapSimple.put(".wav", "audio/x-wav");
mapSimple.put(".wma", "audio/x-ms-wma");
mapSimple.put(".wmv", "audio/x-ms-wmv");
mapSimple.put(".wps", "application/vnd.ms-works");
mapSimple.put(".xml", "text/plain");
mapSimple.put(".xls", "application/vnd.ms-excel");
mapSimple.put(".xlsx", "application/vnd.ms-excel");
mapSimple.put(".z", "application/x-compress");
mapSimple.put(".zip", "application/zip");
mapSimple.put("", "*/*");
}
return mapSimple;
}
}
public static String getFileExtension(String fileName) {
int dotIndex = fileName.lastIndexOf('.');
if (dotIndex < 0) {
return "";
}
return fileName.substring(dotIndex + 1);
}
// Android获取一个用于打开PDF文件的intent
public static Intent getPdfFileIntent(Context context, String path) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
File file = new File(path);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_PREFIX_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
Uri uri = FileProvider.getUriForFile(context, "com.video.stos.FileProvider", file);
intent.setDataAndType(uri, "application/pdf");
} else {
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
}
return intent;
}
public static final String DOWNLOAD_URI = "content://com.android.externalstorage.documents/document/primary:Download/";
// Android获取一个用于打开Word文件的intent
public static Intent getWordFileIntent(Context context, File file) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);
Uri uriForFile;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
//Android 7.0之后
// uriForFile = FileProvider.getUriForFile(context, "com.video.stos.FileProvider", file);
uriForFile = getFileUri(context, file.getAbsolutePath());
// intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);//给目标文件临时授权
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//给目标文件临时授权
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
// intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
} else {
uriForFile = Uri.fromFile(file);
}
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//系统会检查当前所有已创建的Task中是否有该要启动的Activity的Task;
Log.e("lhl", "uri+" + uriForFile + "");
//Uri uri = Uri.fromFile(new File(param));
intent.setDataAndType(uriForFile, "application/pdf");
return intent;
}
@RequiresApi(api = Build.VERSION_CODES.Q)
public static Uri getFileUri(Context context, String filePath) {
Log.e("getFileUri", "getFileUri: " + MediaStore.Downloads.EXTERNAL_CONTENT_URI);
Cursor cursor = context.getContentResolver().query(MediaStore.Downloads.EXTERNAL_CONTENT_URI,
new String[]{MediaStore.Downloads._ID}, MediaStore.Downloads.DATA + "=? ",
new String[]{filePath}, null);
if (cursor != null && cursor.moveToFirst()) {
int id = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns._ID));
Uri baseUri = Uri.parse("content://media/external/downloads");
return Uri.withAppendedPath(baseUri, "" + id);
} else {
ContentValues values = new ContentValues();
values.put(MediaStore.Downloads.DATA, filePath);
return context.getContentResolver().insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, values);
}
}
}

View File

@@ -42,6 +42,12 @@ public class TimeUtils {
return sdf.format(date);
}
public static String transferSecondgToDate(long second) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(second * 1000);
return sdf.format(date);
}
public static String getDateAndWeek(Long millisecond) {
SimpleDateFormat sdf = new SimpleDateFormat("MM月dd日");
Date date = new Date(millisecond);
@@ -49,6 +55,18 @@ public class TimeUtils {
return dateString + "\t" + getWeek();
}
public static String getHomeworkTime(String timeString) {
SimpleDateFormat old = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
try {
date = old.parse(timeString);
} catch (ParseException e) {
e.printStackTrace();
}
SimpleDateFormat sdf = new SimpleDateFormat("MM月dd日 HH:mm");
return sdf.format(date);
}
public static String formatTime(Long s) {
if (s == 0) {
return "0分钟";
@@ -74,9 +92,9 @@ public class TimeUtils {
if (minute > 0) {
sb.append(minute + "");
}
if (second > 0) {
sb.append(second + "");
}
// if (second > 0) {
// sb.append(second + "秒");
// }
// if (milliSecond > 0) {
// sb.append(milliSecond + "毫秒");
// }

View File

@@ -32,8 +32,15 @@ import com.uiui.zyos.R;
import com.uiui.zyos.manager.RemoteManager;
import java.io.File;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.io.Reader;
import java.lang.reflect.Method;
import java.net.NetworkInterface;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Utils {
@@ -263,4 +270,115 @@ public class Utils {
context.finish();
System.exit(0);
}
/**
* 获取系统配置信息
*
* @param key
* @param defaultValue
* @return
*/
public static String getProperty(String key, String defaultValue) {
String value = defaultValue;
try {
Class<?> c = Class.forName("android.os.SystemProperties");
Method get = c.getMethod("get", String.class, String.class);
value = (String) (get.invoke(c, key, "unknown"));
} catch (Exception e) {
e.printStackTrace();
} finally {
return value;
}
}
public static String getCustomVersion() {
return getProperty("ro.build.display.id", "获取失败");
// return getProperty("ro.custom.build.version", "获取失败");
// return getProperty("ro.custom.build.version", "获取失败");
}
/**
* 获取手机的MAC地址
*
* @return
*/
public static String getMac() {
String str = "";
String macSerial = "";
try {
Process pp = Runtime.getRuntime().exec(
"cat /sys/class/net/wlan0/address");
InputStreamReader ir = new InputStreamReader(pp.getInputStream());
LineNumberReader input = new LineNumberReader(ir);
for (; null != str; ) {
str = input.readLine();
if (str != null) {
macSerial = str.trim();// 去空格
break;
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
if (macSerial == null || "".equals(macSerial)) {
try {
return loadFileAsString("/sys/class/net/eth0/address")
.toUpperCase().substring(0, 17);
} catch (Exception e) {
e.printStackTrace();
macSerial = getAndroid7MAC();
}
}
return macSerial;
}
/**
* 兼容7.0获取不到的问题
*
* @return
*/
public static String getAndroid7MAC() {
try {
List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface nif : all) {
if (!"wlan0".equalsIgnoreCase(nif.getName()))
continue;
byte[] macBytes = nif.getHardwareAddress();
if (macBytes == null) {
return "";
}
StringBuilder res1 = new StringBuilder();
for (byte b : macBytes) {
res1.append(String.format("%02X:", b));
}
if (res1.length() > 0) {
res1.deleteCharAt(res1.length() - 1);
}
return res1.toString();
}
} catch (Exception ex) {
Log.e(TAG, "getAndroid7MAC: " + ex.getMessage());
}
return "";
}
public static String loadFileAsString(String fileName) throws Exception {
FileReader reader = new FileReader(fileName);
String text = loadReaderAsString(reader);
reader.close();
return text;
}
public static String loadReaderAsString(Reader reader) throws Exception {
StringBuilder builder = new StringBuilder();
char[] buffer = new char[4096];
int readLength = reader.read(buffer);
while (readLength >= 0) {
builder.append(buffer, 0, readLength);
readLength = reader.read(buffer);
}
return builder.toString();
}
}

View File

@@ -1,21 +1,69 @@
package com.uiui.zyos.view;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.databinding.BindingAdapter;
import com.bumptech.glide.Glide;
import com.uiui.zyos.R;
import com.uiui.zyos.utils.GlideLoadUtils;
import com.uiui.zyos.utils.TimeUtils;
public class ImageViewAdapter {
@BindingAdapter("android:src")
public static void setSrc(ImageView view, Bitmap bitmap) {
view.setImageBitmap(bitmap);
}
@BindingAdapter("android:src")
public static void setSrc(ImageView view, int resId) {
view.setImageResource(resId);
}
@BindingAdapter("imageUrl")
public static void setSrc(ImageView imageView, String url) {
Glide.with(imageView.getContext())
.load(url)
.error(R.mipmap.ic_launcher)
.centerCrop()
.into(imageView);
}
/**
* 自定义设置图片属性 - 在匹配时自定义命名空间会被忽略
*/
@BindingAdapter({"imageUrl"})
public static void loadImage(ImageView imageView, int id) {
@BindingAdapter({"imageUrl", "error"})
public static void loadImage(ImageView imageView, String url, Drawable error) {
Glide.with(imageView.getContext())
.load(id)
.load(url)
.error(error)
.into(imageView);
}
@BindingAdapter({"setTime"})
public static void setTime(TextView textView, long timestamp) {
textView.setText(TimeUtils.transferSecondgToDate(timestamp));
}
@BindingAdapter({"setTemp"})
public static void setTemp(TextView textView, String temp) {
if (TextUtils.isEmpty(temp)) {
textView.setText("N/A ℃");
} else {
textView.setText(temp + "");
}
}
// @BindingAdapter({"setTempIcon"})
// public static void setTempIcon(ImageView imageView, String code) {
// String imageName = "he" + code;
// Context context = imageView.getContext();
// int resId = context.getResources().getIdentifier(imageName, "drawable", context.getPackageName());
// GlideLoadUtils.getInstance().glideLoad(context, resId, imageView, R.drawable.he999);
// }
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 250 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 483 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

View File

@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/actions_item_bg_s" android:state_focused="true" />
<item android:drawable="@color/actions_item_pressed" android:state_pressed="true" />
<item>
<shape>
<solid android:color="@color/colorPrimary" />
</shape>
</item>
</selector>

View File

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

View File

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

View File

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

View File

@@ -1,17 +0,0 @@
<?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:bottomLeftRadius="16dp"
android:bottomRightRadius="16dp"
android:topLeftRadius="16dp"
android:topRightRadius="16dp" />
<padding
android:bottom="4dp"
android:left="4dp"
android:right="4dp"
android:top="4dp" />
</shape>

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,11 @@
<?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="@dimen/dp_32" />
<padding
android:left="@dimen/dp_10"
android:right="@dimen/dp_10" />
</shape>

View File

@@ -0,0 +1,19 @@
<?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:topLeftRadius="@dimen/dp_16"
android:topRightRadius="@dimen/dp_16"
android:bottomLeftRadius="@dimen/dp_16"
android:bottomRightRadius="@dimen/dp_16" />
<padding
android:bottom="@dimen/dp_3"
android:left="@dimen/dp_10"
android:right="@dimen/dp_10"
android:top="@dimen/dp_3" />
</shape>

View File

@@ -3,11 +3,17 @@
xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 内部颜色 -->
<solid
android:color="#4880ff" />
android:color="@color/default_blue" />
<!-- 圆角的幅度 -->
<corners
android:topLeftRadius="24dp"
android:topRightRadius="24dp"
android:bottomLeftRadius="24dp"
android:bottomRightRadius="24dp" />
android:topLeftRadius="@dimen/dp_16"
android:topRightRadius="@dimen/dp_16"
android:bottomLeftRadius="@dimen/dp_16"
android:bottomRightRadius="@dimen/dp_16" />
<padding
android:bottom="@dimen/dp_2"
android:left="@dimen/dp_8"
android:right="@dimen/dp_8"
android:top="@dimen/dp_2" />
</shape>

View File

@@ -1,13 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android">
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 内部颜色 -->
<solid
android:color="#3e76f6" />
<solid android:color="#3e76f6" />
<!-- 圆角的幅度 -->
<corners
android:topLeftRadius="24dp"
android:topRightRadius="24dp"
android:bottomLeftRadius="24dp"
android:bottomRightRadius="24dp" />
android:bottomLeftRadius="@dimen/dp_16"
android:bottomRightRadius="@dimen/dp_16"
android:topLeftRadius="@dimen/dp_16"
android:topRightRadius="@dimen/dp_16" />
<padding
android:bottom="@dimen/dp_2"
android:left="@dimen/dp_8"
android:right="@dimen/dp_8"
android:top="@dimen/dp_2" />
</shape>

View File

@@ -1,18 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 内部颜色 -->
<solid android:color="#444444" />
<solid android:color="@color/default_blue" />
<!-- 圆角的幅度 -->
<corners
android:bottomLeftRadius="@dimen/dp_8"
android:bottomRightRadius="@dimen/dp_8"
android:topLeftRadius="@dimen/dp_8"
android:topRightRadius="@dimen/dp_8" />
android:bottomLeftRadius="@dimen/dp_6"
android:bottomRightRadius="@dimen/dp_6"
android:topLeftRadius="@dimen/dp_6"
android:topRightRadius="@dimen/dp_6" />
<padding
android:right="@dimen/dp_8"
android:left="@dimen/dp_8"
android:top="@dimen/dp_8"
android:bottom="@dimen/dp_8"
/>
android:left="@dimen/dp_8"
android:right="@dimen/dp_8"
android:top="@dimen/dp_8" />
</shape>

View File

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

View File

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

View File

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

View File

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

Some files were not shown because too many files have changed in this diff Show More