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()