diff --git a/app/build.gradle b/app/build.gradle index e13b0c0..fa37e77 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -16,8 +16,8 @@ android { minSdkVersion 24 targetSdkVersion 29 - versionCode 68 - versionName "1.7.6" + versionCode 71 + versionName "1.7.9" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true @@ -27,6 +27,7 @@ android { abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a' // 还可以添加 'x86', 'x86_64', 'mips', 'mips64' } + } dataBinding { @@ -57,14 +58,14 @@ android { v2SigningEnabled false } - iPlay50SE { - storeFile file("keystore/iPlay50SE.keystore") - storePassword "123456" - keyAlias "iplay50se" - keyPassword "123456" - v1SigningEnabled true - v2SigningEnabled true - } +// iPlay50SE { +// storeFile file("keystore/iPlay50SE.keystore") +// storePassword "123456" +// keyAlias "iplay50se" +// keyPassword "123456" +// v1SigningEnabled true +// v2SigningEnabled true +// } U807 { storeFile file("keystore/AllwinnerU807.jks") @@ -82,48 +83,29 @@ android { debuggable true signingConfig signingConfigs.U807 buildConfigField "String", "platform", '"U807"' + manifestPlaceholders = [ + AMAP_KEY : "d0cdff4516bb1a788ebdc02aeee75614" + ] } U807Release.initWith(release) U807Release { signingConfig signingConfigs.U807 buildConfigField "String", "platform", '"U807"' + manifestPlaceholders = [ + AMAP_KEY : "d0cdff4516bb1a788ebdc02aeee75614" + ] } -// iPlay50SEDebug.initWith(debug) -// iPlay50SEDebug { -// versionNameSuffix "-debug" -// debuggable true -// signingConfig signingConfigs.iPlay50SE -// } -// -// iPlay50SERelease.initWith(release) -// iPlay50SERelease { -// signingConfig signingConfigs.iPlay50SE -// } - -// iPlay50SEDebug.initWith(debug) -// iPlay50SEDebug { -// versionNameSuffix "-debug" -// debuggable true -// signingConfig signingConfigs.tuixin -// resValue "string", "app_name", "学习课堂" -// } -// -// iPlay50SERelease.initWith(release) -// iPlay50SERelease { -// signingConfig signingConfigs.tuixin -// resValue "string", "app_name", "学习课堂" -// } - debug { -// resValue "string", "app_name", "学习课堂" - // 显示Log versionNameSuffix "-debug" minifyEnabled false //Zipalign优化 zipAlignEnabled true buildConfigField "String", "platform", '"tuixin"' + manifestPlaceholders = [ + AMAP_KEY : "9c9fabf3934df224e927b2f9fbc51064" + ] signingConfig signingConfigs.tuixin applicationVariants.all { variant -> variant.outputs.each { output -> @@ -137,8 +119,6 @@ android { } release { -// resValue "string", "app_name", "学习课堂" - //混淆 minifyEnabled false //Zipalign优化 zipAlignEnabled true @@ -147,6 +127,9 @@ android { //签名 signingConfig signingConfigs.tuixin buildConfigField "String", "platform", '"tuixin"' + manifestPlaceholders = [ + AMAP_KEY : "9c9fabf3934df224e927b2f9fbc51064" + ] // 将release版本的包名重命名,加上版本及日期 applicationVariants.all { variant -> variant.outputs.each { output -> @@ -216,12 +199,16 @@ dependencies { //bindView implementation 'com.jakewharton:butterknife:10.2.3' annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3' + implementation 'com.jakewharton.rxbinding4:rxbinding:4.0.0' + implementation 'com.jeremyliao:live-event-bus-x:1.7.3' //MMKV implementation 'com.tencent:mmkv-static:1.2.14' //bugly implementation 'com.tencent.bugly:crashreport:4.1.9.2' //阿里云推送 implementation 'com.aliyun.ams:alicloud-android-push:3.8.0' + //高德地图定位 + implementation 'com.amap.api:location:5.1.0' //状态栏透明 implementation 'com.gitee.zackratos:UltimateBarX:0.8.0' //指示器 @@ -234,14 +221,16 @@ dependencies { //aria implementation 'com.arialyy.aria:core:3.8.15' annotationProcessor 'com.arialyy.aria:compiler:3.8.15' - //动态权限框架 - implementation 'com.github.getActivity:XXPermissions:16.6' //videoplayer implementation 'cn.jzvd:jiaozivideoplayer:7.7.0' implementation 'com.github.wseemann:FFmpegMediaMetadataRetriever-core:1.0.16' implementation 'com.github.wseemann:FFmpegMediaMetadataRetriever-native:1.0.16' //验证码输入 // implementation 'com.jacktuotuo.customview:verificationcodeview:1.0.5' + //动态权限框架 + implementation 'com.github.getActivity:XXPermissions:18.63' + // 吐司框架:https://github.com/getActivity/Toaster + implementation 'com.github.getActivity:Toaster:12.6' } preBuild { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b0a6669..7d6cb6f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,6 +40,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + android:theme="@style/DialogCloseOnTouchOutside" /> + android:screenOrientation="userLandscape" /> + + + + + + + permissions, boolean allGranted) { + Log.e(TAG, "onGranted: permissions = " + permissions + " allGranted = " + allGranted); if (!allGranted) { - ToastUtil.show("获取部分权限成功,但部分权限未正常授予"); + Toaster.show("获取部分权限成功,但部分权限未正常授予"); return; } -// ToastUtil.show("获取录音和日历权限成功"); - Log.e(TAG, "onGranted: 获取存储权限成功"); - getData(); + Log.e(TAG, "onGranted: 获取权限成功"); + getLocationPermission(); } @Override public void onDenied(@NonNull List permissions, boolean doNotAskAgain) { + Log.e(TAG, "onDenied: permissions = " + permissions + " doNotAskAgain = " + doNotAskAgain); if (doNotAskAgain) { - ToastUtil.show("被永久拒绝授权,请手动授予存储权限"); + Toaster.show("被永久拒绝授权,请手动授予权限"); // 如果是被永久拒绝就跳转到应用权限系统设置页面 XXPermissions.startPermissionActivity(MainActivity.this, permissions); } else { -// ToastUtil.show("获取录音和日历权限失败"); - Log.e(TAG, "onGranted: 获取存储权限权限失败"); + Log.e(TAG, "onGranted: 获取权限失败"); } } }); } - private void getData() { -// if (!isNotificationListenersEnabled()) { -// ToastUtil.show("请授予\"" + getString(R.string.app_name) + "\"使用通知权"); -// gotoNotificationAccessSetting(this); -// } -// addHomeWatcher(); + private String[] mLocationPermission = new String[]{ + Permission.ACCESS_COARSE_LOCATION, + Permission.ACCESS_FINE_LOCATION, + Permission.ACCESS_BACKGROUND_LOCATION, + }; + + private void getLocationPermission() { + XXPermissions.with(this) + // 申请单个权限 + .permission(mLocationPermission) + // 申请多个权限 +// .permission(Permission.Group.STORAGE) + // 设置权限请求拦截器(局部设置) + //.interceptor(new PermissionInterceptor()) + // 设置不触发错误检测机制(局部设置) + //.unchecked() + .request(new OnPermissionCallback() { + @Override + public void onGranted(@NonNull List permissions, boolean allGranted) { + Log.e(TAG, "onGranted: permissions = " + permissions + " allGranted = " + allGranted); + if (!allGranted) { + Toaster.show("获取部分权限成功,但部分权限未正常授予"); + return; + } + Log.e(TAG, "onGranted: 获取定位权限成功"); + } + + @Override + public void onDenied(@NonNull List permissions, boolean doNotAskAgain) { + Log.e(TAG, "onDenied: permissions = " + permissions + " doNotAskAgain = " + doNotAskAgain); + if (doNotAskAgain) { + Toaster.show("被永久拒绝授权,请手动授予定位权限"); + // 如果是被永久拒绝就跳转到应用权限系统设置页面 + XXPermissions.startPermissionActivity(MainActivity.this, permissions); + } else { + Log.e(TAG, "onGranted: 获取定位权限失败"); + } + } + }); } PrivacyPolicyDialog privacyPolicyDialog; @@ -543,9 +588,8 @@ public class MainActivity extends BaseActivity implements MainContact.MainView, @Override public void onConfirm() { mMMKV.encode("AgreePrivacyPolicy", 1); - getPermission(); privacyPolicyDialog.dismiss(); - getData(); + getPermission(); } }); privacyPolicyDialog.show(); @@ -610,7 +654,7 @@ public class MainActivity extends BaseActivity implements MainContact.MainView, } catch (Exception e1) { e1.printStackTrace(); } - ToastUtil.show("对不起,您的手机暂不支持"); + Toaster.show("对不起,您的手机暂不支持"); e.printStackTrace(); return false; } @@ -642,6 +686,25 @@ public class MainActivity extends BaseActivity implements MainContact.MainView, } } + private void registmUpdateAddressReceiver() { + mUpdateAddressReceiver = new UpdateAddressReceiver(); + IntentFilter filter = new IntentFilter(); + filter.addAction(CommonConfig.IFLYTEK_UPDATE_ADDRESS_ACTION); + registerReceiver(mUpdateAddressReceiver, filter); + } + + private UpdateAddressReceiver mUpdateAddressReceiver; + + class UpdateAddressReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (CommonConfig.IFLYTEK_UPDATE_ADDRESS_ACTION.equals(action)) { + AmapManager.getInstance().startLocation(); + } + } + } + @Override public void sendAPPUsageFinish() { diff --git a/app/src/main/java/com/uiui/zyos/activity/main/MainContact.java b/app/src/main/java/com/uiui/zyos/activity/main/MainContact.java index 2d6c1d8..932f39b 100644 --- a/app/src/main/java/com/uiui/zyos/activity/main/MainContact.java +++ b/app/src/main/java/com/uiui/zyos/activity/main/MainContact.java @@ -1,7 +1,7 @@ package com.uiui.zyos.activity.main; -import com.uiui.zyos.base.BasePresenter; -import com.uiui.zyos.base.BaseView; +import com.uiui.zyos.base.mvp.BasePresenter; +import com.uiui.zyos.base.mvp.BaseView; public class MainContact { public interface Presenter extends BasePresenter { diff --git a/app/src/main/java/com/uiui/zyos/activity/more/MoreAppActivity.java b/app/src/main/java/com/uiui/zyos/activity/more/MoreAppActivity.java index 7d30b54..bd7cc5d 100644 --- a/app/src/main/java/com/uiui/zyos/activity/more/MoreAppActivity.java +++ b/app/src/main/java/com/uiui/zyos/activity/more/MoreAppActivity.java @@ -17,9 +17,8 @@ import androidx.recyclerview.widget.RecyclerView; import com.uiui.zyos.R; import com.uiui.zyos.adapter.AppAdapter; -import com.uiui.zyos.base.BaseActivity; +import com.uiui.zyos.base.mvp.BaseMvpActivity; import com.uiui.zyos.bean.DesktopIcon; -import com.uiui.zyos.fragment.user.UserFragment; import com.uiui.zyos.view.RecyclerViewSpacesItemDecoration; import java.util.HashMap; @@ -28,7 +27,7 @@ import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; -public class MoreAppActivity extends BaseActivity implements MoreContact.MoreView { +public class MoreAppActivity extends BaseMvpActivity implements MoreContact.MoreView { @BindView(R.id.iv_back) ImageView iv_back; @@ -51,7 +50,7 @@ public class MoreAppActivity extends BaseActivity implements MoreContact.MoreVie ButterKnife.bind(this); mPresenter = new MorePresenter(this); mPresenter.attachView(this); - mPresenter.setLifecycle(lifecycleSubject); + mPresenter.setLifecycle(getLifecycleSubject()); iv_back.setOnClickListener(new View.OnClickListener() { @Override diff --git a/app/src/main/java/com/uiui/zyos/activity/more/MoreContact.java b/app/src/main/java/com/uiui/zyos/activity/more/MoreContact.java index f18f60c..fd119d2 100644 --- a/app/src/main/java/com/uiui/zyos/activity/more/MoreContact.java +++ b/app/src/main/java/com/uiui/zyos/activity/more/MoreContact.java @@ -1,7 +1,7 @@ package com.uiui.zyos.activity.more; -import com.uiui.zyos.base.BasePresenter; -import com.uiui.zyos.base.BaseView; +import com.uiui.zyos.base.mvp.BasePresenter; +import com.uiui.zyos.base.mvp.BaseView; import com.uiui.zyos.bean.DesktopIcon; import java.util.List; diff --git a/app/src/main/java/com/uiui/zyos/adapter/AddAppAdapter.java b/app/src/main/java/com/uiui/zyos/adapter/AddAppAdapter.java index f569ed7..5d3dc4b 100644 --- a/app/src/main/java/com/uiui/zyos/adapter/AddAppAdapter.java +++ b/app/src/main/java/com/uiui/zyos/adapter/AddAppAdapter.java @@ -15,7 +15,6 @@ import androidx.constraintlayout.widget.ConstraintLayout; import androidx.recyclerview.widget.RecyclerView; import com.uiui.zyos.R; -import com.uiui.zyos.activity.PasswordActivity; import com.uiui.zyos.bean.DesktopIcon; import com.uiui.zyos.config.CommonConfig; import com.uiui.zyos.manager.AppManager; @@ -23,7 +22,7 @@ import com.uiui.zyos.utils.ApkUtils; import com.uiui.zyos.utils.BitmapUtils; import com.uiui.zyos.utils.IconUtils; import com.uiui.zyos.utils.OpenApkUtils; -import com.uiui.zyos.utils.ToastUtil; +import com.hjq.toast.Toaster; import java.util.List; import java.util.Set; diff --git a/app/src/main/java/com/uiui/zyos/adapter/AppAdapter.java b/app/src/main/java/com/uiui/zyos/adapter/AppAdapter.java index 077260e..3cf5b6c 100644 --- a/app/src/main/java/com/uiui/zyos/adapter/AppAdapter.java +++ b/app/src/main/java/com/uiui/zyos/adapter/AppAdapter.java @@ -16,9 +16,11 @@ import androidx.annotation.NonNull; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.recyclerview.widget.RecyclerView; +import com.hjq.toast.Toaster; import com.uiui.zyos.R; import com.uiui.zyos.activity.ManualActivity; import com.uiui.zyos.activity.PasswordActivity; +import com.uiui.zyos.activity.ServiceActivity; import com.uiui.zyos.bean.DesktopIcon; import com.uiui.zyos.config.CommonConfig; import com.uiui.zyos.manager.AppManager; @@ -27,7 +29,6 @@ import com.uiui.zyos.utils.AppUsedTimeUtils; import com.uiui.zyos.utils.BitmapUtils; import com.uiui.zyos.utils.IconUtils; import com.uiui.zyos.utils.OpenApkUtils; -import com.uiui.zyos.utils.ToastUtil; import java.util.ArrayList; import java.util.List; @@ -69,6 +70,7 @@ public class AppAdapter extends RecyclerView.Adapter { case AppManager.ADD_NAME: case AppManager.UPDATE_NAME: case AppManager.MANUAL_NAME: + case AppManager.SERVICE_NAME: holder.iv_icon.setImageDrawable(desktopIcon.getIcon()); break; default: @@ -91,12 +93,16 @@ public class AppAdapter extends RecyclerView.Adapter { break; case AppManager.MANUAL_NAME: mContext.startActivity(new Intent(mContext, ManualActivity.class)); + break; + case AppManager.SERVICE_NAME: + mContext.startActivity(new Intent(mContext, ServiceActivity.class)); + break; default: int settingOtherAppInstaller = Settings.Global.getInt(mContext.getContentResolver(), CommonConfig.SETTING_OTHER_APPINSTALLER_KEY, 1); if (settingOtherAppInstaller == 0 && !ApkUtils.isSystemApp(mContext, desktopIcon.getPackageName() )) { - ToastUtil.show("已禁止应用打开"); + Toaster.show("已禁止应用打开"); } else { OpenApkUtils.getInstance().openApp(desktopIcon.getPackageName(), desktopIcon.getClassName()); } diff --git a/app/src/main/java/com/uiui/zyos/base/BaseActivity.java b/app/src/main/java/com/uiui/zyos/base/BaseActivity.java deleted file mode 100644 index 4766574..0000000 --- a/app/src/main/java/com/uiui/zyos/base/BaseActivity.java +++ /dev/null @@ -1,151 +0,0 @@ -package com.uiui.zyos.base; - -import android.app.Activity; -import android.os.Build; -import android.os.Bundle; -import android.view.View; -import android.view.Window; -import android.view.WindowManager; - -import androidx.annotation.CallSuper; -import androidx.annotation.CheckResult; -import androidx.annotation.ContentView; -import androidx.annotation.LayoutRes; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; - -import com.trello.rxlifecycle4.LifecycleProvider; -import com.trello.rxlifecycle4.LifecycleTransformer; -import com.trello.rxlifecycle4.RxLifecycle; -import com.trello.rxlifecycle4.android.ActivityEvent; -import com.trello.rxlifecycle4.android.RxLifecycleAndroid; -import com.uiui.zyos.R; -import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX; - -import io.reactivex.rxjava3.core.Observable; -import io.reactivex.rxjava3.subjects.BehaviorSubject; - - -public abstract class BaseActivity extends AppCompatActivity implements LifecycleProvider { - public final BehaviorSubject lifecycleSubject = BehaviorSubject.create(); - - public BaseActivity() { - super(); - } - - @ContentView - public BaseActivity(@LayoutRes int contentLayoutId) { - super(contentLayoutId); - } - - @Override - @NonNull - @CheckResult - public final Observable lifecycle() { - return lifecycleSubject.hide(); - } - - @Override - @NonNull - @CheckResult - public final LifecycleTransformer bindUntilEvent(@NonNull ActivityEvent event) { - return RxLifecycle.bindUntilEvent(lifecycleSubject, event); - } - - @Override - @NonNull - @CheckResult - public final LifecycleTransformer bindToLifecycle() { - return RxLifecycleAndroid.bindActivity(lifecycleSubject); - } - - @Override - @CallSuper - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - lifecycleSubject.onNext(ActivityEvent.CREATE); -// StatusBarUtil.init(this); - UltimateBarX.statusBar(this) - .transparent() - .colorRes(R.color.colorPrimaryDark) -// .light(true) - .apply(); - UltimateBarX.navigationBar(this) - .transparent() - .colorRes(R.color.colorPrimaryDark) -// .light(true) - .apply(); - setContentView(this.getLayoutId()); -// hideStatusBar(this); - initView(); - initData(); - } - -// public static void hideStatusBar(Activity activity) { -// if (activity == null) return; -// Window window = activity.getWindow(); -// if (window == null) return; -// window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, -// WindowManager.LayoutParams.FLAG_FULLSCREEN); -// window.getDecorView() -// .setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); -// WindowManager.LayoutParams lp = window.getAttributes(); -// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { -// lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; -// } -// window.setAttributes(lp); -// } - - - /** - * 设置布局 - */ - public abstract int getLayoutId(); - - /** - * 初始化视图 - */ - public abstract void initView(); - - - /** - * 初始化数据 - */ - public abstract void initData(); - - @Override - @CallSuper - protected void onStart() { - super.onStart(); - lifecycleSubject.onNext(ActivityEvent.START); - } - - @Override - @CallSuper - protected void onResume() { - super.onResume(); - lifecycleSubject.onNext(ActivityEvent.RESUME); - } - - @Override - @CallSuper - protected void onPause() { - lifecycleSubject.onNext(ActivityEvent.PAUSE); - super.onPause(); - } - - @Override - @CallSuper - protected void onStop() { - lifecycleSubject.onNext(ActivityEvent.STOP); - super.onStop(); - } - - @Override - @CallSuper - protected void onDestroy() { - lifecycleSubject.onNext(ActivityEvent.DESTROY); - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/uiui/zyos/base/BaseApplication.java b/app/src/main/java/com/uiui/zyos/base/BaseApplication.java index 70668c7..161e1bf 100644 --- a/app/src/main/java/com/uiui/zyos/base/BaseApplication.java +++ b/app/src/main/java/com/uiui/zyos/base/BaseApplication.java @@ -11,10 +11,12 @@ import android.util.Log; import com.alibaba.sdk.android.push.CloudPushService; import com.alibaba.sdk.android.push.noonesdk.PushServiceFactory; import com.arialyy.aria.core.Aria; +import com.hjq.toast.Toaster; import com.tencent.bugly.crashreport.CrashReport; import com.tencent.mmkv.MMKV; import com.uiui.zyos.BuildConfig; import com.uiui.zyos.alarm.AlarmUtils; +import com.uiui.zyos.manager.AmapManager; import com.uiui.zyos.manager.AppManager; import com.uiui.zyos.manager.ConnectManager; import com.uiui.zyos.manager.RemoteManager; @@ -52,7 +54,9 @@ public class BaseApplication extends Application { if (SystemUtils.isMainProcessName(this, android.os.Process.myPid())) { String rootDir = MMKV.initialize(this); Log.e(TAG, "mmkv root: " + rootDir); - + // 初始化 Toast 框架 + Toaster.init(this); + AmapManager.init(this); AppManager.init(this); PushManager.init(this); RemoteManager.init(this); diff --git a/app/src/main/java/com/uiui/zyos/base/BaseDataBindingActivity.java b/app/src/main/java/com/uiui/zyos/base/BaseDataBindingActivity.java index ff6a125..491d3ca 100644 --- a/app/src/main/java/com/uiui/zyos/base/BaseDataBindingActivity.java +++ b/app/src/main/java/com/uiui/zyos/base/BaseDataBindingActivity.java @@ -3,121 +3,66 @@ package com.uiui.zyos.base; import android.os.Bundle; import androidx.annotation.CallSuper; -import androidx.annotation.CheckResult; -import androidx.annotation.ContentView; -import androidx.annotation.LayoutRes; -import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import com.trello.rxlifecycle4.LifecycleProvider; -import com.trello.rxlifecycle4.LifecycleTransformer; -import com.trello.rxlifecycle4.RxLifecycle; -import com.trello.rxlifecycle4.android.ActivityEvent; -import com.trello.rxlifecycle4.android.RxLifecycleAndroid; import com.uiui.zyos.R; +import com.uiui.zyos.base.rx.BaseRxActivity; import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX; -import io.reactivex.rxjava3.core.Observable; -import io.reactivex.rxjava3.subjects.BehaviorSubject; - -public abstract class BaseDataBindingActivity extends AppCompatActivity implements LifecycleProvider { - public final BehaviorSubject lifecycleSubject = BehaviorSubject.create(); +public abstract class BaseDataBindingActivity extends BaseRxActivity { public BaseDataBindingActivity() { super(); } - @ContentView - public BaseDataBindingActivity(@LayoutRes int contentLayoutId) { - super(contentLayoutId); - } - - @Override - @NonNull - @CheckResult - public final Observable lifecycle() { - return lifecycleSubject.hide(); - } - - @Override - @NonNull - @CheckResult - public final LifecycleTransformer bindUntilEvent(@NonNull ActivityEvent event) { - return RxLifecycle.bindUntilEvent(lifecycleSubject, event); - } - - @Override - @NonNull - @CheckResult - public final LifecycleTransformer bindToLifecycle() { - return RxLifecycleAndroid.bindActivity(lifecycleSubject); - } - @Override @CallSuper protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - lifecycleSubject.onNext(ActivityEvent.CREATE); // StatusBarUtil.init(this); UltimateBarX.statusBar(this) .transparent() .colorRes(R.color.colorPrimaryDark) - .light(true) + .light(setNightMode()) + .fitWindow(setfitWindow()) .apply(); UltimateBarX.navigationBar(this) .transparent() .colorRes(R.color.colorPrimaryDark) - .light(true) + .light(setNightMode()) + .fitWindow(setfitWindow()) .apply(); + initDataBinding(); initView(); initData(); } + /** + * @return 是否是黑色状态栏 + */ +// protected abstract boolean setNightMode(); + public boolean setNightMode() { + return false; + } + + /** + * @return 是否是入侵 + */ +// protected abstract boolean setNightMode(); + public boolean setfitWindow() { + return false; + } + + + protected abstract void initDataBinding(); /** * 初始化视图 */ - public abstract void initView(); - + protected abstract void initView(); /** * 初始化数据 */ - public abstract void initData(); - - @Override - @CallSuper - protected void onStart() { - super.onStart(); - lifecycleSubject.onNext(ActivityEvent.START); - } - - @Override - @CallSuper - protected void onResume() { - super.onResume(); - lifecycleSubject.onNext(ActivityEvent.RESUME); - } - - @Override - @CallSuper - protected void onPause() { - lifecycleSubject.onNext(ActivityEvent.PAUSE); - super.onPause(); - } - - @Override - @CallSuper - protected void onStop() { - lifecycleSubject.onNext(ActivityEvent.STOP); - super.onStop(); - } - - @Override - @CallSuper - protected void onDestroy() { - lifecycleSubject.onNext(ActivityEvent.DESTROY); - super.onDestroy(); - } -} + protected abstract void initData(); +} \ No newline at end of file diff --git a/app/src/main/java/com/uiui/zyos/base/BaseFragment.java b/app/src/main/java/com/uiui/zyos/base/BaseFragment.java index cf59681..3008578 100644 --- a/app/src/main/java/com/uiui/zyos/base/BaseFragment.java +++ b/app/src/main/java/com/uiui/zyos/base/BaseFragment.java @@ -1,72 +1,15 @@ package com.uiui.zyos.base; import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import androidx.annotation.CallSuper; -import androidx.annotation.CheckResult; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; +import com.uiui.zyos.base.rx.BaseRxFragment; -import com.trello.rxlifecycle4.LifecycleProvider; -import com.trello.rxlifecycle4.LifecycleTransformer; -import com.trello.rxlifecycle4.RxLifecycle; -import com.trello.rxlifecycle4.android.FragmentEvent; -import com.trello.rxlifecycle4.android.RxLifecycleAndroid; - -import io.reactivex.rxjava3.core.Observable; -import io.reactivex.rxjava3.subjects.BehaviorSubject; - -public abstract class BaseFragment extends Fragment implements LifecycleProvider { - public final BehaviorSubject lifecycleSubject = BehaviorSubject.create(); +public abstract class BaseFragment extends BaseRxFragment { protected boolean isViewInitiated; protected boolean isVisibleToUser; protected boolean isDataInitiated; - @Override - @NonNull - @CheckResult - public final Observable lifecycle() { - return lifecycleSubject.hide(); - } - - @Override - @NonNull - @CheckResult - public final LifecycleTransformer bindUntilEvent(@NonNull FragmentEvent event) { - return RxLifecycle.bindUntilEvent(lifecycleSubject, event); - } - - @Override - @NonNull - @CheckResult - public final LifecycleTransformer bindToLifecycle() { - return RxLifecycleAndroid.bindFragment(lifecycleSubject); - } - - @Override - @CallSuper - public void onAttach(android.app.Activity activity) { - super.onAttach(activity); - lifecycleSubject.onNext(FragmentEvent.ATTACH); - } - - @Override - @CallSuper - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - lifecycleSubject.onNext(FragmentEvent.CREATE); - } - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - return super.onCreateView(inflater, container, savedInstanceState); - } @Override public void onActivityCreated(Bundle savedInstanceState) { @@ -91,65 +34,11 @@ public abstract class BaseFragment extends Fragment implements LifecycleProvider public boolean prepareFetchData(boolean forceUpdate) { if (isVisibleToUser && isViewInitiated && (!isDataInitiated || forceUpdate)) { fetchData(); + //注释掉保证每次都更新数据 isDataInitiated = true; return true; } return false; } - @Override - @CallSuper - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - lifecycleSubject.onNext(FragmentEvent.CREATE_VIEW); - } - - @Override - @CallSuper - public void onStart() { - super.onStart(); - lifecycleSubject.onNext(FragmentEvent.START); - } - - @Override - @CallSuper - public void onResume() { - super.onResume(); - lifecycleSubject.onNext(FragmentEvent.RESUME); - } - - @Override - @CallSuper - public void onPause() { - lifecycleSubject.onNext(FragmentEvent.PAUSE); - super.onPause(); - } - - @Override - @CallSuper - public void onStop() { - lifecycleSubject.onNext(FragmentEvent.STOP); - super.onStop(); - } - - @Override - @CallSuper - public void onDestroyView() { - lifecycleSubject.onNext(FragmentEvent.DESTROY_VIEW); - super.onDestroyView(); - } - - @Override - @CallSuper - public void onDestroy() { - lifecycleSubject.onNext(FragmentEvent.DESTROY); - super.onDestroy(); - } - - @Override - @CallSuper - public void onDetach() { - lifecycleSubject.onNext(FragmentEvent.DETACH); - super.onDetach(); - } } diff --git a/app/src/main/java/com/uiui/zyos/base/BaseTransparentActivity.java b/app/src/main/java/com/uiui/zyos/base/BaseTransparentActivity.java new file mode 100644 index 0000000..0c1684b --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/base/BaseTransparentActivity.java @@ -0,0 +1,57 @@ +package com.uiui.zyos.base; + +import android.os.Bundle; + +import androidx.annotation.CallSuper; +import androidx.annotation.Nullable; + +import com.uiui.zyos.R; +import com.uiui.zyos.base.rx.BaseRxActivity; +import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX; + +public abstract class BaseTransparentActivity extends BaseRxActivity { + + public BaseTransparentActivity() { + super(); + } + + @Override + @CallSuper + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); +// StatusBarUtil.init(this); + UltimateBarX.statusBar(this) + .transparent() + .colorRes(R.color.colorPrimaryDark) + .light(setNightMode()) + .fitWindow(setfitWindow()) + .apply(); + UltimateBarX.navigationBar(this) + .transparent() + .colorRes(R.color.colorPrimaryDark) + .light(setNightMode()) + .fitWindow(setfitWindow()) + .apply(); + } + + /** + * 设置布局 + */ + protected abstract int getLayoutId(); + + /** + * @return 是否是黑色状态栏 + */ +// protected abstract boolean setNightMode(); + public boolean setNightMode() { + return false; + } + + /** + * @return 是否是入侵 + */ +// protected abstract boolean setNightMode(); + public boolean setfitWindow() { + return false; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/uiui/zyos/base/BaseView.java b/app/src/main/java/com/uiui/zyos/base/BaseView.java deleted file mode 100644 index a347ad1..0000000 --- a/app/src/main/java/com/uiui/zyos/base/BaseView.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.uiui.zyos.base; - -public interface BaseView { -} diff --git a/app/src/main/java/com/uiui/zyos/base/mvp/BaseMvpActivity.java b/app/src/main/java/com/uiui/zyos/base/mvp/BaseMvpActivity.java new file mode 100644 index 0000000..1e9a9db --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/base/mvp/BaseMvpActivity.java @@ -0,0 +1,34 @@ +package com.uiui.zyos.base.mvp; + +import android.os.Bundle; + +import androidx.annotation.CallSuper; +import androidx.annotation.Nullable; + +import com.uiui.zyos.base.BaseTransparentActivity; + +public abstract class BaseMvpActivity extends BaseTransparentActivity { + + public BaseMvpActivity() { + super(); + } + + @Override + @CallSuper + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(getLayoutId()); + initView(); + initData(); + } + + /** + * 初始化视图 + */ + protected abstract void initView(); + + /** + * 初始化数据 + */ + protected abstract void initData(); +} diff --git a/app/src/main/java/com/uiui/zyos/base/BasePresenter.java b/app/src/main/java/com/uiui/zyos/base/mvp/BasePresenter.java similarity index 82% rename from app/src/main/java/com/uiui/zyos/base/BasePresenter.java rename to app/src/main/java/com/uiui/zyos/base/mvp/BasePresenter.java index 27f9213..d5124ab 100644 --- a/app/src/main/java/com/uiui/zyos/base/BasePresenter.java +++ b/app/src/main/java/com/uiui/zyos/base/mvp/BasePresenter.java @@ -1,4 +1,4 @@ -package com.uiui.zyos.base; +package com.uiui.zyos.base.mvp; import androidx.annotation.NonNull; diff --git a/app/src/main/java/com/uiui/zyos/base/mvp/BaseView.java b/app/src/main/java/com/uiui/zyos/base/mvp/BaseView.java new file mode 100644 index 0000000..4c55bf1 --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/base/mvp/BaseView.java @@ -0,0 +1,4 @@ +package com.uiui.zyos.base.mvp; + +public interface BaseView { +} diff --git a/app/src/main/java/com/uiui/zyos/base/mvvm/BaseMvvmActivity.java b/app/src/main/java/com/uiui/zyos/base/mvvm/BaseMvvmActivity.java new file mode 100644 index 0000000..62ee1f8 --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/base/mvvm/BaseMvvmActivity.java @@ -0,0 +1,54 @@ +package com.uiui.zyos.base.mvvm; + +import android.os.Bundle; +import android.util.Log; + +import androidx.annotation.Nullable; +import androidx.databinding.DataBindingUtil; +import androidx.databinding.ViewDataBinding; +import androidx.lifecycle.ViewModel; +import androidx.lifecycle.ViewModelProvider; + +import com.uiui.zyos.base.BaseTransparentActivity; + +import java.lang.reflect.Modifier; +import java.lang.reflect.ParameterizedType; + +public abstract class BaseMvvmActivity extends BaseTransparentActivity { + + private static final String TAG = BaseMvvmActivity.class.getSimpleName(); + + protected VM mViewModel; + protected VDB mViewDataBinding; + protected Class vmClass; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + //ViewDataBinding + mViewDataBinding = DataBindingUtil.setContentView(this, getLayoutId()); + mViewDataBinding.setLifecycleOwner(this); + //ViewModel + vmClass = (Class) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0]; + boolean isAbstract = Modifier.isAbstract(vmClass.getModifiers()); + Log.e(TAG, "isLocalClass:" + vmClass.getSimpleName().equals(ViewModel.class.getSimpleName()) + " isAbstract:" + isAbstract); + if (!isAbstract) {//不是一个抽象类 + mViewModel = new ViewModelProvider(this).get(vmClass); + } + initDataBinding(); + initView(); + initData(); + } + + protected abstract void initDataBinding(); + + /** + * 初始化视图 + */ + protected abstract void initView(); + + /** + * 初始化数据 + */ + protected abstract void initData(); +} diff --git a/app/src/main/java/com/uiui/zyos/base/mvvm/BaseViewModel.java b/app/src/main/java/com/uiui/zyos/base/mvvm/BaseViewModel.java new file mode 100644 index 0000000..66721d1 --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/base/mvvm/BaseViewModel.java @@ -0,0 +1,71 @@ +package com.uiui.zyos.base.mvvm; + +import android.content.Context; + +import androidx.databinding.ViewDataBinding; +import androidx.lifecycle.ViewModel; + +import java.lang.ref.WeakReference; + +import io.reactivex.rxjava3.subjects.BehaviorSubject; + +/** + * 所有viewmodel的基类 + */ +public abstract class BaseViewModel extends ViewModel implements ViewDataBindingCallback { + + /** + * 当前viewmodel对应的页面binding + */ + protected VDB binding; + + @Override + public void setVDBinding(ViewDataBinding vdBinding) { + + binding = (VDB) vdBinding; + } + + @Override + public VDB getVDBinding() { + if (binding == null) { + throw new NullPointerException("BaseViewModel >> getVDBinding >> null!!!"); + } + return binding; + } + + + /** + * 上下文 + */ + private WeakReference ctx; + + @Override + public void setCtx(Context context) { + if (ctx == null) { + ctx = new WeakReference<>(context); + } + } + + @Override + public Context getCtx() { + if (ctx == null) { + throw new NullPointerException("BaseViewModel >> getCtx >> null!!!"); + } + return ctx.get(); + } + + + public abstract void onDestroy(); + + private BehaviorSubject mBehaviorSubject; + + @Override + public void setLifecycle(BehaviorSubject subject) { + this.mBehaviorSubject = (BehaviorSubject) subject; + } + + @Override + public BehaviorSubject getLifecycle() { + return mBehaviorSubject; + } +} diff --git a/app/src/main/java/com/uiui/zyos/base/mvvm/ViewDataBindingCallback.java b/app/src/main/java/com/uiui/zyos/base/mvvm/ViewDataBindingCallback.java new file mode 100644 index 0000000..9ff307d --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/base/mvvm/ViewDataBindingCallback.java @@ -0,0 +1,26 @@ +package com.uiui.zyos.base.mvvm; + +import android.content.Context; + +import androidx.databinding.ViewDataBinding; + +import com.trello.rxlifecycle4.android.ActivityEvent; + +import io.reactivex.rxjava3.subjects.BehaviorSubject; + +public interface ViewDataBindingCallback { + + + void setVDBinding(VDB binding); + + VDB getVDBinding() throws NullPointerException; + + + void setCtx(Context context); + + Context getCtx() throws NullPointerException; + + void setLifecycle(BehaviorSubject subject); + + BehaviorSubject getLifecycle(); +} diff --git a/app/src/main/java/com/uiui/zyos/base/BaseLightActivity.java b/app/src/main/java/com/uiui/zyos/base/rx/BaseRxActivity.java similarity index 61% rename from app/src/main/java/com/uiui/zyos/base/BaseLightActivity.java rename to app/src/main/java/com/uiui/zyos/base/rx/BaseRxActivity.java index 3a5838c..2e16431 100644 --- a/app/src/main/java/com/uiui/zyos/base/BaseLightActivity.java +++ b/app/src/main/java/com/uiui/zyos/base/rx/BaseRxActivity.java @@ -1,11 +1,9 @@ -package com.uiui.zyos.base; +package com.uiui.zyos.base.rx; import android.os.Bundle; import androidx.annotation.CallSuper; import androidx.annotation.CheckResult; -import androidx.annotation.ContentView; -import androidx.annotation.LayoutRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; @@ -15,23 +13,19 @@ import com.trello.rxlifecycle4.LifecycleTransformer; import com.trello.rxlifecycle4.RxLifecycle; import com.trello.rxlifecycle4.android.ActivityEvent; import com.trello.rxlifecycle4.android.RxLifecycleAndroid; -import com.uiui.zyos.R; -import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX; import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.subjects.BehaviorSubject; +/** + * {@link com.trello.rxlifecycle4.components.RxActivity} + * copied form RxActivity} + */ +public abstract class BaseRxActivity extends AppCompatActivity implements LifecycleProvider { + private final BehaviorSubject lifecycleSubject = BehaviorSubject.create(); -public abstract class BaseLightActivity extends AppCompatActivity implements LifecycleProvider { - public final BehaviorSubject lifecycleSubject = BehaviorSubject.create(); - - public BaseLightActivity() { - super(); - } - - @ContentView - public BaseLightActivity(@LayoutRes int contentLayoutId) { - super(contentLayoutId); + public BehaviorSubject getLifecycleSubject() { + return lifecycleSubject; } @Override @@ -60,38 +54,8 @@ public abstract class BaseLightActivity extends AppCompatActivity implements Lif protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); lifecycleSubject.onNext(ActivityEvent.CREATE); -// StatusBarUtil.init(this); - UltimateBarX.statusBar(this) - .transparent() - .colorRes(R.color.colorPrimaryDark) - .light(true) - .apply(); - UltimateBarX.navigationBar(this) - .transparent() - .colorRes(R.color.colorPrimaryDark) - .light(true) - .apply(); - setContentView(this.getLayoutId()); - initView(); - initData(); } - /** - * 设置布局 - */ - public abstract int getLayoutId(); - - /** - * 初始化视图 - */ - public abstract void initView(); - - - /** - * 初始化数据 - */ - public abstract void initData(); - @Override @CallSuper protected void onStart() { @@ -127,3 +91,4 @@ public abstract class BaseLightActivity extends AppCompatActivity implements Lif super.onDestroy(); } } + diff --git a/app/src/main/java/com/uiui/zyos/base/rx/BaseRxFragment.java b/app/src/main/java/com/uiui/zyos/base/rx/BaseRxFragment.java new file mode 100644 index 0000000..b21df6b --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/base/rx/BaseRxFragment.java @@ -0,0 +1,123 @@ +package com.uiui.zyos.base.rx; + +import android.os.Bundle; +import android.view.View; + +import androidx.annotation.CallSuper; +import androidx.annotation.CheckResult; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +import com.trello.rxlifecycle4.LifecycleProvider; +import com.trello.rxlifecycle4.LifecycleTransformer; +import com.trello.rxlifecycle4.RxLifecycle; +import com.trello.rxlifecycle4.android.FragmentEvent; +import com.trello.rxlifecycle4.android.RxLifecycleAndroid; + +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.subjects.BehaviorSubject; + +/** + * {@link com.trello.rxlifecycle4.components.RxFragment} + * copied form RxFragment} + */ +public class BaseRxFragment extends Fragment implements LifecycleProvider { + private final BehaviorSubject lifecycleSubject = BehaviorSubject.create(); + + public BehaviorSubject getLifecycleSubject() { + return lifecycleSubject; + } + + @Override + @NonNull + @CheckResult + public final Observable lifecycle() { + return lifecycleSubject.hide(); + } + + @Override + @NonNull + @CheckResult + public final LifecycleTransformer bindUntilEvent(@NonNull FragmentEvent event) { + return RxLifecycle.bindUntilEvent(lifecycleSubject, event); + } + + @Override + @NonNull + @CheckResult + public final LifecycleTransformer bindToLifecycle() { + return RxLifecycleAndroid.bindFragment(lifecycleSubject); + } + + @Override + @CallSuper + public void onAttach(android.app.Activity activity) { + super.onAttach(activity); + lifecycleSubject.onNext(FragmentEvent.ATTACH); + } + + @Override + @CallSuper + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + lifecycleSubject.onNext(FragmentEvent.CREATE); + } + + @Override + @CallSuper + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + lifecycleSubject.onNext(FragmentEvent.CREATE_VIEW); + } + + @Override + @CallSuper + public void onStart() { + super.onStart(); + lifecycleSubject.onNext(FragmentEvent.START); + } + + @Override + @CallSuper + public void onResume() { + super.onResume(); + lifecycleSubject.onNext(FragmentEvent.RESUME); + } + + @Override + @CallSuper + public void onPause() { + lifecycleSubject.onNext(FragmentEvent.PAUSE); + super.onPause(); + } + + @Override + @CallSuper + public void onStop() { + lifecycleSubject.onNext(FragmentEvent.STOP); + super.onStop(); + } + + @Override + @CallSuper + public void onDestroyView() { + lifecycleSubject.onNext(FragmentEvent.DESTROY_VIEW); + super.onDestroyView(); + } + + @Override + @CallSuper + public void onDestroy() { + lifecycleSubject.onNext(FragmentEvent.DESTROY); + super.onDestroy(); + } + + @Override + @CallSuper + public void onDetach() { + lifecycleSubject.onNext(FragmentEvent.DETACH); + super.onDetach(); + } +} + diff --git a/app/src/main/java/com/uiui/zyos/base/BaseService.java b/app/src/main/java/com/uiui/zyos/base/rx/BaseRxService.java similarity index 74% rename from app/src/main/java/com/uiui/zyos/base/BaseService.java rename to app/src/main/java/com/uiui/zyos/base/rx/BaseRxService.java index 4347604..ac6c5eb 100644 --- a/app/src/main/java/com/uiui/zyos/base/BaseService.java +++ b/app/src/main/java/com/uiui/zyos/base/rx/BaseRxService.java @@ -1,8 +1,9 @@ -package com.uiui.zyos.base; +package com.uiui.zyos.base.rx; import android.app.Service; import android.content.Intent; +import androidx.annotation.CheckResult; import androidx.annotation.NonNull; import com.trello.rxlifecycle4.LifecycleProvider; @@ -14,25 +15,31 @@ import com.trello.rxlifecycle4.android.RxLifecycleAndroid; import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.subjects.BehaviorSubject; +public abstract class BaseRxService extends Service implements LifecycleProvider { + private final BehaviorSubject lifecycleSubject = BehaviorSubject.create(); -public abstract class BaseService extends Service implements LifecycleProvider { - public final BehaviorSubject lifecycleSubject = BehaviorSubject.create(); - - public BaseService() { - super(); + public BehaviorSubject getLifecycleSubject() { + return lifecycleSubject; } + @Override + @NonNull + @CheckResult public final Observable lifecycle() { return lifecycleSubject.hide(); } @Override + @NonNull + @CheckResult public final LifecycleTransformer bindUntilEvent(@NonNull ActivityEvent event) { return RxLifecycle.bindUntilEvent(lifecycleSubject, event); } @Override + @NonNull + @CheckResult public final LifecycleTransformer bindToLifecycle() { return RxLifecycleAndroid.bindActivity(lifecycleSubject); } diff --git a/app/src/main/java/com/uiui/zyos/config/CommonConfig.java b/app/src/main/java/com/uiui/zyos/config/CommonConfig.java index 49bc215..830ad70 100644 --- a/app/src/main/java/com/uiui/zyos/config/CommonConfig.java +++ b/app/src/main/java/com/uiui/zyos/config/CommonConfig.java @@ -22,6 +22,9 @@ public class CommonConfig { /*是否显示返回Android按钮*/ public static final String UIUI_RETURN_ANDROID_KEY = "iflytek_uiui_is_return_android"; + /*让桌面更新定位信息*/ + public static final String IFLYTEK_UPDATE_ADDRESS_ACTION = "IFLYTEK_UPDATE_ADDRESS"; + public static final String MAP_LOCATION_JSON_KEY = "MAPLOCATION_JSON_STRING"; public static final String MAP_LONGITUDE_KEY = "map_longitude_key"; public static final String MAP_LATITUDE_KEY = "map_latitude_key"; @@ -31,4 +34,10 @@ public class CommonConfig { public static final String SETTING_OTHER_APPINSTALLER_KEY = "iflytek_setting_other_appInstaller"; /*应用市场的app列表*/ public final static String ADMIN_APP_LIST = "only_admin_app_list"; + /*默认地址北京*/ + public static final String DEFAULT_LOCATION_DISTRICT = "北京"; + /*手动选择位置 经纬度*/ + public static final String MANUALLY_SELECT_LOCATION_TUDE = "map_manually_select_tude"; + /*默认北京原点*/ + public static final String DEFAULT_LOCATION_TUDE = "116.40529,39.90499"; } diff --git a/app/src/main/java/com/uiui/zyos/fragment/app/AppContact.java b/app/src/main/java/com/uiui/zyos/fragment/app/AppContact.java index 7856cbc..03f20c2 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/app/AppContact.java +++ b/app/src/main/java/com/uiui/zyos/fragment/app/AppContact.java @@ -1,7 +1,7 @@ package com.uiui.zyos.fragment.app; -import com.uiui.zyos.base.BasePresenter; -import com.uiui.zyos.base.BaseView; +import com.uiui.zyos.base.mvp.BasePresenter; +import com.uiui.zyos.base.mvp.BaseView; import com.uiui.zyos.bean.DesktopIcon; import java.util.ArrayList; diff --git a/app/src/main/java/com/uiui/zyos/fragment/app/AppFragment.java b/app/src/main/java/com/uiui/zyos/fragment/app/AppFragment.java index 5b715a6..b4f087d 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/app/AppFragment.java +++ b/app/src/main/java/com/uiui/zyos/fragment/app/AppFragment.java @@ -109,7 +109,7 @@ public class AppFragment extends BaseFragment implements AppContact.AppView { mContext = (FragmentActivity) rootView.getContext(); mPresenter = new AppPresenter(mContext); mPresenter.attachView(this); - mPresenter.setLifecycle(lifecycleSubject); + mPresenter.setLifecycle(getLifecycleSubject()); ButterKnife.bind(this, rootView); initView(); } diff --git a/app/src/main/java/com/uiui/zyos/fragment/app/AppPresenter.java b/app/src/main/java/com/uiui/zyos/fragment/app/AppPresenter.java index a4d9df6..c400e17 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/app/AppPresenter.java +++ b/app/src/main/java/com/uiui/zyos/fragment/app/AppPresenter.java @@ -44,17 +44,31 @@ public class AppPresenter implements AppContact.AppPresenter { @Override public void getInstalledApp() { ArrayList desktopIcons = AppManager.getInstance().getFilterAppList(); + + DesktopIcon appstoreDesktopIcon = new DesktopIcon(); + appstoreDesktopIcon.setLable("应用市场"); + appstoreDesktopIcon.setPackageName(AppManager.APPSTORE_PACKAGE_NAME); + appstoreDesktopIcon.setClassName(AppManager.APPSTORE_CLASS_NAME); + appstoreDesktopIcon.setIcon(mContext.getDrawable(R.drawable.com_android_appstore)); + desktopIcons.add(desktopIcons.size(), appstoreDesktopIcon); + DesktopIcon updateDesktopIcon = new DesktopIcon(); updateDesktopIcon.setLable("应用更新"); updateDesktopIcon.setPackageName(AppManager.UPDATE_NAME); updateDesktopIcon.setIcon(mContext.getDrawable(R.drawable.icon_update)); desktopIcons.add(desktopIcons.size(), updateDesktopIcon); - DesktopIcon manualIcon = new DesktopIcon(); - manualIcon.setLable("使用手册"); - manualIcon.setPackageName(AppManager.MANUAL_NAME); - manualIcon.setIcon(mContext.getDrawable(R.drawable.icon_manual)); - desktopIcons.add(desktopIcons.size(), manualIcon); +// DesktopIcon manualIcon = new DesktopIcon(); +// manualIcon.setLable("使用手册"); +// manualIcon.setPackageName(AppManager.MANUAL_NAME); +// manualIcon.setIcon(mContext.getDrawable(R.drawable.icon_manual)); +// desktopIcons.add(desktopIcons.size(), manualIcon); + + DesktopIcon serviceIcon = new DesktopIcon(); + serviceIcon.setIcon(mContext.getDrawable(R.drawable.service_icon)); + serviceIcon.setLable("联系客服"); + serviceIcon.setPackageName(AppManager.SERVICE_NAME); + desktopIcons.add(serviceIcon); DesktopIcon desktopIcon = new DesktopIcon(); desktopIcon.setLable("添加应用"); diff --git a/app/src/main/java/com/uiui/zyos/fragment/biology/BiologyFragment.java b/app/src/main/java/com/uiui/zyos/fragment/biology/BiologyFragment.java index a616dc3..4e88b39 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/biology/BiologyFragment.java +++ b/app/src/main/java/com/uiui/zyos/fragment/biology/BiologyFragment.java @@ -49,7 +49,7 @@ public class BiologyFragment extends BaseFragment { public BiologyFragment() { // Required empty public constructor - Log.e(TAG, "BiologyFragment: " ); + Log.e(TAG, "BiologyFragment: "); } /** @@ -110,7 +110,7 @@ public class BiologyFragment extends BaseFragment { rootView = null; } - private void initView(){ + private void initView() { imageView1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -132,7 +132,11 @@ public class BiologyFragment extends BaseFragment { imageView4.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - OpenApkUtils.getInstance().openPrecision("1"); + if (OpenApkUtils.getInstance().isNewAiApp()) { + OpenApkUtils.getInstance().openAiPrecision(0, "生物"); + } else { + OpenApkUtils.getInstance().openPrecision("1"); + } } }); diff --git a/app/src/main/java/com/uiui/zyos/fragment/chemical/ChemicalFragment.java b/app/src/main/java/com/uiui/zyos/fragment/chemical/ChemicalFragment.java index 4dee22f..244b5fd 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/chemical/ChemicalFragment.java +++ b/app/src/main/java/com/uiui/zyos/fragment/chemical/ChemicalFragment.java @@ -133,7 +133,11 @@ public class ChemicalFragment extends BaseFragment { imageView4.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - OpenApkUtils.getInstance().openPrecision("1"); + if (OpenApkUtils.getInstance().isNewAiApp()) { + OpenApkUtils.getInstance().openAiPrecision(0, "化学"); + } else { + OpenApkUtils.getInstance().openPrecision("1"); + } } }); diff --git a/app/src/main/java/com/uiui/zyos/fragment/chinese/ChineseContact.java b/app/src/main/java/com/uiui/zyos/fragment/chinese/ChineseContact.java index 7d7cfa0..602a7ec 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/chinese/ChineseContact.java +++ b/app/src/main/java/com/uiui/zyos/fragment/chinese/ChineseContact.java @@ -1,8 +1,8 @@ package com.uiui.zyos.fragment.chinese; -import com.uiui.zyos.base.BasePresenter; -import com.uiui.zyos.base.BaseView; +import com.uiui.zyos.base.mvp.BasePresenter; +import com.uiui.zyos.base.mvp.BaseView; public class ChineseContact { public interface Presenter extends BasePresenter { diff --git a/app/src/main/java/com/uiui/zyos/fragment/chinese/ChineseFragment.java b/app/src/main/java/com/uiui/zyos/fragment/chinese/ChineseFragment.java index 5eef4aa..e87c8de 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/chinese/ChineseFragment.java +++ b/app/src/main/java/com/uiui/zyos/fragment/chinese/ChineseFragment.java @@ -25,6 +25,7 @@ import com.uiui.zyos.base.BaseFragment; import com.uiui.zyos.dialog.ChineseDialog; import com.uiui.zyos.dialog.FoundationDialog; import com.uiui.zyos.jxw.JxwPackageConfig; +import com.uiui.zyos.manager.AmapManager; import com.uiui.zyos.manager.RemoteManager; import com.uiui.zyos.utils.OpenApkUtils; import com.uiui.zyos.utils.Utils; @@ -137,7 +138,7 @@ public class ChineseFragment extends BaseFragment implements ChineseContact.Chin @Override public void fetchData() { Log.e(TAG, "fetchData: "); - RemoteManager.getInstance().getLocation(); + AmapManager.getInstance().startLocation(); initData(); } @@ -155,7 +156,7 @@ public class ChineseFragment extends BaseFragment implements ChineseContact.Chin mContext = (Activity) rootView.getContext(); mChinesePresenter = new ChinesePresenter(mContext); mChinesePresenter.attachView(this); - mChinesePresenter.setLifecycle(lifecycleSubject); + mChinesePresenter.setLifecycle(getLifecycleSubject()); ButterKnife.bind(this, rootView); initView(); } @@ -258,7 +259,11 @@ public class ChineseFragment extends BaseFragment implements ChineseContact.Chin iv_dictation.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - OpenApkUtils.getInstance().openPrecision("1"); + if (OpenApkUtils.getInstance().isNewAiApp()) { + OpenApkUtils.getInstance().openAiPrecision(0, "语文"); + } else { + OpenApkUtils.getInstance().openPrecision("1"); + } } }); iv_character.setOnClickListener(new View.OnClickListener() { diff --git a/app/src/main/java/com/uiui/zyos/fragment/english/EnglishFragment.java b/app/src/main/java/com/uiui/zyos/fragment/english/EnglishFragment.java index 0470b98..34cf31a 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/english/EnglishFragment.java +++ b/app/src/main/java/com/uiui/zyos/fragment/english/EnglishFragment.java @@ -202,7 +202,11 @@ public class EnglishFragment extends BaseFragment { imageView11.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - OpenApkUtils.getInstance().openPrecision("1"); + if (OpenApkUtils.getInstance().isNewAiApp()) { + OpenApkUtils.getInstance().openAiPrecision(0, "英语"); + } else { + OpenApkUtils.getInstance().openPrecision("1"); + } } }); } diff --git a/app/src/main/java/com/uiui/zyos/fragment/main/MainContact.java b/app/src/main/java/com/uiui/zyos/fragment/main/MainContact.java index 1609efd..eb14b02 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/main/MainContact.java +++ b/app/src/main/java/com/uiui/zyos/fragment/main/MainContact.java @@ -1,7 +1,7 @@ package com.uiui.zyos.fragment.main; -import com.uiui.zyos.base.BasePresenter; -import com.uiui.zyos.base.BaseView; +import com.uiui.zyos.base.mvp.BasePresenter; +import com.uiui.zyos.base.mvp.BaseView; public class MainContact { public interface Presenter extends BasePresenter { diff --git a/app/src/main/java/com/uiui/zyos/fragment/main/MainFragment.java b/app/src/main/java/com/uiui/zyos/fragment/main/MainFragment.java index 0ec41f9..58da4a3 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/main/MainFragment.java +++ b/app/src/main/java/com/uiui/zyos/fragment/main/MainFragment.java @@ -18,7 +18,7 @@ import android.view.ViewGroup; import com.uiui.zyos.R; import com.uiui.zyos.base.BaseFragment; -import com.uiui.zyos.base.viewpager.BaseFragmentPagerAdapter; +import com.uiui.zyos.view.viewpager.BaseFragmentPagerAdapter; import com.uiui.zyos.fragment.subject.SubjectFragment; import com.uiui.zyos.fragment.user.UserFragment; import com.uiui.zyos.utils.OpenApkUtils; @@ -133,7 +133,7 @@ public class MainFragment extends BaseFragment implements MainContact.MainView { mContext = (FragmentActivity) rootView.getContext(); mPresenter = new MainFPresenter(mContext); mPresenter.attachView(this); - mPresenter.setLifecycle(lifecycleSubject); + mPresenter.setLifecycle(getLifecycleSubject()); ButterKnife.bind(this, rootView); initView(); } diff --git a/app/src/main/java/com/uiui/zyos/fragment/math/MathFragment.java b/app/src/main/java/com/uiui/zyos/fragment/math/MathFragment.java index 392cc91..531c553 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/math/MathFragment.java +++ b/app/src/main/java/com/uiui/zyos/fragment/math/MathFragment.java @@ -170,7 +170,7 @@ public class MathFragment extends BaseFragment { cl_classical.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_ARITHMETIC_PACKAGE_NAME,JxwPackageConfig.JXW_ARITHMETIC_CLASS_NAME); + OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_ARITHMETIC_PACKAGE_NAME, JxwPackageConfig.JXW_ARITHMETIC_CLASS_NAME); } }); @@ -183,7 +183,7 @@ public class MathFragment extends BaseFragment { cl_number.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_KNOW_MATHEMATICS_PACKAGE_NAME,JxwPackageConfig.JXW_KNOW_MATHEMATICS_CLASS_NAME); + OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_KNOW_MATHEMATICS_PACKAGE_NAME, JxwPackageConfig.JXW_KNOW_MATHEMATICS_CLASS_NAME); } }); cl_formula.setOnClickListener(new View.OnClickListener() { @@ -196,7 +196,11 @@ public class MathFragment extends BaseFragment { iv_precision_learning.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - OpenApkUtils.getInstance().openPrecision("2"); + if (OpenApkUtils.getInstance().isNewAiApp()) { + OpenApkUtils.getInstance().openAiPrecision(0, "数学"); + } else { + OpenApkUtils.getInstance().openPrecision("2"); + } } }); } diff --git a/app/src/main/java/com/uiui/zyos/fragment/physics/PhysicsFragment.java b/app/src/main/java/com/uiui/zyos/fragment/physics/PhysicsFragment.java index 44a77c3..f62ceba 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/physics/PhysicsFragment.java +++ b/app/src/main/java/com/uiui/zyos/fragment/physics/PhysicsFragment.java @@ -2,15 +2,14 @@ package com.uiui.zyos.fragment.physics; import android.app.Activity; import android.os.Bundle; - -import androidx.fragment.app.Fragment; - import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; +import androidx.fragment.app.Fragment; + import com.uiui.zyos.R; import com.uiui.zyos.base.BaseFragment; import com.uiui.zyos.utils.OpenApkUtils; @@ -49,7 +48,7 @@ public class PhysicsFragment extends BaseFragment { public PhysicsFragment() { // Required empty public constructor - Log.e(TAG, "PhysicsFragment: " ); + Log.e(TAG, "PhysicsFragment: "); } /** @@ -110,7 +109,7 @@ public class PhysicsFragment extends BaseFragment { rootView = null; } - private void initView(){ + private void initView() { imageView1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -132,7 +131,11 @@ public class PhysicsFragment extends BaseFragment { imageView4.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - OpenApkUtils.getInstance().openPrecision("1"); + if (OpenApkUtils.getInstance().isNewAiApp()) { + OpenApkUtils.getInstance().openAiPrecision(0, "物理"); + } else { + OpenApkUtils.getInstance().openPrecision("1"); + } } }); diff --git a/app/src/main/java/com/uiui/zyos/fragment/precision/PrecisionFragment.java b/app/src/main/java/com/uiui/zyos/fragment/precision/PrecisionFragment.java index ad53f9e..8e8291e 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/precision/PrecisionFragment.java +++ b/app/src/main/java/com/uiui/zyos/fragment/precision/PrecisionFragment.java @@ -118,15 +118,16 @@ public class PrecisionFragment extends BaseFragment { public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); Log.e(TAG, "setUserVisibleHint: isVisibleToUser = " + isVisibleToUser); - if (isVisibleToUser){ - if (mUserVisibleHintCallback!=null) { + if (isVisibleToUser) { + if (mUserVisibleHintCallback != null) { mUserVisibleHintCallback.onUserVisibleHint(); } } } private ARStudyFragment.UserVisibleHintCallback mUserVisibleHintCallback; - public interface UserVisibleHintCallback{ + + public interface UserVisibleHintCallback { void onUserVisibleHint(); } @@ -138,31 +139,51 @@ public class PrecisionFragment extends BaseFragment { iv_bunk.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - OpenApkUtils.getInstance().openPrecision("1"); + if (OpenApkUtils.getInstance().isNewAiApp()) { + OpenApkUtils.getInstance().openAiPrecision(0, "语文"); + } else { + OpenApkUtils.getInstance().openPrecision("1"); + } } }); iv_paper.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - OpenApkUtils.getInstance().openPrecision("3"); + if (OpenApkUtils.getInstance().isNewAiApp()) { + OpenApkUtils.getInstance().openAiPrecision(5, "语文"); + } else { + OpenApkUtils.getInstance().openPrecision("3"); + } } }); iv_test.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - OpenApkUtils.getInstance().openPrecision("2"); + if (OpenApkUtils.getInstance().isNewAiApp()) { + OpenApkUtils.getInstance().openAiPrecision(1, "语文"); + } else { + OpenApkUtils.getInstance().openPrecision("2"); + } } }); iv_book.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - OpenApkUtils.getInstance().openPrecision("4"); + if (OpenApkUtils.getInstance().isNewAiApp()) { + OpenApkUtils.getInstance().openAiPrecision(4, "语文"); + } else { + OpenApkUtils.getInstance().openPrecision("4"); + } } }); iv_favorites.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - OpenApkUtils.getInstance().openPrecision("5"); + if (OpenApkUtils.getInstance().isNewAiApp()) { + OpenApkUtils.getInstance().openAiPrecision(3, "语文"); + } else { + OpenApkUtils.getInstance().openPrecision("5"); + } } }); } diff --git a/app/src/main/java/com/uiui/zyos/fragment/subject/SubjectFragment.java b/app/src/main/java/com/uiui/zyos/fragment/subject/SubjectFragment.java index 1268f84..afa3bf8 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/subject/SubjectFragment.java +++ b/app/src/main/java/com/uiui/zyos/fragment/subject/SubjectFragment.java @@ -15,7 +15,7 @@ import android.view.ViewGroup; import com.flyco.tablayout.SlidingTabLayout; import com.uiui.zyos.R; import com.uiui.zyos.base.BaseFragment; -import com.uiui.zyos.base.viewpager.BaseFragmentPagerAdapter; +import com.uiui.zyos.view.viewpager.BaseFragmentPagerAdapter; import com.uiui.zyos.fragment.app.AppFragment; import com.uiui.zyos.fragment.ar.ARStudyFragment; import com.uiui.zyos.fragment.biology.BiologyFragment; diff --git a/app/src/main/java/com/uiui/zyos/fragment/user/UserContact.java b/app/src/main/java/com/uiui/zyos/fragment/user/UserContact.java index e715987..390e1ed 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/user/UserContact.java +++ b/app/src/main/java/com/uiui/zyos/fragment/user/UserContact.java @@ -2,8 +2,8 @@ package com.uiui.zyos.fragment.user; import android.graphics.Bitmap; -import com.uiui.zyos.base.BasePresenter; -import com.uiui.zyos.base.BaseView; +import com.uiui.zyos.base.mvp.BasePresenter; +import com.uiui.zyos.base.mvp.BaseView; import com.uiui.zyos.bean.BaseResponse; import com.uiui.zyos.bean.DesktopIcon; import com.uiui.zyos.bean.SnInfo; 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 f39b82b..6591f62 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 @@ -179,7 +179,7 @@ public class UserFragment extends BaseFragment implements UserContact.UserView { mContext = (FragmentActivity) rootView.getContext(); mPresenter = new UserPresenter(mContext); mPresenter.attachView(this); - mPresenter.setLifecycle(lifecycleSubject); + mPresenter.setLifecycle(getLifecycleSubject()); ButterKnife.bind(this, rootView); initView(); } @@ -318,7 +318,7 @@ public class UserFragment extends BaseFragment implements UserContact.UserView { // passwordDialog.dismiss(); // exitDesktop(); // } else { -// ToastUtil.show("密码错误"); +// Toaster.show("密码错误"); // } // } // @@ -414,7 +414,7 @@ public class UserFragment extends BaseFragment implements UserContact.UserView { cl_usedata.setVisibility(View.GONE); iv_bind.setImageDrawable(mContext.getDrawable(R.drawable.icon_device_unbind)); break; -// ToastUtil.show(getString(R.string.device_unauthorized)); +// Toaster.show(getString(R.string.device_unauthorized)); // Log.e(TAG, "setSnInfo: " + getString(R.string.device_unauthorized)); // tv_name.setText(getString(R.string.device_unauthorized)); // tv_grade.setText(getString(R.string.device_unauthorized)); diff --git a/app/src/main/java/com/uiui/zyos/fragment/user/UserPresenter.java b/app/src/main/java/com/uiui/zyos/fragment/user/UserPresenter.java index 7c471ad..a231933 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/user/UserPresenter.java +++ b/app/src/main/java/com/uiui/zyos/fragment/user/UserPresenter.java @@ -144,6 +144,14 @@ public class UserPresenter implements UserContact.Presenter { @Override public void getInstalledApp() { ArrayList desktopIcons = AppManager.getInstance().getFilterAppList(); + + DesktopIcon appstoreDesktopIcon = new DesktopIcon(); + appstoreDesktopIcon.setLable("应用市场"); + appstoreDesktopIcon.setPackageName(AppManager.APPSTORE_PACKAGE_NAME); + appstoreDesktopIcon.setPackageName(AppManager.APPSTORE_CLASS_NAME); + appstoreDesktopIcon.setIcon(mContext.getDrawable(R.drawable.com_android_appstore)); + desktopIcons.add(desktopIcons.size(), appstoreDesktopIcon); + DesktopIcon updateDesktopIcon = new DesktopIcon(); updateDesktopIcon.setLable("应用更新"); updateDesktopIcon.setPackageName(AppManager.UPDATE_NAME); diff --git a/app/src/main/java/com/uiui/zyos/jxw/JxwPackageConfig.java b/app/src/main/java/com/uiui/zyos/jxw/JxwPackageConfig.java index b0b4298..b883da2 100644 --- a/app/src/main/java/com/uiui/zyos/jxw/JxwPackageConfig.java +++ b/app/src/main/java/com/uiui/zyos/jxw/JxwPackageConfig.java @@ -30,7 +30,8 @@ public class JxwPackageConfig { public static final String JXW_CHARACTER_CLASS_NAME = "com.jxw.characterlearning.MainActivity"; /*Ai精准学*/ public static final String JXW_PRECISION_PACKAGE_NAME = "com.jxw.question"; - public static final String JXW_PRECISION_CLASS_NAME = "com.jxw.question.activity.SplashActivity"; + public static final String JXW_PRECISION_CLASS_NAME_85 = "com.jxw.question.activity.SplashActivity"; + public static final String JXW_PRECISION_CLASS_NAME_1 = "com.jxw.question.module.ui.activity.ProgramEntryActivity"; /*拼音学习*/ public static final String JXW_PINYIN_PACKAGE_NAME = "com.jxw.learnchinesepinyin"; public static final String JXW_PINYIN_CLASS_NAME = "com.jxw.learnchinesepinyin.activity.MainActivity"; @@ -90,5 +91,7 @@ public class JxwPackageConfig { /*幼儿平台*/ public static final String JXW_YOUER_PACKAGE_NAME = "com.jxw.youer.video"; public static final String JXW_YOUER_CLASS_NAME = "com.jxw.youer.activity.MainActivity"; - + /*模拟考场*/ + public static final String JXW_EXAMSYSTEM_NAME ="com.jxw.examsystem"; + public static final String JXW_EXAMSYSTEM_CLASS ="com.jxw.examsystem.StartExamActivity"; } \ No newline at end of file diff --git a/app/src/main/java/com/uiui/zyos/manager/AmapManager.java b/app/src/main/java/com/uiui/zyos/manager/AmapManager.java new file mode 100644 index 0000000..1029afd --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/manager/AmapManager.java @@ -0,0 +1,216 @@ +package com.uiui.zyos.manager; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.text.TextUtils; +import android.util.Log; + +import com.amap.api.location.AMapLocation; +import com.amap.api.location.AMapLocationClient; +import com.amap.api.location.AMapLocationClientOption; +import com.amap.api.location.AMapLocationListener; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.jeremyliao.liveeventbus.LiveEventBus; +import com.tencent.mmkv.MMKV; +import com.uiui.zyos.bean.BaseResponse; +import com.uiui.zyos.bean.MapBean; +import com.uiui.zyos.config.CommonConfig; +import com.uiui.zyos.gson.GsonUtils; +import com.uiui.zyos.network.NetInterfaceManager; +import com.uiui.zyos.utils.ActivationUtil; + +import java.lang.reflect.Type; + +import io.reactivex.rxjava3.annotations.NonNull; +import io.reactivex.rxjava3.core.Observer; +import io.reactivex.rxjava3.disposables.Disposable; + +public class AmapManager { + private static final String TAG = AmapManager.class.getSimpleName(); + + MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + + @SuppressLint("StaticFieldLeak") + private static AmapManager sInstance; + private Context mContext; + + private AMapLocationClient mAMapLocationClient; + private AMapLocationClientOption mAMapLocationClientOption; + private MapBean mMapBean; + + private AmapManager(Context context) { + this.mContext = context; + initAmap(); + } + + public static void init(Context context) { + if (context == null) { + throw new RuntimeException("Context is NULL"); + } + if (sInstance == null) { + sInstance = new AmapManager(context); + } + } + + public static AmapManager getInstance() { + if (sInstance == null) { + throw new IllegalStateException("You must be init AmapManager first"); + } + + return sInstance; + } + + private AMapLocationClientOption getDefaultOption() { + if (mAMapLocationClientOption == null) { + mAMapLocationClientOption = new AMapLocationClientOption(); + } + mAMapLocationClientOption.setLocationPurpose(AMapLocationClientOption.AMapLocationPurpose.SignIn); + //设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。 + mAMapLocationClientOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); + mAMapLocationClientOption.setNeedAddress(true); + //获取一次定位结果: + //该方法默认为false。 + mAMapLocationClientOption.setOnceLocation(true); + //获取最近3s内精度最高的一次定位结果: + //设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。 + // 如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会,默认为false。 + mAMapLocationClientOption.setOnceLocationLatest(true); + return mAMapLocationClientOption; + } + + public void initAmap() { + if (mAMapLocationClient == null) { + mAMapLocationClient = new AMapLocationClient(mContext); + } + mAMapLocationClient.setLocationOption(getDefaultOption()); + + //设置定位监听 + mAMapLocationClient.setLocationListener(mAMapLocationListener); + //设置场景模式后最好调用一次stop,再调用start以保证场景模式生效 + + startLocation(); + + String jsonString = mMMKV.decodeString(CommonConfig.MAP_LOCATION_JSON_KEY, ""); + if (!TextUtils.isEmpty(jsonString)) { + Gson gson = new Gson(); + Type type = new TypeToken() { + }.getType(); + mMapBean = gson.fromJson(jsonString, type); + } else { + Log.e(TAG, "initAmap: jsonString is empty"); + } + + } + + public void startLocation() { + boolean activation = ActivationUtil.isActivation(mContext); + if (!activation) { + return; + } + mAMapLocationClient.stopLocation(); + mAMapLocationClient.startLocation(); + Log.e(TAG, "initAmap: " + "startLocation"); + } + + private AMapLocationListener mAMapLocationListener = new AMapLocationListener() { + @Override + public void onLocationChanged(AMapLocation aMapLocation) { + StringBuilder sb = new StringBuilder(); + //errCode等于0代表定位成功,其他的为定位失败,具体的可以参照官网定位错误码说明 + if (aMapLocation.getErrorCode() == 0) { + Log.e(TAG, "onLocationChanged: " + "定位成功"); + updateAddress(aMapLocation); + mMapBean = getMapBean(aMapLocation); + saveMapResult(mMapBean); + LiveEventBus.get("MapBean") + .post(mMapBean); + Log.e(TAG, "onLocationChanged: " + aMapLocation.getAddress()); + sb.append(aMapLocation.getAddress()).append("\n"); + + } else { + //定位失败 + sb.append("定位失败" + "\n"); + sb.append(aMapLocation.getErrorInfo()); + Log.e(TAG, "onLocationChanged: " + "定位失败"); + } + Log.e(TAG, "amap: " + sb.toString()); + } + }; + + private void updateAddress(AMapLocation aMapLocation) { + boolean activation = ActivationUtil.isActivation(mContext); + if (!activation) { + return; + } + NetInterfaceManager.getInstance().getUpdateAddressObservable(aMapLocation.getAddress() + , aMapLocation.getLongitude(), aMapLocation.getLatitude() + ) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e("updateAddress", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse baseResponse) { + Log.e("updateAddress", "onNext: " + baseResponse); + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("updateAddress", "onError: " + e.getMessage()); + } + + @Override + public void onComplete() { + Log.e("updateAddress", "onComplete: "); + } + }); + } + + public String getLocationTude() { + if (mMapBean != null) { + return mMapBean.getLongitude() + "," + mMapBean.getLatitude(); + } else { + startLocation(); + return CommonConfig.DEFAULT_LOCATION_TUDE; + } + } + + public String getDistrict() { + if (mMapBean != null) { + return mMapBean.getDistrict(); + } else { + startLocation(); + return CommonConfig.DEFAULT_LOCATION_DISTRICT; + } + } + + private MapBean getMapBean(AMapLocation location) { + MapBean mapBean = new MapBean(); + mapBean.setLongitude(location.getLongitude()); + mapBean.setLatitude(location.getLatitude()); + mapBean.setAdcode(location.getAdCode()); + mapBean.setAddress(location.getAddress()); + mapBean.setCity(location.getCity()); + mapBean.setCityCode(location.getCityCode()); + mapBean.setCountry(location.getCountry()); + mapBean.setCountryCode(location.getAdCode()); + mapBean.setDistrict(location.getDistrict()); + mapBean.setProvince(location.getProvince()); + mapBean.setStreet(location.getStreet()); + mapBean.setStreetNumber(location.getStreetNum()); + mapBean.setTown(location.getStreet()); + mapBean.setLocationDescribe(location.getLocationDetail()); + Log.e(TAG, "getMapBean: " + GsonUtils.toJSONString(mapBean)); + return mapBean; + + } + + private void saveMapResult(MapBean mapBean) { + Log.e(TAG, "saveMapResult: " + GsonUtils.toJSONString(mapBean)); + mMMKV.encode(CommonConfig.MAP_LOCATION_JSON_KEY, GsonUtils.toJSONString(mapBean)); + } + +} diff --git a/app/src/main/java/com/uiui/zyos/manager/AppManager.java b/app/src/main/java/com/uiui/zyos/manager/AppManager.java index 8015035..2021679 100644 --- a/app/src/main/java/com/uiui/zyos/manager/AppManager.java +++ b/app/src/main/java/com/uiui/zyos/manager/AppManager.java @@ -30,8 +30,11 @@ public class AppManager { private static final String TAG = AppManager.class.getSimpleName(); public static final String ADD_NAME = "com.zyos.add"; + public static final String APPSTORE_PACKAGE_NAME = "com.uiui.zyappstore"; + public static final String APPSTORE_CLASS_NAME = "com.uiui.zyappstore.activity.MainActivity"; public static final String UPDATE_NAME = "com.zyos.update"; public static final String MANUAL_NAME = "com.zyos.manual"; + public static final String SERVICE_NAME = "com.zyos.service"; private static final String SHOW_PACKAGE_KEY = "SHOW_PACKAGE_KEY"; @SuppressLint("StaticFieldLeak") diff --git a/app/src/main/java/com/uiui/zyos/manager/RemoteManager.java b/app/src/main/java/com/uiui/zyos/manager/RemoteManager.java index 310e2b8..cffdb49 100644 --- a/app/src/main/java/com/uiui/zyos/manager/RemoteManager.java +++ b/app/src/main/java/com/uiui/zyos/manager/RemoteManager.java @@ -60,7 +60,6 @@ public class RemoteManager { for (ConnectedListener listener : mListeners) { listener.onConnected(); } - getLocation(); try { String sn = mGetInfoInterface.getSerial(); CrashReport.setDeviceId(mContext, sn); @@ -197,19 +196,6 @@ public class RemoteManager { return mMMKV.decodeString(SN_KEY, ""); } - public void getLocation() { - if (mGetInfoInterface != null) { - try { - String jsonString = mGetInfoInterface.getMapResult(); - mMMKV.encode(CommonConfig.MAP_LOCATION_JSON_KEY, jsonString); - } catch (Exception e) { - Log.e(TAG, "getMapResult: " + e.getMessage()); - } - } else { - bindInfoService(); - } - } - public String getAppUsedStatistics() { if (mGetInfoInterface != null) { try { @@ -224,72 +210,6 @@ public class RemoteManager { return null; } - public MapBean getMapBean() { - String jsonString = mMMKV.decodeString(CommonConfig.MAP_LOCATION_JSON_KEY); - if (TextUtils.isEmpty(jsonString)) { - return null; - } else { - Gson gson = new Gson(); - Type type = new TypeToken() { - }.getType(); - MapBean mapBean = gson.fromJson(jsonString, type); - mMMKV.encode(CommonConfig.MAP_ADDRESS_KEY, mapBean.getAddress() + mapBean.getLocationDescribe()); - mMMKV.encode(CommonConfig.MAP_LONGITUDE_KEY, mapBean.getLongitude()); - mMMKV.encode(CommonConfig.MAP_LATITUDE_KEY, mapBean.getLatitude()); - return mapBean; - } - } - - public String getCity() { - MapBean mapBean = getMapBean(); - if (mapBean == null) { - getLocation(); - return "北京"; - } else { - return mapBean.getCity(); - } - } - - public String getCityDistrict() { - MapBean mapBean = getMapBean(); - if (mapBean == null) { - getLocation(); - return "北京"; - } else { - return mapBean.getCity() + "\t" + mapBean.getDistrict(); - } - } - - public double getLongitude() { - MapBean mapBean = getMapBean(); - if (mapBean == null) { - getLocation(); - return 0.0; - } else { - return mapBean.getLongitude(); - } - } - - public double getLatitude() { - MapBean mapBean = getMapBean(); - if (mapBean == null) { - getLocation(); - return 0.0; - } else { - return mapBean.getLatitude(); - } - } - - public String getLocationTude() { - MapBean mapBean = getMapBean(); - if (mapBean == null) { - getLocation(); - return "0.0"; - } else { - return mapBean.getLongitude() + "," + mapBean.getLatitude(); - } - } - public boolean getSnIsActivation() { try { return mGetInfoInterface.SnIsActivation(); 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 f479b5c..f379a5c 100644 --- a/app/src/main/java/com/uiui/zyos/network/NetInterfaceManager.java +++ b/app/src/main/java/com/uiui/zyos/network/NetInterfaceManager.java @@ -31,6 +31,7 @@ import com.uiui.zyos.network.api.CloudLessonAppApi; 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.UserInfoControl; import com.uiui.zyos.network.interceptor.RepeatRequestInterceptor; @@ -216,6 +217,14 @@ public class NetInterfaceManager { .observeOn(AndroidSchedulers.mainThread()); } + public Observable getUpdateAddressObservable(String address, double longitude, double latitude) { + return mRetrofit.create(UpdateAddressApi.class) + .updateAddress(RemoteManager.getInstance().getSerial(), address, longitude, latitude) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); + } + + /* * * execution 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 2ea31b5..87e8092 100644 --- a/app/src/main/java/com/uiui/zyos/network/UrlAddress.java +++ b/app/src/main/java/com/uiui/zyos/network/UrlAddress.java @@ -9,6 +9,8 @@ public class UrlAddress { public static final String GET_USER_AVATAR_INFO = "sn/getUserAvatarInfo"; /*获取统计*/ public static final String GET_STUDY_STAT = "Sn/getStudyStat"; + /*上传地址信息*/ + public static final String UPDATE_ADDRESS = "sn/update-address"; /*应用使用记录*/ public static final String APP_USAGE_RECORD = "appUsageRecord"; @@ -19,6 +21,7 @@ public class UrlAddress { /*爱心提醒通知成功*/ public static final String UPDATE_ALARM_CLOCK = "updateAlarmClock"; + /*网课模式*/ public final static String GET_CLOUD_LESSON = "Control/getCloudLessonSetting"; public final static String GET_CLOUD_LESSON_APP = "Control/getCloudLessonApp"; diff --git a/app/src/main/java/com/uiui/zyos/network/api/UpdateAddressApi.java b/app/src/main/java/com/uiui/zyos/network/api/UpdateAddressApi.java new file mode 100644 index 0000000..3b0eba7 --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/network/api/UpdateAddressApi.java @@ -0,0 +1,20 @@ +package com.uiui.zyos.network.api; + +import com.uiui.zyos.bean.BaseResponse; +import com.uiui.zyos.network.UrlAddress; + +import io.reactivex.rxjava3.core.Observable; +import retrofit2.http.Field; +import retrofit2.http.FormUrlEncoded; +import retrofit2.http.POST; + +public interface UpdateAddressApi { + @FormUrlEncoded + @POST(UrlAddress.UPDATE_ADDRESS) + Observable updateAddress( + @Field("sn") String sn, + @Field("address") String address, + @Field("longitude") double longitude, + @Field("latitude") double latitude + ); +} diff --git a/app/src/main/java/com/uiui/zyos/push/PushManager.java b/app/src/main/java/com/uiui/zyos/push/PushManager.java index 44c322a..4ce1821 100644 --- a/app/src/main/java/com/uiui/zyos/push/PushManager.java +++ b/app/src/main/java/com/uiui/zyos/push/PushManager.java @@ -7,7 +7,7 @@ import android.content.Intent; import com.uiui.zyos.disklrucache.CacheHelper; import com.uiui.zyos.network.NetInterfaceManager; -import com.uiui.zyos.utils.ToastUtil; +import com.hjq.toast.Toaster; public class PushManager { private static final String TAG = PushManager.class.getSimpleName(); @@ -51,13 +51,13 @@ public class PushManager { public void setPushContent(String title, String extras) { switch (title) { case JIGUANG_ALARM_CLOCK: - ToastUtil.betaShow("收到推送消息: 设置闹钟"); + Toaster.debugShow("收到推送消息: 设置闹钟"); NetInterfaceManager.getInstance().getAlarmClock(); Intent intent = new Intent(SET_ALARMCLOCK); mContext.sendBroadcast(intent); break; case ONLINE_COURSE_MODE: - ToastUtil.betaShow("收到推送消息: 网课模式"); + Toaster.debugShow("收到推送消息: 网课模式"); NetInterfaceManager.getInstance().getCloudLessonSettings(); break; default: diff --git a/app/src/main/java/com/uiui/zyos/receiver/BootReceiver.java b/app/src/main/java/com/uiui/zyos/receiver/BootReceiver.java index e766409..a20534b 100644 --- a/app/src/main/java/com/uiui/zyos/receiver/BootReceiver.java +++ b/app/src/main/java/com/uiui/zyos/receiver/BootReceiver.java @@ -6,7 +6,6 @@ import android.content.Intent; import android.text.TextUtils; import android.util.Log; -import com.uiui.zyos.service.main.MainService; import java.util.concurrent.TimeUnit; @@ -18,7 +17,7 @@ import io.reactivex.rxjava3.disposables.Disposable; public class BootReceiver extends BroadcastReceiver { private static final String TAG = BootReceiver.class.getSimpleName(); public static final String BOOT_COMPLETED = "zuoyeos.action.BOOT_COMPLETED"; - public static final String SOS = "zuoyeos.action.SOS"; + public static final String SOS = "zyos.action.SOS"; static { getLockedState(); @@ -72,7 +71,7 @@ public class BootReceiver extends BroadcastReceiver { // Intent alarmIntent = new Intent(MessageReceiver.SET_ALARMCLOCK); // context.sendBroadcast(alarmIntent); case Intent.ACTION_BOOT_COMPLETED: - context.startService(new Intent(context, MainService.class)); +// context.startService(new Intent(context, MainService.class)); break; // TODO: 2023/6/17 频繁唤醒耗电 // case Intent.ACTION_BATTERY_CHANGED: diff --git a/app/src/main/java/com/uiui/zyos/receiver/InstallResultReceiver.java b/app/src/main/java/com/uiui/zyos/receiver/InstallResultReceiver.java index c5fe60d..da1cc4c 100644 --- a/app/src/main/java/com/uiui/zyos/receiver/InstallResultReceiver.java +++ b/app/src/main/java/com/uiui/zyos/receiver/InstallResultReceiver.java @@ -50,7 +50,7 @@ public class InstallResultReceiver extends BroadcastReceiver { // Log.e("fht", LEGACY_STATUS); // Log.e("fht", STATUS_MESSAGE); if (STATUS_MESSAGE != null && "INSTALL_SUCCEEDED".equals(STATUS_MESSAGE)) { -// ToastUtil.show(PACKAGE_NAME + "安装成功"); +// Toaster.show(PACKAGE_NAME + "安装成功"); } } } diff --git a/app/src/main/java/com/uiui/zyos/service/main/MainSContact.java b/app/src/main/java/com/uiui/zyos/service/main/MainSContact.java index 7adac54..b748941 100644 --- a/app/src/main/java/com/uiui/zyos/service/main/MainSContact.java +++ b/app/src/main/java/com/uiui/zyos/service/main/MainSContact.java @@ -1,7 +1,7 @@ package com.uiui.zyos.service.main; -import com.uiui.zyos.base.BasePresenter; -import com.uiui.zyos.base.BaseView; +import com.uiui.zyos.base.mvp.BasePresenter; +import com.uiui.zyos.base.mvp.BaseView; import com.uiui.zyos.bean.AlarmClockData; import java.util.List; diff --git a/app/src/main/java/com/uiui/zyos/service/main/MainService.java b/app/src/main/java/com/uiui/zyos/service/main/MainService.java index 62b56df..ea63180 100644 --- a/app/src/main/java/com/uiui/zyos/service/main/MainService.java +++ b/app/src/main/java/com/uiui/zyos/service/main/MainService.java @@ -1,11 +1,9 @@ package com.uiui.zyos.service.main; import android.content.BroadcastReceiver; -import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; -import android.os.Build; import android.os.IBinder; import android.text.TextUtils; import android.util.Log; @@ -13,16 +11,15 @@ import android.util.Log; import com.blankj.utilcode.util.NetworkUtils; import com.uiui.zyos.activity.NoticeActivity; import com.uiui.zyos.alarm.AlarmUtils; -import com.uiui.zyos.base.BaseService; +import com.uiui.zyos.base.rx.BaseRxService; import com.uiui.zyos.bean.AlarmClockData; -import com.uiui.zyos.jxw.JxwPackageConfig; import com.uiui.zyos.utils.Utils; import java.util.Calendar; import java.util.HashMap; import java.util.List; -public class MainService extends BaseService implements MainSContact.MainSView, NetworkUtils.OnNetworkStatusChangedListener { +public class MainService extends BaseRxService implements MainSContact.MainSView, NetworkUtils.OnNetworkStatusChangedListener { private static final String TAG = MainService.class.getSimpleName(); public MainSPresenter mPresenter; @@ -56,7 +53,7 @@ public class MainService extends BaseService implements MainSContact.MainSView, Log.e(TAG, "onCreate: "); mPresenter = new MainSPresenter(this); mPresenter.attachView(this); - mPresenter.setLifecycle(lifecycleSubject); + mPresenter.setLifecycle(getLifecycleSubject()); mPresenter.getCloudLessonSettings(); // registerAlarmReceiver(); NetworkUtils.registerNetworkStatusChangedListener(this); diff --git a/app/src/main/java/com/uiui/zyos/utils/ActivationUtil.java b/app/src/main/java/com/uiui/zyos/utils/ActivationUtil.java new file mode 100644 index 0000000..be53869 --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/utils/ActivationUtil.java @@ -0,0 +1,90 @@ +package com.uiui.zyos.utils; + +import android.content.Context; +import android.provider.Settings; + +import com.uiui.zyos.config.CommonConfig; + +public class ActivationUtil { + + /*写入1为激活*/ + private static final int ACTIVATED_KEY = 1; + private static final int INACTIVATED_KEY = 0; + /*默认激活码类型*/ + private static final int DEFAULT_CODE_TYPE = -1; + /*默认过期时间*/ + private static final int DEFAULT_EXPIRE_TIME = -1; + + + /** + * 获取激活状态 + * + * @param context + * @return + */ + public static int getActivationStateCode(Context context) { + int activation = Settings.Global.getInt(context.getContentResolver(), CommonConfig.UIUI_ACTIVATION_KEY, INACTIVATED_KEY); + return activation; + } + + /** + * 是否激活 + * + * @param context + * @return + */ + public static boolean isActivation(Context context) { + return getActivationStateCode(context) == ACTIVATED_KEY; + } + + /** + * 设置激活状态 + * + * @param context + * @param code + */ + public static void setActivation(Context context, int code) { + Settings.Global.putInt(context.getContentResolver(), CommonConfig.UIUI_ACTIVATION_KEY, code); + } + + /** + * 设置激活码类型 + * + * @param context + * @param code + */ + public static void setActivationCodeType(Context context, int code) { + Settings.Global.putInt(context.getContentResolver(), CommonConfig.UIUI_CODE_TYPE_KEY, code); + } + + /** + * 获取激活码类型 + * + * @param context + * @return + */ + public static int getActivationCodeType(Context context) { + return Settings.Global.getInt(context.getContentResolver(), CommonConfig.UIUI_CODE_TYPE_KEY, DEFAULT_CODE_TYPE); + } + + /** + * 设置过期时间 + * + * @param context + * @param expireTime + */ + public static void setActivationExpireTime(Context context, long expireTime) { + Settings.Global.putLong(context.getContentResolver(), CommonConfig.UIUI_EXPIRE_TIME_KEY, expireTime); + } + + /** + * 获取过期时间 + * + * @param context + * @return + */ + public static long getActivationExpireTime(Context context) { + return Settings.Global.getLong(context.getContentResolver(), CommonConfig.UIUI_EXPIRE_TIME_KEY, DEFAULT_EXPIRE_TIME); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/uiui/zyos/utils/OpenApkUtils.java b/app/src/main/java/com/uiui/zyos/utils/OpenApkUtils.java index 509c4da..44c6b79 100644 --- a/app/src/main/java/com/uiui/zyos/utils/OpenApkUtils.java +++ b/app/src/main/java/com/uiui/zyos/utils/OpenApkUtils.java @@ -5,12 +5,16 @@ import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.os.Build; import android.provider.Settings; import android.text.TextUtils; import android.util.Log; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; +import com.hjq.toast.Toaster; import com.tencent.mmkv.MMKV; import com.uiui.zyos.bean.LessonJson; import com.uiui.zyos.config.CommonConfig; @@ -61,14 +65,14 @@ public class OpenApkUtils { int is_activation = Settings.Global.getInt(mContext.getContentResolver(), CommonConfig.UIUI_ACTIVATION_KEY, 0); if (is_activation != 1) { ApkUtils.openPackage(mContext, "com.uiui.zy", "com.uiui.zy.activity.main.MainActivity"); - ToastUtil.show("请激活设备后使用"); + Toaster.show("请激活设备后使用"); } return is_activation == 1; } public boolean openPackageWithArgs(String packageName, String className, String name, String args) { if (!ApkUtils.isAvailable(mContext, packageName)) { - ToastUtil.show("应用未安装"); + Toaster.show("应用未安装"); return false; } ComponentName cn = new ComponentName(packageName, className); @@ -181,35 +185,35 @@ public class OpenApkUtils { }}; private void sendRuningApp(String packageName) { - AppUsedTimeUtils.getInstance().setAppPackageName(packageName); - AppUsedTimeUtils.getInstance().setStartTime(System.currentTimeMillis()); - AppUsedTimeUtils.getInstance().sendRunningApp(() -> { - }); +// AppUsedTimeUtils.getInstance().setAppPackageName(packageName); +// AppUsedTimeUtils.getInstance().setStartTime(System.currentTimeMillis()); +// AppUsedTimeUtils.getInstance().sendRunningApp(() -> { +// }); } public void openApp(String packageName) { if (!ApkUtils.isAvailable(mContext, packageName)) { - ToastUtil.show("应用未安装"); + Toaster.show("应用未安装"); return; } if (isCloudLessonMod(packageName)) { ApkUtils.openPackage(mContext, packageName); sendRuningApp(packageName); } else { - ToastUtil.show("专注模式只允许使用指定应用"); + Toaster.show("专注模式只允许使用指定应用"); } } public void openApp(String packageName, String className) { if (!ApkUtils.isAvailable(mContext, packageName)) { - ToastUtil.show("应用未安装"); + Toaster.show("应用未安装"); return; } if (isCloudLessonMod(packageName)) { ApkUtils.openPackage(mContext, packageName, className); sendRuningApp(packageName); } else { - ToastUtil.show("专注模式只允许使用指定应用"); + Toaster.show("专注模式只允许使用指定应用"); } } @@ -224,7 +228,7 @@ public class OpenApkUtils { sendRuningApp(packageName); } } else { - ToastUtil.show("专注模式只允许使用指定应用"); + Toaster.show("专注模式只允许使用指定应用"); } } @@ -239,7 +243,7 @@ public class OpenApkUtils { sendRuningApp(packageName); } } else { - ToastUtil.show("专注模式只允许使用指定应用"); + Toaster.show("专注模式只允许使用指定应用"); } } @@ -254,7 +258,7 @@ public class OpenApkUtils { sendRuningApp(packageName); } } else { - ToastUtil.show("专注模式只允许使用指定应用"); + Toaster.show("专注模式只允许使用指定应用"); } } @@ -269,7 +273,7 @@ public class OpenApkUtils { sendRuningApp(packageName); } } else { - ToastUtil.show("专注模式只允许使用指定应用"); + Toaster.show("专注模式只允许使用指定应用"); } } @@ -282,9 +286,35 @@ public class OpenApkUtils { if (isCloudLessonMod(packageName)) { if (openPackageWithArgs(packageName, className, "StartArgs", "中华文化")) { sendRuningApp(packageName); + } else { + Toaster.show("打开失败:应用未安装"); } } else { - ToastUtil.show("专注模式只允许使用指定应用"); + Toaster.show("专注模式只允许使用指定应用"); + } + } + + public boolean isNewAiApp() { + PackageManager pm = mContext.getPackageManager(); + PackageInfo packageInfo = null; + try { + packageInfo = pm.getPackageInfo(JxwPackageConfig.JXW_PRECISION_PACKAGE_NAME, 0); + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + if (packageInfo == null) { + return false; + } + long appVersionCode; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + appVersionCode = packageInfo.getLongVersionCode(); + } else { + appVersionCode = packageInfo.versionCode; + } + if (appVersionCode == 85) { + return false; + } else { + return true; } } @@ -293,16 +323,79 @@ public class OpenApkUtils { return; } String packageName = JxwPackageConfig.JXW_PRECISION_PACKAGE_NAME; - String className = JxwPackageConfig.JXW_PRECISION_CLASS_NAME; + String className = JxwPackageConfig.JXW_PRECISION_CLASS_NAME_85; if (isCloudLessonMod(packageName)) { if (openPackageWithArgs(packageName, className, "tiku_func_type", args)) { sendRuningApp(packageName); + } else { + Toaster.show("打开失败:应用未安装"); } } else { - ToastUtil.show("专注模式只允许使用指定应用"); + Toaster.show("专注模式只允许使用指定应用"); } } + public void openAiPrecision(int page, String subject) { + if (!checkActivation()) { + return; + } + String packageName = JxwPackageConfig.JXW_PRECISION_PACKAGE_NAME; + String className = JxwPackageConfig.JXW_PRECISION_CLASS_NAME_1; + if (isCloudLessonMod(packageName)) { + if (openAiWithArgs(packageName, className, page, subject)) { + sendRuningApp(packageName); + } else { + Toaster.show("打开失败:应用未安装"); + } + } else { + Toaster.show("专注模式只允许使用指定应用"); + } + } + + + public static final String NAME_PRIMARY_SCHOOL = "小学"; + public static final String NAME_MIDDLE_SCHOOL = "初中"; + public static final String NAME_HIGH_SCHOOL = "高中"; + + /** + * page_navigate 写死传0 + * appoint_subject_list 不需要传 + * appoint_period_name 这个是学段,一定要传 , + *

+ * public static final String NAME_PRIMARY_SCHOOL = "小学"; + * public static final String NAME_MIDDLE_SCHOOL = "初中"; + * public static final String NAME_HIGH_SCHOOL = "高中"; + *

+ * appoint_period_name字段的值是上面这三个之一 + * + * @param packageName + * @param className + * @param page + * @param subject + * @return + */ + public boolean openAiWithArgs(String packageName, String className, int page, String subject) { + if (!ApkUtils.isAvailable(mContext, packageName)) { + Toaster.show("应用未安装"); + return false; + } + ComponentName cn = new ComponentName(packageName, className); + Intent intent = new Intent(); + intent.setComponent(cn); + intent.putExtra("page_navigate", page); + intent.putExtra("appoint_subject_name", subject); + intent.putExtra("appoint_period_name", NAME_HIGH_SCHOOL); + intent.addCategory(Intent.CATEGORY_LAUNCHER); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); + try { + mContext.startActivity(intent); + return true; + } catch (Exception e) { + Log.e(TAG, "openPackageWithArgs: " + e.getMessage()); + } + return false; + } + public void openAppWithoutArgs(String packageName, String className) { if (!checkActivation()) { return; @@ -310,7 +403,7 @@ public class OpenApkUtils { if (isCloudLessonMod(packageName)) { openApp(packageName, className); } else { - ToastUtil.show("专注模式只允许使用指定应用"); + Toaster.show("专注模式只允许使用指定应用"); } } @@ -325,7 +418,7 @@ public class OpenApkUtils { sendRuningApp(packageName); } } else { - ToastUtil.show("专注模式只允许使用指定应用"); + Toaster.show("专注模式只允许使用指定应用"); } } @@ -340,13 +433,13 @@ public class OpenApkUtils { sendRuningApp(packageName); } } else { - ToastUtil.show("专注模式只允许使用指定应用"); + Toaster.show("专注模式只允许使用指定应用"); } } public boolean openLetterApp(String packageName, String className) { if (!ApkUtils.isAvailable(mContext, packageName)) { - ToastUtil.show("应用未安装"); + Toaster.show("应用未安装"); return false; } ComponentName cn = new ComponentName(packageName, className); @@ -377,7 +470,7 @@ public class OpenApkUtils { sendRuningApp(packageName); } } else { - ToastUtil.show("专注模式只允许使用指定应用"); + Toaster.show("专注模式只允许使用指定应用"); } } diff --git a/app/src/main/java/com/uiui/zyos/utils/ToastUtil.java b/app/src/main/java/com/uiui/zyos/utils/ToastUtil.java deleted file mode 100644 index 0b43f5a..0000000 --- a/app/src/main/java/com/uiui/zyos/utils/ToastUtil.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.uiui.zyos.utils; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Color; -import android.os.Build; -import android.os.Handler; -import android.os.Looper; -import android.util.Log; -import android.widget.Toast; - -import com.blankj.utilcode.util.ToastUtils; -import com.uiui.zyos.BuildConfig; - - -/** - * Created by haoge on 2017/3/2. - */ - -public class ToastUtil { - private static final String TAG = ToastUtil.class.getSimpleName(); - @SuppressLint("StaticFieldLeak") - private static Context mContext; - private static Handler mainHandler = new Handler(Looper.getMainLooper()); - private static Toast debugToast; - private static Toast toast; - - - @SuppressLint("ShowToast") - public static void init(Context context) { - mContext = context; - toast = Toast.makeText(mContext, "", Toast.LENGTH_SHORT); - debugToast = Toast.makeText(mContext, "", Toast.LENGTH_SHORT); - - } - - private static long time1 = 0L; - private static long time2 = 0L; - - public static void show(final String msg) { - ToastUtils.make() -// .setBgColor(ColorUtils.getColor(R.color.toast_color)) - .setTextColor(Color.DKGRAY) -// .setGravity(Gravity.CENTER, 0, 0) - .setNotUseSystemToast() - .show(msg); - } - - public static void betaShow(final String msg) { - if (BuildConfig.DEBUG) { - ToastUtils.make() -// .setBgColor(ColorUtils.getColor(R.color.toast_color)) - .setTextColor(Color.RED) -// .setGravity(Gravity.CENTER, 0, 0) - .setNotUseSystemToast() - .setDurationIsLong(true) - .show(msg); - } else { - Log.e(TAG, "debugShow: " + msg); - } - } - - private static Toast mToast = null; - - //android 8.0以后限制 - //https://www.jianshu.com/p/d9813ad03d59 - //https://www.jianshu.com/p/050ce052b873 - public static void showToast(Context context, String text, int duration) { - if (Build.VERSION.SDK_INT == Build.VERSION_CODES.P) { - Toast.makeText(context, text, duration).show(); - } else { - if (mToast == null) { - mToast = Toast.makeText(context, text, duration); - } else { - mToast.setText(text); - mToast.setDuration(duration); - } - mToast.show(); - } - } - - // public static void showInCenter(String msg) { -// mainHandler.post(() -> { -// if (toast != null) { -// toast.setGravity(Gravity.CENTER, 0, 0); -// toast.setText(msg); -// toast.show(); -// } -// }); -// } - - -} diff --git a/app/src/main/java/com/uiui/zyos/base/CustomContent.java b/app/src/main/java/com/uiui/zyos/view/CustomContent.java similarity index 98% rename from app/src/main/java/com/uiui/zyos/base/CustomContent.java rename to app/src/main/java/com/uiui/zyos/view/CustomContent.java index ab9b9e4..df9c87d 100644 --- a/app/src/main/java/com/uiui/zyos/base/CustomContent.java +++ b/app/src/main/java/com/uiui/zyos/view/CustomContent.java @@ -1,4 +1,4 @@ -package com.uiui.zyos.base; +package com.uiui.zyos.view; import android.content.Context; import android.util.AttributeSet; diff --git a/app/src/main/java/com/uiui/zyos/base/CustomContentCallbacks.java b/app/src/main/java/com/uiui/zyos/view/CustomContentCallbacks.java similarity index 95% rename from app/src/main/java/com/uiui/zyos/base/CustomContentCallbacks.java rename to app/src/main/java/com/uiui/zyos/view/CustomContentCallbacks.java index d5b771d..952e686 100644 --- a/app/src/main/java/com/uiui/zyos/base/CustomContentCallbacks.java +++ b/app/src/main/java/com/uiui/zyos/view/CustomContentCallbacks.java @@ -1,4 +1,4 @@ -package com.uiui.zyos.base; +package com.uiui.zyos.view; // add by codemx.cn ---- 20190712 ---plus- start diff --git a/app/src/main/java/com/uiui/zyos/base/viewpager/BaseFragmentPagerAdapter.java b/app/src/main/java/com/uiui/zyos/view/viewpager/BaseFragmentPagerAdapter.java similarity index 99% rename from app/src/main/java/com/uiui/zyos/base/viewpager/BaseFragmentPagerAdapter.java rename to app/src/main/java/com/uiui/zyos/view/viewpager/BaseFragmentPagerAdapter.java index eddcc78..2ebbc93 100644 --- a/app/src/main/java/com/uiui/zyos/base/viewpager/BaseFragmentPagerAdapter.java +++ b/app/src/main/java/com/uiui/zyos/view/viewpager/BaseFragmentPagerAdapter.java @@ -1,4 +1,4 @@ -package com.uiui.zyos.base.viewpager; +package com.uiui.zyos.view.viewpager; import android.util.SparseArray; diff --git a/app/src/main/java/com/uiui/zyos/base/viewpager/SubjectViewPagerAdapter.java b/app/src/main/java/com/uiui/zyos/view/viewpager/SubjectViewPagerAdapter.java similarity index 94% rename from app/src/main/java/com/uiui/zyos/base/viewpager/SubjectViewPagerAdapter.java rename to app/src/main/java/com/uiui/zyos/view/viewpager/SubjectViewPagerAdapter.java index fff57cb..74823b6 100644 --- a/app/src/main/java/com/uiui/zyos/base/viewpager/SubjectViewPagerAdapter.java +++ b/app/src/main/java/com/uiui/zyos/view/viewpager/SubjectViewPagerAdapter.java @@ -1,4 +1,4 @@ -package com.uiui.zyos.base.viewpager; +package com.uiui.zyos.view.viewpager; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; diff --git a/app/src/main/java/com/uiui/zyos/base/viewpager/ViewPager2Adapter.java b/app/src/main/java/com/uiui/zyos/view/viewpager/ViewPager2Adapter.java similarity index 96% rename from app/src/main/java/com/uiui/zyos/base/viewpager/ViewPager2Adapter.java rename to app/src/main/java/com/uiui/zyos/view/viewpager/ViewPager2Adapter.java index 6ebd341..d2cfb4a 100644 --- a/app/src/main/java/com/uiui/zyos/base/viewpager/ViewPager2Adapter.java +++ b/app/src/main/java/com/uiui/zyos/view/viewpager/ViewPager2Adapter.java @@ -1,4 +1,4 @@ -package com.uiui.zyos.base.viewpager; +package com.uiui.zyos.view.viewpager; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; diff --git a/app/src/main/res/drawable-hdpi/com_jxw_examsystem.png b/app/src/main/res/drawable-hdpi/com_jxw_examsystem.png new file mode 100644 index 0000000..ead9ec7 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/com_jxw_examsystem.png differ diff --git a/app/src/main/res/drawable-hdpi/service_icon.png b/app/src/main/res/drawable-hdpi/service_icon.png new file mode 100644 index 0000000..e099d76 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/service_icon.png differ diff --git a/app/src/main/res/drawable-hdpi/wechat_service.png b/app/src/main/res/drawable-hdpi/wechat_service.png new file mode 100644 index 0000000..169ffa6 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/wechat_service.png differ diff --git a/app/src/main/res/layout-land/fragment_chinese.xml b/app/src/main/res/layout-land/fragment_chinese.xml index bbcc69e..99b5e94 100644 --- a/app/src/main/res/layout-land/fragment_chinese.xml +++ b/app/src/main/res/layout-land/fragment_chinese.xml @@ -1,5 +1,5 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_complex.xml b/app/src/main/res/layout-land/fragment_complex.xml index fc83ba5..71a0340 100644 --- a/app/src/main/res/layout-land/fragment_complex.xml +++ b/app/src/main/res/layout-land/fragment_complex.xml @@ -1,5 +1,5 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout-sw800dp/fragment_chinese.xml b/app/src/main/res/layout-sw800dp/fragment_chinese.xml index 56e0f7a..be2d9ef 100644 --- a/app/src/main/res/layout-sw800dp/fragment_chinese.xml +++ b/app/src/main/res/layout-sw800dp/fragment_chinese.xml @@ -1,5 +1,5 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout-sw800dp/fragment_complex.xml b/app/src/main/res/layout-sw800dp/fragment_complex.xml index 9f2b695..e6bf6a5 100644 --- a/app/src/main/res/layout-sw800dp/fragment_complex.xml +++ b/app/src/main/res/layout-sw800dp/fragment_complex.xml @@ -1,5 +1,5 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index adeacc6..7c51c96 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -68,8 +68,6 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_app.xml b/app/src/main/res/layout/fragment_app.xml new file mode 100644 index 0000000..e5486c8 --- /dev/null +++ b/app/src/main/res/layout/fragment_app.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_ar_study.xml b/app/src/main/res/layout/fragment_ar_study.xml new file mode 100644 index 0000000..a62d91a --- /dev/null +++ b/app/src/main/res/layout/fragment_ar_study.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_biology.xml b/app/src/main/res/layout/fragment_biology.xml new file mode 100644 index 0000000..b13d959 --- /dev/null +++ b/app/src/main/res/layout/fragment_biology.xml @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_chemical.xml b/app/src/main/res/layout/fragment_chemical.xml new file mode 100644 index 0000000..d361a3d --- /dev/null +++ b/app/src/main/res/layout/fragment_chemical.xml @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_chinese.xml b/app/src/main/res/layout/fragment_chinese.xml new file mode 100644 index 0000000..99b5e94 --- /dev/null +++ b/app/src/main/res/layout/fragment_chinese.xml @@ -0,0 +1,465 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_complex.xml b/app/src/main/res/layout/fragment_complex.xml new file mode 100644 index 0000000..71a0340 --- /dev/null +++ b/app/src/main/res/layout/fragment_complex.xml @@ -0,0 +1,442 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_english.xml b/app/src/main/res/layout/fragment_english.xml new file mode 100644 index 0000000..3efc02a --- /dev/null +++ b/app/src/main/res/layout/fragment_english.xml @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml new file mode 100644 index 0000000..337781a --- /dev/null +++ b/app/src/main/res/layout/fragment_main.xml @@ -0,0 +1,297 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_math.xml b/app/src/main/res/layout/fragment_math.xml new file mode 100644 index 0000000..b1706b8 --- /dev/null +++ b/app/src/main/res/layout/fragment_math.xml @@ -0,0 +1,418 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_physics.xml b/app/src/main/res/layout/fragment_physics.xml new file mode 100644 index 0000000..8a2b22d --- /dev/null +++ b/app/src/main/res/layout/fragment_physics.xml @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_precision.xml b/app/src/main/res/layout/fragment_precision.xml new file mode 100644 index 0000000..3f0643e --- /dev/null +++ b/app/src/main/res/layout/fragment_precision.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_subject.xml b/app/src/main/res/layout/fragment_subject.xml new file mode 100644 index 0000000..a480125 --- /dev/null +++ b/app/src/main/res/layout/fragment_subject.xml @@ -0,0 +1,38 @@ + + + + + + + + + + \ 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 new file mode 100644 index 0000000..bedc29f --- /dev/null +++ b/app/src/main/res/layout/fragment_user.xml @@ -0,0 +1,535 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 118dd73..cce1619 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -19,7 +19,7 @@ true - + +