diff --git a/app/build.gradle b/app/build.gradle
index b5457d5..cd4927d 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -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 {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5d7d10d..b7add84 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -26,7 +26,7 @@
-
+
@@ -154,10 +154,29 @@
android:launchMode="singleTask"
android:screenOrientation="userLandscape"
android:theme="@style/DialogCloseOnTouchOutside" />
+
+
+
+
+
{
+
+ 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() {
+ @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 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) {
+
+ }
+ }
+}
diff --git a/app/src/main/java/com/uiui/zyos/activity/edit/EditViewModel.java b/app/src/main/java/com/uiui/zyos/activity/edit/EditViewModel.java
new file mode 100644
index 0000000..499b7a5
--- /dev/null
+++ b/app/src/main/java/com/uiui/zyos/activity/edit/EditViewModel.java
@@ -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 {
+
+ @Override
+ public ActivityEditBinding getVDBinding() {
+ return binding;
+ }
+
+ @Override
+ public void onDestroy() {
+
+ }
+
+ public MutableLiveData mSuccessfulData = new MutableLiveData<>();
+
+ public void updateInfo(Map params) {
+ if (!ActivationUtil.isActivation(getCtx())) {
+ return;
+ }
+ NetInterfaceManager.getInstance().getUpdateInfoObservable(params)
+ .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
+ .subscribe(new Observer() {
+ @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: ");
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/com/uiui/zyos/activity/homework/HomeworkActivity.java b/app/src/main/java/com/uiui/zyos/activity/homework/HomeworkActivity.java
new file mode 100644
index 0000000..4d22fc7
--- /dev/null
+++ b/app/src/main/java/com/uiui/zyos/activity/homework/HomeworkActivity.java
@@ -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 {
+ private static final String TAG = "HomeworkActivity";
+
+ private String[] title = new String[]{"语文", "数学", "英语", "物理", "化学", "地理", "生物", "政治", "历史"};
+
+ private int defaultCurrent = 0;
+
+ private FragmentManager mFragmentManager;
+ private BaseFragmentPagerAdapter mBaseFragmentPagerAdapter;
+ private List 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>() {
+ @Override
+ public void onChanged(List homeWorkList) {
+ if (homeWorkList != null && homeWorkList.size() != 0) {
+ List chineseHomeWorkList = homeWorkList.stream().filter(homeWork -> "语文".equals(homeWork.getSubject().getName())).collect(Collectors.toList());
+ mChineseFragment.setHomeWorkList(chineseHomeWorkList);
+ List mathHomeWorkList = homeWorkList.stream().filter(homeWork -> "数学".equals(homeWork.getSubject().getName())).collect(Collectors.toList());
+ mMathFragment.setHomeWorkList(mathHomeWorkList);
+ List englishHomeWorkList = homeWorkList.stream().filter(homeWork -> "英语".equals(homeWork.getSubject().getName())).collect(Collectors.toList());
+ mEnglishFragment.setHomeWorkList(englishHomeWorkList);
+ List physicsHomeWorkList = homeWorkList.stream().filter(homeWork -> "物理".equals(homeWork.getSubject().getName())).collect(Collectors.toList());
+ mPhysicsFragment.setHomeWorkList(physicsHomeWorkList);
+ List chemicalHomeWorkList = homeWorkList.stream().filter(homeWork -> "化学".equals(homeWork.getSubject().getName())).collect(Collectors.toList());
+ mChemicalFragment.setHomeWorkList(chemicalHomeWorkList);
+ List geographyHomeWorkList = homeWorkList.stream().filter(homeWork -> "地理".equals(homeWork.getSubject().getName())).collect(Collectors.toList());
+ mGeographyFragment.setHomeWorkList(geographyHomeWorkList);
+ List biologyHomeWorkList = homeWorkList.stream().filter(homeWork -> "生物".equals(homeWork.getSubject().getName())).collect(Collectors.toList());
+ mBiologyFragment.setHomeWorkList(biologyHomeWorkList);
+ List politicsHomeWorkList = homeWorkList.stream().filter(homeWork -> "政治".equals(homeWork.getSubject().getName())).collect(Collectors.toList());
+ mPoliticsFragment.setHomeWorkList(politicsHomeWorkList);
+ List 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();
+ }
+ }
+}
diff --git a/app/src/main/java/com/uiui/zyos/activity/homework/HomeworkViewModel.java b/app/src/main/java/com/uiui/zyos/activity/homework/HomeworkViewModel.java
new file mode 100644
index 0000000..eb97028
--- /dev/null
+++ b/app/src/main/java/com/uiui/zyos/activity/homework/HomeworkViewModel.java
@@ -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 {
+
+ @Override
+ public ActivityHomeworkBinding getVDBinding() {
+ return binding;
+ }
+
+ @Override
+ public void onDestroy() {
+
+ }
+
+ public MutableLiveData> 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>>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("getHomework", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse> listBaseResponse) {
+ Log.e("getHomework", "onNext: " + listBaseResponse);
+ List 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: ");
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/com/uiui/zyos/activity/main/MainActivity.java b/app/src/main/java/com/uiui/zyos/activity/main/MainActivity.java
index 7924662..e0afa37 100644
--- a/app/src/main/java/com/uiui/zyos/activity/main/MainActivity.java
+++ b/app/src/main/java/com/uiui/zyos/activity/main/MainActivity.java
@@ -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 implements RemoteManager.ConnectedListener {
private static final String TAG = "MainActivity";
@@ -100,6 +94,9 @@ public class MainActivity extends BaseMvvmActivity() {
- @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() {
+// @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 {
+ 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() {
+ @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 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();
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/uiui/zyos/activity/selectegrade/SelecteGradeViewModel.java b/app/src/main/java/com/uiui/zyos/activity/selectegrade/SelecteGradeViewModel.java
new file mode 100644
index 0000000..e3f95e2
--- /dev/null
+++ b/app/src/main/java/com/uiui/zyos/activity/selectegrade/SelecteGradeViewModel.java
@@ -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 {
+
+ @Override
+ public ActivitySelecteGradeBinding getVDBinding() {
+ return binding;
+ }
+
+ @Override
+ public void onDestroy() {
+
+ }
+
+ public MutableLiveData mSuccessfulData = new MutableLiveData<>();
+
+ public void updateInfo(Map params) {
+ if (!ActivationUtil.isActivation(getCtx())) {
+
+ return;
+ }
+ NetInterfaceManager.getInstance().getUpdateInfoObservable(params)
+ .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
+ .subscribe(new Observer() {
+ @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: ");
+ }
+ });
+ }
+
+
+}
diff --git a/app/src/main/java/com/uiui/zyos/activity/user/UserActivity.java b/app/src/main/java/com/uiui/zyos/activity/user/UserActivity.java
new file mode 100644
index 0000000..82064a8
--- /dev/null
+++ b/app/src/main/java/com/uiui/zyos/activity/user/UserActivity.java
@@ -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 {
+ 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() {
+ @Override
+ public void onChanged(UserAvatarInfo userAvatarInfo) {
+ mViewDataBinding.setUserAvatarInfo(userAvatarInfo);
+ }
+ });
+
+ mViewModel.getAppUpdateInfoData().observe(this, new Observer() {
+ @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() {
+ @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() {
+ @Override
+ public void onResult(ArrayList 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 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();
+ }
+ }
+}
diff --git a/app/src/main/java/com/uiui/zyos/activity/user/UserViewModel.java b/app/src/main/java/com/uiui/zyos/activity/user/UserViewModel.java
new file mode 100644
index 0000000..a3ad298
--- /dev/null
+++ b/app/src/main/java/com/uiui/zyos/activity/user/UserViewModel.java
@@ -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 {
+ private static final String TAG = "UserViewModel";
+
+
+ @Override
+ public ActivityUserBinding getVDBinding() {
+ return binding;
+ }
+
+ @Override
+ public void onDestroy() {
+
+ }
+
+ public MutableLiveData mUserAvatarInfoData = new MutableLiveData<>();
+
+ public void getUserAvatarInfo() {
+ NetInterfaceManager.getInstance()
+ .getUserAvatarInfoControl()
+ .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
+ .subscribe(new Observer>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("getUserAvatarInfo", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse 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 mAppUpdateInfoData = new MutableLiveData<>();
+
+ public MutableLiveData getAppUpdateInfoData() {
+ return mAppUpdateInfoData;
+ }
+
+ public void checkUpdate() {
+ NetInterfaceManager.getInstance().getCheckUpdateObservable(BuildConfig.APPLICATION_ID)
+ .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
+ .subscribe(new Observer>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("checkUpdate", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse 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 mSuccessfulData = new MutableLiveData<>();
+
+ public void updateInfo(Map params, MultipartBody.Part multipartBody) {
+ if (!ActivationUtil.isActivation(getCtx())) {
+
+ return;
+ }
+ NetInterfaceManager.getInstance().getUpdateInfoObservable(params, multipartBody)
+ .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
+ .subscribe(new Observer() {
+ @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: ");
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/com/uiui/zyos/adapter/HomeworkAdapter.java b/app/src/main/java/com/uiui/zyos/adapter/HomeworkAdapter.java
deleted file mode 100644
index 1bf8e4c..0000000
--- a/app/src/main/java/com/uiui/zyos/adapter/HomeworkAdapter.java
+++ /dev/null
@@ -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 {
-
- private Context mContext;
- private List mHomeworkList;
-
- public void setHomeworkList(List 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);
- }
- }
-}
diff --git a/app/src/main/java/com/uiui/zyos/adapter/NewHomeworkAdapter.java b/app/src/main/java/com/uiui/zyos/adapter/NewHomeworkAdapter.java
index 79f4846..8b85a91 100644
--- a/app/src/main/java/com/uiui/zyos/adapter/NewHomeworkAdapter.java
+++ b/app/src/main/java/com/uiui/zyos/adapter/NewHomeworkAdapter.java
@@ -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 {
+ private static final String TAG = "NewHomeworkAdapter";
private Context mContext;
private List mHomeworkList;
@@ -37,11 +47,48 @@ public class NewHomeworkAdapter extends RecyclerView.Adapter homeworkList = new ArrayList<>();
homeworkList.add("暂时没有作业");
- mHomeworkAdapter.setHomeworkList(homeworkList);
+// mHomeworkAdapter.setHomeworkList(homeworkList);
mViewDataBinding.ivApp.setOnClickListener(new View.OnClickListener() {
@Override
diff --git a/app/src/main/java/com/uiui/zyos/fragment/content/ContentFragment.java b/app/src/main/java/com/uiui/zyos/fragment/content/ContentFragment.java
new file mode 100644
index 0000000..fcca8c1
--- /dev/null
+++ b/app/src/main/java/com/uiui/zyos/fragment/content/ContentFragment.java
@@ -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 {
+ 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 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 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 {
+
+ }
+
+}
diff --git a/app/src/main/java/com/uiui/zyos/fragment/content/ContentViewModel.java b/app/src/main/java/com/uiui/zyos/fragment/content/ContentViewModel.java
new file mode 100644
index 0000000..34eedca
--- /dev/null
+++ b/app/src/main/java/com/uiui/zyos/fragment/content/ContentViewModel.java
@@ -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 {
+
+ @Override
+ public FragmentContentBinding getVDBinding() {
+ return binding;
+ }
+
+ @Override
+ public void onDestroy() {
+
+ }
+}
diff --git a/app/src/main/java/com/uiui/zyos/fragment/user/UserFragment.java b/app/src/main/java/com/uiui/zyos/fragment/user/UserFragment.java
index 296484e..803bb39 100644
--- a/app/src/main/java/com/uiui/zyos/fragment/user/UserFragment.java
+++ b/app/src/main/java/com/uiui/zyos/fragment/user/UserFragment.java
@@ -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 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 stringIntegerHashMap = new HashMap<>();
WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
@@ -248,27 +196,19 @@ public class UserFragment extends BaseMvvmFragment 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() {
+ @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> 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> 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>>() {
@@ -206,8 +215,8 @@ public class UserViewModel extends BaseViewModel> listBaseResponse) {
Log.e("getHomework", "onNext: " + listBaseResponse);
- List homeworkBeans = listBaseResponse.data;
- mHomeworkBeanListData.setValue(homeworkBeans);
+ List homeworkBeans = listBaseResponse.data;
+ mHomeworkBeanListData.setValue(homeworkBeans);
}
@Override
@@ -221,4 +230,40 @@ public class UserViewModel extends BaseViewModel 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>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("getPhrase", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse 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: ");
+ }
+ });
+ }
}
diff --git a/app/src/main/java/com/uiui/zyos/fragment/usercenter/device/DeviceFragment.java b/app/src/main/java/com/uiui/zyos/fragment/usercenter/device/DeviceFragment.java
new file mode 100644
index 0000000..f31b6dc
--- /dev/null
+++ b/app/src/main/java/com/uiui/zyos/fragment/usercenter/device/DeviceFragment.java
@@ -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 {
+
+ 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));
+ }
+ }
+}
diff --git a/app/src/main/java/com/uiui/zyos/fragment/usercenter/device/DeviceViewModel.java b/app/src/main/java/com/uiui/zyos/fragment/usercenter/device/DeviceViewModel.java
new file mode 100644
index 0000000..cfc16cc
--- /dev/null
+++ b/app/src/main/java/com/uiui/zyos/fragment/usercenter/device/DeviceViewModel.java
@@ -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 {
+
+ @Override
+ public FragmentDeviceBinding getVDBinding() {
+ return binding;
+ }
+
+ @Override
+ public void onDestroy() {
+
+ }
+}
diff --git a/app/src/main/java/com/uiui/zyos/fragment/usercenter/info/InfoFragment.java b/app/src/main/java/com/uiui/zyos/fragment/usercenter/info/InfoFragment.java
new file mode 100644
index 0000000..bc45daf
--- /dev/null
+++ b/app/src/main/java/com/uiui/zyos/fragment/usercenter/info/InfoFragment.java
@@ -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 {
+
+ 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 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 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() {
+ @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() {
+ @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);
+ }
+
+ }
+
+}
diff --git a/app/src/main/java/com/uiui/zyos/fragment/usercenter/info/InfoViewModel.java b/app/src/main/java/com/uiui/zyos/fragment/usercenter/info/InfoViewModel.java
new file mode 100644
index 0000000..c8d6818
--- /dev/null
+++ b/app/src/main/java/com/uiui/zyos/fragment/usercenter/info/InfoViewModel.java
@@ -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 {
+
+ @Override
+ public FragmentInfoBinding getVDBinding() {
+ return binding;
+ }
+
+ @Override
+ public void onDestroy() {
+
+ }
+
+ public MutableLiveData mSnInfoData = new MutableLiveData<>();
+
+ public void getSnInfo() {
+ if (!ActivationUtil.isActivation(getCtx())) {
+
+ return;
+ }
+ NetInterfaceManager.getInstance().getsnInfoControl()
+ .compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY))
+ .subscribe(new Observer>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("getSnInfo", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse 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 mSuccessfulData = new MutableLiveData<>();
+
+ public void updateInfo(Map params) {
+ if (!ActivationUtil.isActivation(getCtx())) {
+
+ return;
+ }
+ NetInterfaceManager.getInstance().getUpdateInfoObservable(params)
+ .compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY))
+ .subscribe(new Observer() {
+ @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: ");
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/com/uiui/zyos/fragment/usercenter/parents/ParentsFragment.java b/app/src/main/java/com/uiui/zyos/fragment/usercenter/parents/ParentsFragment.java
new file mode 100644
index 0000000..d32604f
--- /dev/null
+++ b/app/src/main/java/com/uiui/zyos/fragment/usercenter/parents/ParentsFragment.java
@@ -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 {
+
+
+ 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");
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/uiui/zyos/fragment/usercenter/parents/ParentsViewModel.java b/app/src/main/java/com/uiui/zyos/fragment/usercenter/parents/ParentsViewModel.java
new file mode 100644
index 0000000..e53e9c3
--- /dev/null
+++ b/app/src/main/java/com/uiui/zyos/fragment/usercenter/parents/ParentsViewModel.java
@@ -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 {
+
+ @Override
+ public FragmentParentsBinding getVDBinding() {
+ return binding;
+ }
+
+ @Override
+ public void onDestroy() {
+
+ }
+}
diff --git a/app/src/main/java/com/uiui/zyos/network/NetInterfaceManager.java b/app/src/main/java/com/uiui/zyos/network/NetInterfaceManager.java
index 21616a0..d397d47 100644
--- a/app/src/main/java/com/uiui/zyos/network/NetInterfaceManager.java
+++ b/app/src/main/java/com/uiui/zyos/network/NetInterfaceManager.java
@@ -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 getUpdateInfoObservable(Map 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 getUpdateInfoObservable(Map 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 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> 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());
}
diff --git a/app/src/main/java/com/uiui/zyos/network/UrlAddress.java b/app/src/main/java/com/uiui/zyos/network/UrlAddress.java
index 7fb4ddc..d4cb995 100644
--- a/app/src/main/java/com/uiui/zyos/network/UrlAddress.java
+++ b/app/src/main/java/com/uiui/zyos/network/UrlAddress.java
@@ -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";
diff --git a/app/src/main/java/com/uiui/zyos/network/api/PhraseApi.java b/app/src/main/java/com/uiui/zyos/network/api/PhraseApi.java
new file mode 100644
index 0000000..5cc6649
--- /dev/null
+++ b/app/src/main/java/com/uiui/zyos/network/api/PhraseApi.java
@@ -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> getPhrase(
+ @Query("sn") String sn
+ );
+}
diff --git a/app/src/main/java/com/uiui/zyos/network/api/UpdateInfoControl.java b/app/src/main/java/com/uiui/zyos/network/api/UpdateInfoControl.java
new file mode 100644
index 0000000..ccb3247
--- /dev/null
+++ b/app/src/main/java/com/uiui/zyos/network/api/UpdateInfoControl.java
@@ -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 updateUserInfo(@Body RequestBody requestBody);
+
+ @Multipart
+ @POST(UrlAddress.UPDATE_INFO)
+ Observable updateUserInfo(
+ @Body RequestBody requestBody,
+ @Part MultipartBody.Part body);
+}
diff --git a/app/src/main/java/com/uiui/zyos/utils/ApkUtils.java b/app/src/main/java/com/uiui/zyos/utils/ApkUtils.java
index e91d6a4..b2a1bba 100644
--- a/app/src/main/java/com/uiui/zyos/utils/ApkUtils.java
+++ b/app/src/main/java/com/uiui/zyos/utils/ApkUtils.java
@@ -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;
+ }
+ }
+
}
diff --git a/app/src/main/java/com/uiui/zyos/utils/FileUtil.java b/app/src/main/java/com/uiui/zyos/utils/FileUtil.java
index db123db..2402b1a 100644
--- a/app/src/main/java/com/uiui/zyos/utils/FileUtil.java
+++ b/app/src/main/java/com/uiui/zyos/utils/FileUtil.java
@@ -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(); //启动下载}
+ }
+ }
}
diff --git a/app/src/main/java/com/uiui/zyos/utils/OpenFileUtil.java b/app/src/main/java/com/uiui/zyos/utils/OpenFileUtil.java
new file mode 100644
index 0000000..daa48e0
--- /dev/null
+++ b/app/src/main/java/com/uiui/zyos/utils/OpenFileUtil.java
@@ -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 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 mapSimple = new HashMap<>();
+
+ /**
+ * 常用"文件扩展名—MIME类型"匹配表。
+ * 注意,此表并不全,也并不是唯一的,就像有人喜欢用浏览器打开TXT一样,你可以根据自己的爱好自定义。
+ */
+ public static HashMap 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);
+ }
+ }
+}
+
diff --git a/app/src/main/java/com/uiui/zyos/utils/TimeUtils.java b/app/src/main/java/com/uiui/zyos/utils/TimeUtils.java
index ea39365..3f4ec5a 100644
--- a/app/src/main/java/com/uiui/zyos/utils/TimeUtils.java
+++ b/app/src/main/java/com/uiui/zyos/utils/TimeUtils.java
@@ -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 + "毫秒");
// }
diff --git a/app/src/main/java/com/uiui/zyos/utils/Utils.java b/app/src/main/java/com/uiui/zyos/utils/Utils.java
index b7ad482..183628b 100644
--- a/app/src/main/java/com/uiui/zyos/utils/Utils.java
+++ b/app/src/main/java/com/uiui/zyos/utils/Utils.java
@@ -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 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();
+ }
}
diff --git a/app/src/main/java/com/uiui/zyos/view/ImageViewAdapter.java b/app/src/main/java/com/uiui/zyos/view/ImageViewAdapter.java
index 357e125..09f4376 100644
--- a/app/src/main/java/com/uiui/zyos/view/ImageViewAdapter.java
+++ b/app/src/main/java/com/uiui/zyos/view/ImageViewAdapter.java
@@ -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);
+// }
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable-hdpi/actions_item_bg_s.9.png b/app/src/main/res/drawable-hdpi/actions_item_bg_s.9.png
deleted file mode 100644
index c2f3606..0000000
Binary files a/app/src/main/res/drawable-hdpi/actions_item_bg_s.9.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/bt_back.png b/app/src/main/res/drawable-hdpi/bt_back.png
new file mode 100644
index 0000000..b9e3ed0
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/bt_back.png differ
diff --git a/app/src/main/res/drawable-hdpi/close_icon.png b/app/src/main/res/drawable-hdpi/close_icon.png
deleted file mode 100644
index b372d35..0000000
Binary files a/app/src/main/res/drawable-hdpi/close_icon.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_calculator2.png b/app/src/main/res/drawable-hdpi/com_android_calculator2.png
deleted file mode 100644
index 31402e7..0000000
Binary files a/app/src/main/res/drawable-hdpi/com_android_calculator2.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_calendar.png b/app/src/main/res/drawable-hdpi/com_android_calendar.png
deleted file mode 100644
index 0065e28..0000000
Binary files a/app/src/main/res/drawable-hdpi/com_android_calendar.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_clean.png b/app/src/main/res/drawable-hdpi/com_android_clean.png
deleted file mode 100644
index fc0fdf2..0000000
Binary files a/app/src/main/res/drawable-hdpi/com_android_clean.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_contacts.png b/app/src/main/res/drawable-hdpi/com_android_contacts.png
deleted file mode 100644
index b204ea0..0000000
Binary files a/app/src/main/res/drawable-hdpi/com_android_contacts.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_deskclock.png b/app/src/main/res/drawable-hdpi/com_android_deskclock.png
deleted file mode 100644
index 81bf96f..0000000
Binary files a/app/src/main/res/drawable-hdpi/com_android_deskclock.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_dialer.png b/app/src/main/res/drawable-hdpi/com_android_dialer.png
deleted file mode 100644
index 5bf5306..0000000
Binary files a/app/src/main/res/drawable-hdpi/com_android_dialer.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_email.png b/app/src/main/res/drawable-hdpi/com_android_email.png
deleted file mode 100644
index 2eb7a70..0000000
Binary files a/app/src/main/res/drawable-hdpi/com_android_email.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_mms_ui.png b/app/src/main/res/drawable-hdpi/com_android_mms_ui.png
deleted file mode 100644
index 1ac19f2..0000000
Binary files a/app/src/main/res/drawable-hdpi/com_android_mms_ui.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_music.png b/app/src/main/res/drawable-hdpi/com_android_music.png
deleted file mode 100644
index d0b55a9..0000000
Binary files a/app/src/main/res/drawable-hdpi/com_android_music.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_providers_downloads_ui.png b/app/src/main/res/drawable-hdpi/com_android_providers_downloads_ui.png
deleted file mode 100644
index 55cd1e9..0000000
Binary files a/app/src/main/res/drawable-hdpi/com_android_providers_downloads_ui.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_quicksearchbox.png b/app/src/main/res/drawable-hdpi/com_android_quicksearchbox.png
deleted file mode 100644
index fd8b051..0000000
Binary files a/app/src/main/res/drawable-hdpi/com_android_quicksearchbox.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_soundrecorder.png b/app/src/main/res/drawable-hdpi/com_android_soundrecorder.png
deleted file mode 100644
index 538075f..0000000
Binary files a/app/src/main/res/drawable-hdpi/com_android_soundrecorder.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_stk_stkmain.png b/app/src/main/res/drawable-hdpi/com_android_stk_stkmain.png
deleted file mode 100644
index 1af7e9e..0000000
Binary files a/app/src/main/res/drawable-hdpi/com_android_stk_stkmain.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_vdieo.png b/app/src/main/res/drawable-hdpi/com_android_vdieo.png
deleted file mode 100644
index a031a22..0000000
Binary files a/app/src/main/res/drawable-hdpi/com_android_vdieo.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/com_mediatek_fmradio.png b/app/src/main/res/drawable-hdpi/com_mediatek_fmradio.png
deleted file mode 100644
index f62afdf..0000000
Binary files a/app/src/main/res/drawable-hdpi/com_mediatek_fmradio.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/com_uiui_sn.png b/app/src/main/res/drawable-hdpi/com_uiui_sn.png
index 40ab2b0..d80fb6e 100644
Binary files a/app/src/main/res/drawable-hdpi/com_uiui_sn.png and b/app/src/main/res/drawable-hdpi/com_uiui_sn.png differ
diff --git a/app/src/main/res/drawable-hdpi/control_background.png b/app/src/main/res/drawable-hdpi/control_background.png
deleted file mode 100644
index b9b512c..0000000
Binary files a/app/src/main/res/drawable-hdpi/control_background.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/default_avatar.png b/app/src/main/res/drawable-hdpi/default_avatar.png
index 37ccb6f..1c02c71 100644
Binary files a/app/src/main/res/drawable-hdpi/default_avatar.png and b/app/src/main/res/drawable-hdpi/default_avatar.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_activition_bind.png b/app/src/main/res/drawable-hdpi/icon_activition_bind.png
index a0ccd7d..8cef580 100644
Binary files a/app/src/main/res/drawable-hdpi/icon_activition_bind.png and b/app/src/main/res/drawable-hdpi/icon_activition_bind.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_device_bind.png b/app/src/main/res/drawable-hdpi/icon_device_bind.png
deleted file mode 100644
index 2c5e89e..0000000
Binary files a/app/src/main/res/drawable-hdpi/icon_device_bind.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/icon_device_unbind.png b/app/src/main/res/drawable-hdpi/icon_device_unbind.png
deleted file mode 100644
index 1e79e1a..0000000
Binary files a/app/src/main/res/drawable-hdpi/icon_device_unbind.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/icon_family_space.png b/app/src/main/res/drawable-hdpi/icon_family_space.png
deleted file mode 100644
index 4f47639..0000000
Binary files a/app/src/main/res/drawable-hdpi/icon_family_space.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/icon_homework_sample.png b/app/src/main/res/drawable-hdpi/icon_homework_sample.png
new file mode 100644
index 0000000..8d2e6bd
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_homework_sample.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_manual.png b/app/src/main/res/drawable-hdpi/icon_manual.png
deleted file mode 100644
index 274dd97..0000000
Binary files a/app/src/main/res/drawable-hdpi/icon_manual.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/icon_user_back.png b/app/src/main/res/drawable-hdpi/icon_user_back.png
new file mode 100644
index 0000000..aadbdb9
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_user_back.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_user_edit.png b/app/src/main/res/drawable-hdpi/icon_user_edit.png
new file mode 100644
index 0000000..2ce7e4b
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_user_edit.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_user_more.png b/app/src/main/res/drawable-hdpi/icon_user_more.png
new file mode 100644
index 0000000..500b0ad
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_user_more.png differ
diff --git a/app/src/main/res/drawable-hdpi/status_download.png b/app/src/main/res/drawable-hdpi/status_download.png
new file mode 100644
index 0000000..2081bff
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/status_download.png differ
diff --git a/app/src/main/res/drawable-hdpi/user_edit_avatar.png b/app/src/main/res/drawable-hdpi/user_edit_avatar.png
new file mode 100644
index 0000000..2ce7e4b
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/user_edit_avatar.png differ
diff --git a/app/src/main/res/drawable-hdpi/wechat_bind_process.png b/app/src/main/res/drawable-hdpi/wechat_bind_process.png
new file mode 100644
index 0000000..568fd26
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/wechat_bind_process.png differ
diff --git a/app/src/main/res/drawable-hdpi/wechat_service_qrcode.png b/app/src/main/res/drawable-hdpi/wechat_service_qrcode.png
new file mode 100644
index 0000000..950276e
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/wechat_service_qrcode.png differ
diff --git a/app/src/main/res/drawable-xhdpi/chinese_composition_correction.png b/app/src/main/res/drawable-xhdpi/chinese_composition_correction.png
deleted file mode 100644
index 24553c6..0000000
Binary files a/app/src/main/res/drawable-xhdpi/chinese_composition_correction.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/chinese_unit_test.png b/app/src/main/res/drawable-xhdpi/chinese_unit_test.png
deleted file mode 100644
index c553e01..0000000
Binary files a/app/src/main/res/drawable-xhdpi/chinese_unit_test.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_dictionary.png b/app/src/main/res/drawable-xhdpi/icon_dictionary.png
deleted file mode 100644
index e883e31..0000000
Binary files a/app/src/main/res/drawable-xhdpi/icon_dictionary.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_error_book.png b/app/src/main/res/drawable-xhdpi/icon_error_book.png
deleted file mode 100644
index e0138a8..0000000
Binary files a/app/src/main/res/drawable-xhdpi/icon_error_book.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_expand.png b/app/src/main/res/drawable-xhdpi/icon_expand.png
deleted file mode 100644
index 1a6ee43..0000000
Binary files a/app/src/main/res/drawable-xhdpi/icon_expand.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_glossary.png b/app/src/main/res/drawable-xhdpi/icon_glossary.png
deleted file mode 100644
index d83b0a0..0000000
Binary files a/app/src/main/res/drawable-xhdpi/icon_glossary.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_homework.png b/app/src/main/res/drawable-xhdpi/icon_homework.png
deleted file mode 100644
index adacb83..0000000
Binary files a/app/src/main/res/drawable-xhdpi/icon_homework.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_listen.png b/app/src/main/res/drawable-xhdpi/icon_listen.png
deleted file mode 100644
index 7a0951e..0000000
Binary files a/app/src/main/res/drawable-xhdpi/icon_listen.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_sync_exercises.png b/app/src/main/res/drawable-xhdpi/icon_sync_exercises.png
deleted file mode 100644
index 63f4b74..0000000
Binary files a/app/src/main/res/drawable-xhdpi/icon_sync_exercises.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_textbook_sync.png b/app/src/main/res/drawable-xhdpi/icon_textbook_sync.png
deleted file mode 100644
index 6d85b98..0000000
Binary files a/app/src/main/res/drawable-xhdpi/icon_textbook_sync.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/math_unit_test.png b/app/src/main/res/drawable-xhdpi/math_unit_test.png
deleted file mode 100644
index 5d8d5e7..0000000
Binary files a/app/src/main/res/drawable-xhdpi/math_unit_test.png and /dev/null differ
diff --git a/app/src/main/res/drawable/actions_item_selector.xml b/app/src/main/res/drawable/actions_item_selector.xml
deleted file mode 100644
index df26a4a..0000000
--- a/app/src/main/res/drawable/actions_item_selector.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
- -
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/alarm_background.xml b/app/src/main/res/drawable/alarm_background.xml
deleted file mode 100644
index b383bc1..0000000
--- a/app/src/main/res/drawable/alarm_background.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/alarm_notifi_background.xml b/app/src/main/res/drawable/alarm_notifi_background.xml
deleted file mode 100644
index 9d93aac..0000000
--- a/app/src/main/res/drawable/alarm_notifi_background.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/alarmclcok_background.xml b/app/src/main/res/drawable/alarmclcok_background.xml
deleted file mode 100644
index bf2ee59..0000000
--- a/app/src/main/res/drawable/alarmclcok_background.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/background_weather_rain.xml b/app/src/main/res/drawable/background_weather_rain.xml
deleted file mode 100644
index e8f3c68..0000000
--- a/app/src/main/res/drawable/background_weather_rain.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/background_weather_sun.xml b/app/src/main/res/drawable/background_weather_sun.xml
deleted file mode 100644
index 1094952..0000000
--- a/app/src/main/res/drawable/background_weather_sun.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/background_weather_sunny.xml b/app/src/main/res/drawable/background_weather_sunny.xml
deleted file mode 100644
index b057981..0000000
--- a/app/src/main/res/drawable/background_weather_sunny.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/badge_bg.xml b/app/src/main/res/drawable/badge_bg.xml
deleted file mode 100644
index 49d698d..0000000
--- a/app/src/main/res/drawable/badge_bg.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_selecte.xml b/app/src/main/res/drawable/bg_selecte.xml
new file mode 100644
index 0000000..79106f7
--- /dev/null
+++ b/app/src/main/res/drawable/bg_selecte.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bt_activation_normal.xml b/app/src/main/res/drawable/bt_activation_normal.xml
new file mode 100644
index 0000000..3c4b6f5
--- /dev/null
+++ b/app/src/main/res/drawable/bt_activation_normal.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bt_checkupdate_bg.xml b/app/src/main/res/drawable/bt_checkupdate_bg.xml
new file mode 100644
index 0000000..9ca4085
--- /dev/null
+++ b/app/src/main/res/drawable/bt_checkupdate_bg.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bt_checkupdate_normnl.xml b/app/src/main/res/drawable/bt_checkupdate_normnl.xml
index 09d53bd..f7daaab 100644
--- a/app/src/main/res/drawable/bt_checkupdate_normnl.xml
+++ b/app/src/main/res/drawable/bt_checkupdate_normnl.xml
@@ -3,11 +3,17 @@
xmlns:android="http://schemas.android.com/apk/res/android">
+ android:color="@color/default_blue" />
+ android:topLeftRadius="@dimen/dp_16"
+ android:topRightRadius="@dimen/dp_16"
+ android:bottomLeftRadius="@dimen/dp_16"
+ android:bottomRightRadius="@dimen/dp_16" />
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bt_checkupdate_pressed.xml b/app/src/main/res/drawable/bt_checkupdate_pressed.xml
index 8c09552..f005729 100644
--- a/app/src/main/res/drawable/bt_checkupdate_pressed.xml
+++ b/app/src/main/res/drawable/bt_checkupdate_pressed.xml
@@ -1,13 +1,17 @@
-
+
-
+
+ android:bottomLeftRadius="@dimen/dp_16"
+ android:bottomRightRadius="@dimen/dp_16"
+ android:topLeftRadius="@dimen/dp_16"
+ android:topRightRadius="@dimen/dp_16" />
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/app_select_background.xml b/app/src/main/res/drawable/confirm_text_bg.xml
similarity index 52%
rename from app/src/main/res/drawable/app_select_background.xml
rename to app/src/main/res/drawable/confirm_text_bg.xml
index d4c331c..c5d4ec1 100644
--- a/app/src/main/res/drawable/app_select_background.xml
+++ b/app/src/main/res/drawable/confirm_text_bg.xml
@@ -1,18 +1,17 @@
-
+
+ android:bottomLeftRadius="@dimen/dp_6"
+ android:bottomRightRadius="@dimen/dp_6"
+ android:topLeftRadius="@dimen/dp_6"
+ android:topRightRadius="@dimen/dp_6" />
+ android:left="@dimen/dp_8"
+ android:right="@dimen/dp_8"
+ android:top="@dimen/dp_8" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/custom_bg.xml b/app/src/main/res/drawable/custom_bg.xml
deleted file mode 100644
index 6856ba2..0000000
--- a/app/src/main/res/drawable/custom_bg.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/custom_bg_clean.xml b/app/src/main/res/drawable/custom_bg_clean.xml
deleted file mode 100644
index 8fd9491..0000000
--- a/app/src/main/res/drawable/custom_bg_clean.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/custom_bg_contact.xml b/app/src/main/res/drawable/custom_bg_contact.xml
deleted file mode 100644
index 4983222..0000000
--- a/app/src/main/res/drawable/custom_bg_contact.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/custom_bg_guard.xml b/app/src/main/res/drawable/custom_bg_guard.xml
deleted file mode 100644
index cb53167..0000000
--- a/app/src/main/res/drawable/custom_bg_guard.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/custom_bg_health.xml b/app/src/main/res/drawable/custom_bg_health.xml
deleted file mode 100644
index 0bfd56f..0000000
--- a/app/src/main/res/drawable/custom_bg_health.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/custom_bg_sos.xml b/app/src/main/res/drawable/custom_bg_sos.xml
deleted file mode 100644
index d9a8d07..0000000
--- a/app/src/main/res/drawable/custom_bg_sos.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/custom_bg_weather.xml b/app/src/main/res/drawable/custom_bg_weather.xml
deleted file mode 100644
index 217e796..0000000
--- a/app/src/main/res/drawable/custom_bg_weather.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/custom_radio_selector.xml b/app/src/main/res/drawable/custom_radio_selector.xml
new file mode 100644
index 0000000..8d11096
--- /dev/null
+++ b/app/src/main/res/drawable/custom_radio_selector.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/edit_text_bg.xml b/app/src/main/res/drawable/edit_text_bg.xml
new file mode 100644
index 0000000..f7a75ee
--- /dev/null
+++ b/app/src/main/res/drawable/edit_text_bg.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/gray_thumb.xml b/app/src/main/res/drawable/gray_thumb.xml
deleted file mode 100644
index 1448a1c..0000000
--- a/app/src/main/res/drawable/gray_thumb.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/gray_track.xml b/app/src/main/res/drawable/gray_track.xml
deleted file mode 100644
index 95b087e..0000000
--- a/app/src/main/res/drawable/gray_track.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/green_thumb.xml b/app/src/main/res/drawable/green_thumb.xml
deleted file mode 100644
index 6b5c785..0000000
--- a/app/src/main/res/drawable/green_thumb.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/green_track.xml b/app/src/main/res/drawable/green_track.xml
deleted file mode 100644
index b00fc92..0000000
--- a/app/src/main/res/drawable/green_track.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml
deleted file mode 100644
index 07d5da9..0000000
--- a/app/src/main/res/drawable/ic_launcher_background.xml
+++ /dev/null
@@ -1,170 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/drawable/ic_radio_selected.xml b/app/src/main/res/drawable/ic_radio_selected.xml
new file mode 100644
index 0000000..de4c1de
--- /dev/null
+++ b/app/src/main/res/drawable/ic_radio_selected.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_radio_unselected.xml b/app/src/main/res/drawable/ic_radio_unselected.xml
new file mode 100644
index 0000000..dafa6a6
--- /dev/null
+++ b/app/src/main/res/drawable/ic_radio_unselected.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/main_pb_bg.xml b/app/src/main/res/drawable/main_pb_bg.xml
deleted file mode 100644
index 5196b24..0000000
--- a/app/src/main/res/drawable/main_pb_bg.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
- -
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/pgs_bar_bg.xml b/app/src/main/res/drawable/pgs_bar_bg.xml
deleted file mode 100644
index 08a4242..0000000
--- a/app/src/main/res/drawable/pgs_bar_bg.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/radio.xml b/app/src/main/res/drawable/radio.xml
new file mode 100644
index 0000000..7e81fad
--- /dev/null
+++ b/app/src/main/res/drawable/radio.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/radio_checked.xml b/app/src/main/res/drawable/radio_checked.xml
new file mode 100644
index 0000000..7d0d874
--- /dev/null
+++ b/app/src/main/res/drawable/radio_checked.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/radio_textcolor.xml b/app/src/main/res/drawable/radio_textcolor.xml
new file mode 100644
index 0000000..0562a7a
--- /dev/null
+++ b/app/src/main/res/drawable/radio_textcolor.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/radio_unchecked.xml b/app/src/main/res/drawable/radio_unchecked.xml
new file mode 100644
index 0000000..7b00b30
--- /dev/null
+++ b/app/src/main/res/drawable/radio_unchecked.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/rb_background.xml b/app/src/main/res/drawable/rb_background.xml
new file mode 100644
index 0000000..b6d331e
--- /dev/null
+++ b/app/src/main/res/drawable/rb_background.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/rb_card_selector.xml b/app/src/main/res/drawable/rb_card_selector.xml
new file mode 100644
index 0000000..edc45c0
--- /dev/null
+++ b/app/src/main/res/drawable/rb_card_selector.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/rb_text_selector.xml b/app/src/main/res/drawable/rb_text_selector.xml
new file mode 100644
index 0000000..0ba084a
--- /dev/null
+++ b/app/src/main/res/drawable/rb_text_selector.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/seekbar_progress_default.xml b/app/src/main/res/drawable/seekbar_progress_default.xml
deleted file mode 100644
index a7f0e64..0000000
--- a/app/src/main/res/drawable/seekbar_progress_default.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_bt_bg.xml b/app/src/main/res/drawable/shape_bt_bg.xml
deleted file mode 100644
index eda2bed..0000000
--- a/app/src/main/res/drawable/shape_bt_bg.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_icv_et_bg_focus1.xml b/app/src/main/res/drawable/shape_icv_et_bg_focus1.xml
deleted file mode 100644
index fe1c752..0000000
--- a/app/src/main/res/drawable/shape_icv_et_bg_focus1.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_icv_et_bg_normal1.xml b/app/src/main/res/drawable/shape_icv_et_bg_normal1.xml
deleted file mode 100644
index b9ee654..0000000
--- a/app/src/main/res/drawable/shape_icv_et_bg_normal1.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_pg_sb.xml b/app/src/main/res/drawable/shape_pg_sb.xml
deleted file mode 100644
index 837119a..0000000
--- a/app/src/main/res/drawable/shape_pg_sb.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_progress_drawable.xml b/app/src/main/res/drawable/shape_progress_drawable.xml
deleted file mode 100644
index 12f6c7e..0000000
--- a/app/src/main/res/drawable/shape_progress_drawable.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
- -
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_thumb_icon.xml b/app/src/main/res/drawable/shape_thumb_icon.xml
deleted file mode 100644
index 4798c6b..0000000
--- a/app/src/main/res/drawable/shape_thumb_icon.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/thumb.xml b/app/src/main/res/drawable/thumb.xml
deleted file mode 100644
index b2facb4..0000000
--- a/app/src/main/res/drawable/thumb.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/track.xml b/app/src/main/res/drawable/track.xml
deleted file mode 100644
index 8de6995..0000000
--- a/app/src/main/res/drawable/track.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/tv_background.xml b/app/src/main/res/drawable/tv_background.xml
deleted file mode 100644
index fccd7aa..0000000
--- a/app/src/main/res/drawable/tv_background.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/tv_bg_noti.xml b/app/src/main/res/drawable/tv_bg_noti.xml
deleted file mode 100644
index 755f4dd..0000000
--- a/app/src/main/res/drawable/tv_bg_noti.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/control_background_item.xml b/app/src/main/res/drawable/user_box_bg.xml
similarity index 57%
rename from app/src/main/res/drawable/control_background_item.xml
rename to app/src/main/res/drawable/user_box_bg.xml
index 03dd6b2..a407dae 100644
--- a/app/src/main/res/drawable/control_background_item.xml
+++ b/app/src/main/res/drawable/user_box_bg.xml
@@ -1,8 +1,11 @@
-
-
+
+
-
-
-
-
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/control_background_item_dis.xml b/app/src/main/res/drawable/user_box_bg_transparent.xml
similarity index 54%
rename from app/src/main/res/drawable/control_background_item_dis.xml
rename to app/src/main/res/drawable/user_box_bg_transparent.xml
index 1582ff2..b31e6c5 100644
--- a/app/src/main/res/drawable/control_background_item_dis.xml
+++ b/app/src/main/res/drawable/user_box_bg_transparent.xml
@@ -1,8 +1,11 @@
-
-
+
+
-
-
-
-
-
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/user_card_bg.xml b/app/src/main/res/drawable/user_card_bg.xml
new file mode 100644
index 0000000..61d44e4
--- /dev/null
+++ b/app/src/main/res/drawable/user_card_bg.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/voice_background.xml b/app/src/main/res/drawable/voice_background.xml
deleted file mode 100644
index c414380..0000000
--- a/app/src/main/res/drawable/voice_background.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout-land/fragment_user.xml b/app/src/main/res/layout-land/fragment_user.xml
index 6eddf60..05e6e46 100644
--- a/app/src/main/res/layout-land/fragment_user.xml
+++ b/app/src/main/res/layout-land/fragment_user.xml
@@ -6,6 +6,9 @@
+
-
-
-
-
-
-
-
-
-
@@ -124,148 +80,99 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent">
+ app:layout_constraintTop_toBottomOf="@+id/constraintLayout4">
-
+ android:layout_height="0dp"
+ android:layout_weight="2"
+ android:background="@drawable/user_box_bg_transparent"
+ android:onClick="@{click::openUser}"
+ android:visibility="visible">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ app:layout_constraintTop_toTopOf="parent">
+
+
+
+
+
+
+
+
-
-
-
-
-
+ app:layout_constraintStart_toEndOf="@+id/imageView17"
+ app:layout_constraintTop_toTopOf="parent">
-
+
+
+
+
+
+
+ app:layout_constraintStart_toEndOf="@+id/imageView17"
+ app:layout_constraintTop_toTopOf="parent" />
-
+
@@ -361,10 +280,6 @@
android:layout_marginTop="@dimen/dp_8"
android:layout_marginEnd="@dimen/dp_8"
android:background="@drawable/bt_checkupdate_selector"
- android:paddingStart="@dimen/dp_8"
- android:paddingTop="@dimen/dp_2"
- android:paddingEnd="@dimen/dp_8"
- android:paddingBottom="@dimen/dp_2"
android:text="输入激活码"
android:textColor="@color/white"
android:textSize="@dimen/sp_10"
@@ -379,7 +294,7 @@
android:layout_marginTop="@dimen/dp_16"
android:text="设备绑定流程"
android:textColor="@color/white"
- android:textSize="@dimen/sp_10"
+ android:textSize="@dimen/sp_9"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_date1" />
@@ -397,6 +312,7 @@
android:layout_width="@dimen/dp_88"
android:layout_height="@dimen/dp_88"
android:adjustViewBounds="true"
+ android:onClick="@{click::openSn}"
android:scaleType="centerCrop"
android:src="@drawable/applet_qrcode"
app:corner_radius="@dimen/dp_8"
@@ -433,6 +349,7 @@
android:layout_height="@dimen/dp_88"
android:layout_marginStart="@dimen/dp_16"
android:adjustViewBounds="true"
+ android:onClick="@{click::openSn}"
android:scaleType="centerCrop"
android:src="@color/white"
app:corner_radius="@dimen/dp_8"
@@ -468,7 +385,7 @@
android:maxLines="1"
android:text="2月14日 星期二"
android:textColor="@color/white"
- android:textSize="@dimen/sp_12"
+ android:textSize="@dimen/sp_9"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -476,6 +393,7 @@
android:id="@+id/cl_more"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:onClick="@{click::toMore}"
app:layout_constraintBottom_toBottomOf="@+id/tv_date2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/tv_date2">
@@ -498,7 +416,7 @@
android:layout_marginEnd="@dimen/dp_4"
android:text="更多应用"
android:textColor="@color/white"
- android:textSize="@dimen/sp_10"
+ android:textSize="@dimen/sp_9"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@+id/imageView13"
app:layout_constraintEnd_toStartOf="@+id/imageView13"
@@ -545,7 +463,7 @@
android:maxLines="1"
android:text="2月14日 星期二"
android:textColor="@color/white"
- android:textSize="@dimen/sp_12"
+ android:textSize="@dimen/sp_9"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -559,12 +477,13 @@
@@ -611,7 +530,7 @@
android:maxLines="1"
android:text="暂无作业"
android:textColor="@color/white"
- android:textSize="@dimen/sp_12"
+ android:textSize="@dimen/sp_9"
app:layout_constraintEnd_toEndOf="@+id/imageView23"
app:layout_constraintStart_toStartOf="@+id/imageView23"
app:layout_constraintTop_toBottomOf="@+id/imageView23" />
@@ -619,6 +538,7 @@
+
diff --git a/app/src/main/res/layout-sw800dp/fragment_user.xml b/app/src/main/res/layout-sw800dp/fragment_user.xml
index c3d7d8c..a41a0e2 100644
--- a/app/src/main/res/layout-sw800dp/fragment_user.xml
+++ b/app/src/main/res/layout-sw800dp/fragment_user.xml
@@ -6,6 +6,9 @@
+
-
-
-
-
-
-
-
-
-
-
-
@@ -124,149 +64,100 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent">
+ app:layout_constraintTop_toBottomOf="@+id/constraintLayout4">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ app:layout_constraintTop_toTopOf="parent">
+
+
+
+
+
+
+
+
+
-
-
+ android:layout_height="0dp"
+ android:layout_marginTop="@dimen/dp_8"
+ android:layout_weight="1"
+ android:background="@drawable/user_box_bg_transparent"
+ android:visibility="visible">
-
-
-
+ app:layout_constraintStart_toEndOf="@+id/imageView17"
+ app:layout_constraintTop_toTopOf="parent">
-
+
+
+
+
+
+
+ app:layout_constraintStart_toEndOf="@+id/imageView17"
+ app:layout_constraintTop_toTopOf="parent" />
-
+
@@ -547,7 +449,7 @@
android:maxLines="1"
android:text="2月14日 星期二"
android:textColor="@color/white"
- android:textSize="@dimen/sp_12"
+ android:textSize="@dimen/sp_7"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -561,10 +463,11 @@
diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml
index 28dbe26..3625795 100644
--- a/app/src/main/res/layout/activity_about.xml
+++ b/app/src/main/res/layout/activity_about.xml
@@ -60,7 +60,6 @@
android:layout_height="0dp"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
- app:imageUrl="@{image}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/constraintLayout9" />
diff --git a/app/src/main/res/layout/activity_edit.xml b/app/src/main/res/layout/activity_edit.xml
new file mode 100644
index 0000000..fdf401e
--- /dev/null
+++ b/app/src/main/res/layout/activity_edit.xml
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_homework.xml b/app/src/main/res/layout/activity_homework.xml
new file mode 100644
index 0000000..ae790f7
--- /dev/null
+++ b/app/src/main/res/layout/activity_homework.xml
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_selecte_grade.xml b/app/src/main/res/layout/activity_selecte_grade.xml
new file mode 100644
index 0000000..b86b5f2
--- /dev/null
+++ b/app/src/main/res/layout/activity_selecte_grade.xml
@@ -0,0 +1,323 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_update.xml b/app/src/main/res/layout/activity_update.xml
index 6e6d92d..4828f0d 100644
--- a/app/src/main/res/layout/activity_update.xml
+++ b/app/src/main/res/layout/activity_update.xml
@@ -132,7 +132,7 @@
android:layout_weight="1"
android:background="@drawable/update_cancel_background"
android:gravity="center"
- android:onClick="@{click.exit}"
+ android:onClick="@{click::exit}"
android:singleLine="true"
android:text="取消"
android:textColor="@color/white"
@@ -149,7 +149,7 @@
android:layout_weight="1"
android:background="@drawable/update_background"
android:gravity="center"
- android:onClick="@{click.upgrade}"
+ android:onClick="@{click::upgrade}"
android:singleLine="true"
android:text="更新"
android:textColor="@color/white"
diff --git a/app/src/main/res/layout/activity_user.xml b/app/src/main/res/layout/activity_user.xml
new file mode 100644
index 0000000..aa18bd7
--- /dev/null
+++ b/app/src/main/res/layout/activity_user.xml
@@ -0,0 +1,248 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_wechat.xml b/app/src/main/res/layout/activity_wechat.xml
index 9469b8f..beb4604 100644
--- a/app/src/main/res/layout/activity_wechat.xml
+++ b/app/src/main/res/layout/activity_wechat.xml
@@ -13,8 +13,8 @@
android:layout_height="wrap_content">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_device.xml b/app/src/main/res/layout/fragment_device.xml
new file mode 100644
index 0000000..b615a61
--- /dev/null
+++ b/app/src/main/res/layout/fragment_device.xml
@@ -0,0 +1,270 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_info.xml b/app/src/main/res/layout/fragment_info.xml
new file mode 100644
index 0000000..7de8090
--- /dev/null
+++ b/app/src/main/res/layout/fragment_info.xml
@@ -0,0 +1,271 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_parents.xml b/app/src/main/res/layout/fragment_parents.xml
new file mode 100644
index 0000000..102d39f
--- /dev/null
+++ b/app/src/main/res/layout/fragment_parents.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_user.xml b/app/src/main/res/layout/fragment_user.xml
index 6eddf60..48baeaa 100644
--- a/app/src/main/res/layout/fragment_user.xml
+++ b/app/src/main/res/layout/fragment_user.xml
@@ -6,6 +6,9 @@
+
-
-
-
-
-
-
-
-
-
@@ -124,148 +80,99 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent">
+ app:layout_constraintTop_toBottomOf="@+id/constraintLayout4">
-
+ android:layout_height="0dp"
+ android:layout_weight="2"
+ android:background="@drawable/user_box_bg_transparent"
+ android:onClick="@{click::openUser}"
+ android:visibility="visible">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ app:layout_constraintTop_toTopOf="parent">
+
+
+
+
+
+
+
+
-
-
-
-
-
+ app:layout_constraintStart_toEndOf="@+id/imageView17"
+ app:layout_constraintTop_toTopOf="parent">
-
+
+
+
+
+
+
+ app:layout_constraintStart_toEndOf="@+id/imageView17"
+ app:layout_constraintTop_toTopOf="parent" />
-
+
@@ -361,10 +280,6 @@
android:layout_marginTop="@dimen/dp_8"
android:layout_marginEnd="@dimen/dp_8"
android:background="@drawable/bt_checkupdate_selector"
- android:paddingStart="@dimen/dp_8"
- android:paddingTop="@dimen/dp_2"
- android:paddingEnd="@dimen/dp_8"
- android:paddingBottom="@dimen/dp_2"
android:text="输入激活码"
android:textColor="@color/white"
android:textSize="@dimen/sp_10"
@@ -379,7 +294,7 @@
android:layout_marginTop="@dimen/dp_16"
android:text="设备绑定流程"
android:textColor="@color/white"
- android:textSize="@dimen/sp_10"
+ android:textSize="@dimen/sp_9"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_date1" />
@@ -397,6 +312,7 @@
android:layout_width="@dimen/dp_88"
android:layout_height="@dimen/dp_88"
android:adjustViewBounds="true"
+ android:onClick="@{click::openSn}"
android:scaleType="centerCrop"
android:src="@drawable/applet_qrcode"
app:corner_radius="@dimen/dp_8"
@@ -433,6 +349,7 @@
android:layout_height="@dimen/dp_88"
android:layout_marginStart="@dimen/dp_16"
android:adjustViewBounds="true"
+ android:onClick="@{click::openSn}"
android:scaleType="centerCrop"
android:src="@color/white"
app:corner_radius="@dimen/dp_8"
@@ -468,7 +385,7 @@
android:maxLines="1"
android:text="2月14日 星期二"
android:textColor="@color/white"
- android:textSize="@dimen/sp_12"
+ android:textSize="@dimen/sp_9"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -476,6 +393,7 @@
android:id="@+id/cl_more"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:onClick="@{click::toMore}"
app:layout_constraintBottom_toBottomOf="@+id/tv_date2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/tv_date2">
@@ -498,7 +416,7 @@
android:layout_marginEnd="@dimen/dp_4"
android:text="更多应用"
android:textColor="@color/white"
- android:textSize="@dimen/sp_10"
+ android:textSize="@dimen/sp_9"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@+id/imageView13"
app:layout_constraintEnd_toStartOf="@+id/imageView13"
@@ -545,7 +463,7 @@
android:maxLines="1"
android:text="2月14日 星期二"
android:textColor="@color/white"
- android:textSize="@dimen/sp_12"
+ android:textSize="@dimen/sp_9"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -559,10 +477,11 @@
@@ -619,6 +538,7 @@
+
diff --git a/app/src/main/res/layout/item_homework.xml b/app/src/main/res/layout/item_homework.xml
deleted file mode 100644
index 16e50d4..0000000
--- a/app/src/main/res/layout/item_homework.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_homework_new.xml b/app/src/main/res/layout/item_homework_new.xml
index 43eee73..76a621c 100644
--- a/app/src/main/res/layout/item_homework_new.xml
+++ b/app/src/main/res/layout/item_homework_new.xml
@@ -8,8 +8,8 @@
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_60"
- android:layout_marginTop="@dimen/dp_4"
android:layout_marginStart="@dimen/dp_4"
+ android:layout_marginTop="@dimen/dp_4"
android:layout_marginEnd="@dimen/dp_4"
android:background="@drawable/item_homework_background"
app:layout_constraintEnd_toEndOf="parent"
@@ -17,28 +17,51 @@
app:layout_constraintTop_toTopOf="parent">
+
+
+
+
-
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 16dd6a1..e27d08a 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -10,9 +10,8 @@
#000000
#f0f0f0
#FFD3D3D3
- #4880ff
#F8B551
- #0480FF
+ #4880ff
#4D4B50
#FF0000
#424144
@@ -41,4 +40,8 @@
#646464
#98999a
+ #ddecff
+
+ #EFEFEF
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5202eea..473c2d1 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -14,6 +14,7 @@
Hello blank fragment
努力不为感动谁,只为不与最好的自己失之交臂。趁着最美好的年华,继续奋斗吧。
%d款应用
- 今日学习时间%s
+ 学习时长%s
+ 未设置
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index cce1619..e618807 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -62,6 +62,27 @@
- false
+
+
+
+
+
diff --git a/build.gradle b/build.gradle
index db01d22..4419b55 100644
--- a/build.gradle
+++ b/build.gradle
@@ -19,6 +19,11 @@ buildscript {
}
allprojects {
+ configurations.all {
+ resolutionStrategy {
+ force 'androidx.constraintlayout:constraintlayout:2.0.4'
+ }
+ }
repositories {
google()
mavenCentral()