Browse Source

1.个人信息界面跳转逻辑
2.信用分Web界面
3.兼职工作培训界面
4.兼职工作培训Web界面
5.重置密码界面

Administrator 2 years ago
parent
commit
522fda9858
30 changed files with 1435 additions and 15 deletions
  1. 22 0
      config.gradle
  2. 2 0
      cpt_main/src/main/AndroidManifest.xml
  3. 38 2
      cpt_main/src/main/java/com/hongyegroup/cpt_main/ui/ProfileFragment.kt
  4. 5 6
      cpt_parttime/src/main/java/com/hongyegroup/cpt_parttime/ui/ResetPasswordActivity.kt
  5. 1 1
      cpt_main/src/main/java/com/hongyegroup/cpt_main/ui/SettingsActivity.kt
  6. 1 0
      cpt_main/src/main/res/layout/activity_edit_user_info.xml
  7. 4 2
      cpt_parttime/src/main/res/layout/activity_reset_password.xml
  8. 7 0
      cpt_main/src/main/res/layout/fragment_profile.xml
  9. 2 2
      cpt_main/src/main/res/layout/view_popup_user_urgent.xml
  10. 14 0
      cpt_newsfeed/src/main/java/com/hongyegroup/cpt_newsfeed/router/NewsFeedComponentServiceImpl.kt
  11. 2 2
      cpt_parttime/src/main/AndroidManifest.xml
  12. 63 0
      cpt_parttime/src/main/java/com/hongyegroup/cpt_parttime/mvvm/PartTimeTrainingViewModel.java
  13. 7 0
      cpt_parttime/src/main/java/com/hongyegroup/cpt_parttime/router/PartTimeComponentServiceImpl.kt
  14. 58 0
      cpt_parttime/src/main/java/com/hongyegroup/cpt_parttime/ui/activity/PartTimeJobTrainingActivity.java
  15. 345 0
      cpt_parttime/src/main/java/com/hongyegroup/cpt_parttime/ui/fragment/PartTimeTrainingFragment.java
  16. 9 0
      cpt_parttime/src/main/res/layout/activity_parttime_frame.xml
  17. 34 0
      cpt_parttime/src/main/res/layout/fragment_part_time_training.xml
  18. 24 0
      cs_baselib/src/main/java/com/guadou/lib_baselib/view/MyWebView.java
  19. 35 0
      cs_cptServices/build.gradle
  20. 4 0
      cs_cptServices/src/main/AndroidManifest.xml
  21. 12 0
      cs_cptServices/src/main/java/com/guadou/cs_cptservices/YYConstants.java
  22. 312 0
      cs_cptServices/src/main/java/com/guadou/cs_cptservices/ui/PartTimeJobCreditWebActivity.java
  23. 358 0
      cs_cptServices/src/main/java/com/guadou/cs_cptservices/ui/PartTimeTrainWebActivity.java
  24. BIN
      cs_cptServices/src/main/res/drawable-xhdpi/back_white.webp
  25. BIN
      cs_cptServices/src/main/res/drawable-xxhdpi/back_white.webp
  26. 35 0
      cs_cptServices/src/main/res/layout/activity_part_time_job_credit_web.xml
  27. 34 0
      cs_cptServices/src/main/res/layout/activity_part_time_train_web.xml
  28. 1 0
      cs_cptServices/src/main/res/values/colors.xml
  29. 4 0
      cs_router/src/main/java/com/guadou/cs_router/newsfeed/INewsFeedComponentServer.kt
  30. 2 0
      cs_router/src/main/java/com/guadou/cs_router/parttime/IParttimeComponentServer.kt

+ 22 - 0
config.gradle

@@ -30,5 +30,27 @@ ext {
     //Parttime-QA正式
     parttime_qa_relese_url = "https://yycircle.com/feedback-question/#/Questions"
 
+    //信用分-测试环境
+    part_time_credit_home_dev_url = "http://dev-common.yycircle.com/credits"
+    part_time_credit_credit_transactions_dev_url = "http://dev-common.yycircle.com/credits/transactions"
+    part_time_credit_credit_rules_dev_url = "http://dev-common.yycircle.com/credits/rules"
+    //信用分-正式环境
+    part_time_credit_home_relese_url = "http://credits.yycircle.com/credits"
+    part_time_credit_credit_transactions_relese_url = "http://credits.yycircle.com/credits/transactions"
+    part_time_credit_credit_rules_relese_url = "http://credits.yycircle.com/credits/rules"
+
+    //兼职培训-测试环境
+//    part_time_train_rule_dev_url = "http://dev-parttime-train.yycircle.com/partTimeTraining/rule"
+    part_time_train_rule_dev_url = "http://dev-parttime-train-no-video.yycircle.com/training/new"
+    part_time_train_answer_dev_url = "http://dev-parttime-train.yycircle.com/partTimeTraining/answer"
+    part_time_train_result_dev_url = "http://dev-parttime-train.yycircle.com/partTimeTraining/result"
+    part_time_train_certificate_dev_url = "http://dev-parttime-train.yycircle.com/partTimeTraining/certificate"
+    //兼职培训-正式环境
+//    part_time_train_rule_relese_url = "http://parttime-train.yycircle.com/partTimeTraining/rule"
+    part_time_train_rule_relese_url = "http://parttime-train-no-video.yycircle.com/training/new"
+    part_time_train_answer_relese_url = "http://parttime-train.yycircle.com/partTimeTraining/answer"
+    part_time_train_result_relese_url = "http://parttime-train.yycircle.com/partTimeTraining/result"
+    part_time_train_certificate_relese_url = "http://parttime-train.yycircle.com/partTimeTraining/certificate"
+
 
 }

+ 2 - 0
cpt_main/src/main/AndroidManifest.xml

@@ -30,6 +30,8 @@
 
         <activity android:name=".ui.HelpCenterProfileH5Activity" />
 
+        <activity android:name=".ui.ResetPasswordActivity"/>
+
     </application>
 
 </manifest>

+ 38 - 2
cpt_main/src/main/java/com/hongyegroup/cpt_main/ui/ProfileFragment.kt

@@ -4,6 +4,7 @@ import android.os.Bundle
 import com.guadou.cs_cptservices.YYConstants
 import com.guadou.cs_cptservices.base.fragment.YYBaseVDBFragment
 import com.guadou.cs_cptservices.interfaces.IFragmentRefresh
+import com.guadou.cs_cptservices.ui.PartTimeJobCreditWebActivity
 import com.guadou.cs_router.YYRouterService
 import com.guadou.lib_baselib.bean.DataBindingConfig
 import com.guadou.lib_baselib.utils.CommUtils
@@ -133,19 +134,54 @@ class ProfileFragment : YYBaseVDBFragment<ProfileViewModel, FragmentProfileBindi
         }
 
         //跳转到News Feed
-        fun gotoNewsFeed(){
+        fun gotoNewsFeed() {
 
             YYRouterService.newsfeedComponentServer?.startNewsFeedHomePage()
 
         }
 
         //跳转到Help Center
-        fun gotoHelpCenter(){
+        fun gotoHelpCenter() {
 
             HelpCenterProfileH5Activity.startInstance(YYConstants.HELP_CENTER_URL)
 
         }
 
+        //跳转到通知列表
+        fun gotoNotificationList() {
+
+            NotificationActivity.startInstance()
+
+        }
+
+        //跳转到信用分界面
+        fun gotoCreditWebActivity() {
+
+            PartTimeJobCreditWebActivity.startInstance("", YYConstants.PART_TIME_JOB_CREDIT_HOME)
+
+        }
+
+        //跳转到News Feed Posts界面
+        fun gotoNewsFeedPostsActivity() {
+
+            YYRouterService.newsfeedComponentServer?.startNewsFeedProfileActivity()
+
+        }
+
+        //跳转到Following和Followers界面
+        fun gotoFollowsActivity() {
+
+            YYRouterService.newsfeedComponentServer?.startNewsFeedFollowsActivity()
+
+        }
+
+        //跳转到兼职培训界面
+        fun gotoPartTimeJobTrainingActivity(){
+
+            YYRouterService.parttimeComponentServer?.startPartTimeJobTrainActivity()
+
+        }
+
     }
 
 

+ 5 - 6
cpt_parttime/src/main/java/com/hongyegroup/cpt_parttime/ui/ResetPasswordActivity.kt

@@ -1,4 +1,4 @@
-package com.hongyegroup.cpt_parttime.ui
+package com.hongyegroup.cpt_main.ui
 
 import android.content.Intent
 import android.os.Bundle
@@ -6,11 +6,10 @@ import com.guadou.lib_baselib.base.activity.BaseVDBActivity
 import com.guadou.lib_baselib.base.vm.BaseViewModel
 import com.guadou.lib_baselib.bean.DataBindingConfig
 import com.guadou.lib_baselib.utils.CommUtils
-import com.hongyegroup.cpt_parttime.BR
-import com.hongyegroup.cpt_parttime.R
-import com.hongyegroup.cpt_parttime.databinding.ActivityResetPasswordBinding
+import com.hongyegroup.cpt_main.R
+import com.hongyegroup.cpt_main.databinding.ActivityResetPasswordBinding
 
-class ResetPasswordActivity:BaseVDBActivity<BaseViewModel,ActivityResetPasswordBinding>() {
+class ResetPasswordActivity:BaseVDBActivity<BaseViewModel, ActivityResetPasswordBinding>() {
 
     companion object {
         fun startInstance() {
@@ -27,7 +26,7 @@ class ResetPasswordActivity:BaseVDBActivity<BaseViewModel,ActivityResetPasswordB
 
     override fun getDataBindingConfig(): DataBindingConfig {
 
-        return DataBindingConfig(R.layout.activity_reset_password,BR.viewModel,mViewModel)
+        return DataBindingConfig(R.layout.activity_reset_password)
 
     }
 

+ 1 - 1
cpt_main/src/main/java/com/hongyegroup/cpt_main/ui/SettingsActivity.kt

@@ -50,7 +50,7 @@ class SettingsActivity : YYBaseVDBActivity<BaseViewModel, ActivitySettingsBindin
         //点击重置密码
         fun resetPassword() {
 
-//            ResetPasswordActivity.startInstance()
+            ResetPasswordActivity.startInstance()
 
         }
 

+ 1 - 0
cpt_main/src/main/res/layout/activity_edit_user_info.xml

@@ -139,6 +139,7 @@
                                         android:drawableRight="@drawable/back_more_black"
                                         android:textColor="#8098B2"
                                         android:textSize="14.8dp"
+                                        android:text="+86 13477451876"
                                         binding:clicks="@{click.editUserPhone}"
                                         tools:text="+86 13477451876" />
 

+ 4 - 2
cpt_parttime/src/main/res/layout/activity_reset_password.xml

@@ -1,6 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
-<layout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto">
+<layout xmlns:tools="http://schemas.android.com/tools"
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    tools:ignore="MissingDefaultResource">
 
     <LinearLayout
         android:layout_width="match_parent"

+ 7 - 0
cpt_main/src/main/res/layout/fragment_profile.xml

@@ -43,6 +43,7 @@
                     android:id="@+id/fl_title_right_box"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
+                    binding:clicks="@{click.gotoNotificationList}"
                     android:layout_marginRight="@dimen/d_10dp">
 
                     <ImageView
@@ -197,6 +198,7 @@
                                         android:background="@drawable/shape_5round_main_blue"
                                         android:gravity="center"
                                         android:text="- Credits"
+                                        binding:clicks="@{click.gotoCreditWebActivity}"
                                         android:textColor="@color/white"
                                         android:textSize="13.5dp" />
 
@@ -209,6 +211,7 @@
                                         android:layout_marginLeft="@dimen/d_9dp"
                                         android:layout_toRightOf="@id/text_view_profile_points"
                                         android:contentDescription="@string/null_data"
+                                        binding:clicks="@{click.gotoCreditWebActivity}"
                                         android:src="@drawable/help_blue" />
 
                                 </RelativeLayout>
@@ -232,6 +235,7 @@
                                         android:gravity="center"
                                         android:orientation="vertical"
                                         android:padding="@dimen/d_5dp"
+                                        binding:clicks="@{click.gotoNewsFeedPostsActivity}"
                                         app:layout_constraintBottom_toBottomOf="parent"
                                         app:layout_constraintLeft_toLeftOf="parent"
                                         app:layout_constraintTop_toTopOf="parent">
@@ -266,6 +270,7 @@
                                         android:gravity="center"
                                         android:orientation="vertical"
                                         android:padding="@dimen/d_5dp"
+                                        android:onClick="@{()->click.gotoFollowsActivity()}"
                                         app:layout_constraintBottom_toBottomOf="parent"
                                         app:layout_constraintLeft_toRightOf="@id/ll_padding_job"
                                         app:layout_constraintRight_toLeftOf="@id/ll_rewards_box"
@@ -299,6 +304,7 @@
                                         android:layout_weight="1"
                                         android:gravity="center"
                                         android:padding="@dimen/d_5dp"
+                                        android:onClick="@{()->click.gotoFollowsActivity()}"
                                         app:layout_constraintBottom_toBottomOf="parent"
                                         app:layout_constraintRight_toRightOf="parent"
                                         app:layout_constraintTop_toTopOf="parent">
@@ -571,6 +577,7 @@
                                 android:paddingTop="@dimen/d_15dp"
                                 android:paddingRight="@dimen/d_25dp"
                                 android:paddingBottom="@dimen/d_15dp"
+                                binding:clicks="@{click.gotoPartTimeJobTrainingActivity}"
                                 android:visibility="visible">
 
                                 <ImageView

+ 2 - 2
cpt_main/src/main/res/layout/view_popup_user_urgent.xml

@@ -28,7 +28,7 @@
         android:layout_marginLeft="@dimen/d_32dp"
         android:layout_marginTop="@dimen/d_25dp"
         android:layout_marginRight="@dimen/d_32dp"
-        android:text="You have sent urgent notification to our admin already. Please wait for our admin for approval."
+        android:text="您已经向我们的 管理员发送了紧急通知。 请等待我们的管理员审批。"
         android:textColor="@color/black"
         android:textSize="18sp" />
 
@@ -41,7 +41,7 @@
         android:layout_marginRight="@dimen/d_25dp"
         android:background="@drawable/selector_app_blue_button_round2_bg"
         android:gravity="center"
-        android:text="OK"
+        android:text="完成"
         android:textColor="@color/white"
         android:textSize="@dimen/d_16sp" />
 

+ 14 - 0
cpt_newsfeed/src/main/java/com/hongyegroup/cpt_newsfeed/router/NewsFeedComponentServiceImpl.kt

@@ -5,8 +5,10 @@ import androidx.fragment.app.Fragment
 import com.alibaba.android.arouter.facade.annotation.Route
 import com.guadou.cs_router.ARouterPath
 import com.guadou.cs_router.newsfeed.INewsFeedComponentServer
+import com.hongyegroup.cpt_newsfeed.ui.activity.NewsFeedFollowsActivity
 import com.hongyegroup.cpt_newsfeed.ui.activity.NewsFeedMainActivity
 import com.hongyegroup.cpt_newsfeed.ui.activity.NewsFeedPostActivity
+import com.hongyegroup.cpt_newsfeed.ui.activity.NewsFeedProfileActivity
 import com.hongyegroup.cpt_newsfeed.ui.fragment.NewsFeedMainFragment
 
 @Route(path = ARouterPath.PATH_SERVICE_NEWSFEED, name = "NewsFeed模块路由服务")
@@ -25,6 +27,18 @@ class NewsFeedComponentServiceImpl : INewsFeedComponentServer {
         return NewsFeedMainFragment()
     }
 
+    override fun startNewsFeedProfileActivity() {
+
+        NewsFeedProfileActivity.startInstance("123",true)
+
+    }
+
+    override fun startNewsFeedFollowsActivity() {
+
+        NewsFeedFollowsActivity.startInstance()
+
+    }
+
     override fun init(context: Context?) {
 
     }

+ 2 - 2
cpt_parttime/src/main/AndroidManifest.xml

@@ -14,10 +14,10 @@
 
         <activity android:name=".ui.PartJobEditProfileInfoActivity"/>
 
-        <activity android:name=".ui.ResetPasswordActivity"/>
-
         <activity android:name=".ui.activity.PartTimeIndustryActivity"/>
 
+        <activity android:name=".ui.activity.PartTimeJobTrainingActivity"/>
+
     </application>
 
 </manifest>

+ 63 - 0
cpt_parttime/src/main/java/com/hongyegroup/cpt_parttime/mvvm/PartTimeTrainingViewModel.java

@@ -0,0 +1,63 @@
+package com.hongyegroup.cpt_parttime.mvvm;
+
+import android.app.Activity;
+
+
+import com.guadou.lib_baselib.base.vm.BaseViewModel;
+
+import androidx.lifecycle.MutableLiveData;
+
+public class PartTimeTrainingViewModel extends BaseViewModel {
+
+//    private TrainModel mModel = new TrainModel();
+
+//    public MutableLiveData<TrainStatusResponseData> mTrainStatusLiveData =new MutableLiveData<>();
+
+    public PartTimeTrainingViewModel() {
+
+    }
+
+    //获取培训状态
+    public void getTrainStatus() {
+
+//        if (!TextUtils.isEmpty(checkTokenAndStutus())) {
+//
+//            mModel.getTrainStatus(checkTokenAndStutus())
+//                    .subscribeOn(Schedulers.io())
+//                    .observeOn(AndroidSchedulers.mainThread())
+//                    .subscribe(new HandleErrorVMSubscriber<BaseBean<TrainStatusResponseData>>(CommUtils.getContext()) {
+//                        @Override
+//                        public void addDisposableToList(Disposable disposable) {
+//
+//                            mDisposables.add(disposable);
+//
+//                        }
+//
+//                        @Override
+//                        public void onFailedMessage(String msg) {
+//                            loadError(msg);
+//                            ToastUtils.get().makeText(CommUtils.getContext(),msg);
+//                        }
+//
+//                        @Override
+//                        public void onNext(@NonNull BaseBean<TrainStatusResponseData> responseBean) {
+//
+//                            if (responseBean.getCode() == 200) {
+//
+//                                mTrainStatusLiveData.postValue(responseBean.getData());
+//
+//                            } else {
+//
+//                                mTrainStatusLiveData.postValue(null);
+//                                ToastUtils.get().makeText(CommUtils.getContext(), responseBean.getMessage());
+//
+//                            }
+//
+//                        }
+//                    });
+//
+//        }
+
+    }
+
+}

+ 7 - 0
cpt_parttime/src/main/java/com/hongyegroup/cpt_parttime/router/PartTimeComponentServiceImpl.kt

@@ -7,6 +7,7 @@ import com.guadou.cs_router.ARouterPath
 import com.guadou.cs_router.parttime.IParttimeComponentServer
 import com.hongyegroup.cpt_parttime.ui.PartJobEditProfileInfoActivity
 import com.hongyegroup.cpt_parttime.ui.activity.PartTimeJobDetailActivity
+import com.hongyegroup.cpt_parttime.ui.activity.PartTimeJobTrainingActivity
 import com.hongyegroup.cpt_parttime.ui.main.PartTimeActivesFragment
 import com.hongyegroup.cpt_parttime.ui.main.PartTimeHomeFragment
 
@@ -31,6 +32,12 @@ class PartTimeComponentServiceImpl : IParttimeComponentServer {
 
     }
 
+    override fun startPartTimeJobTrainActivity() {
+
+        PartTimeJobTrainingActivity.startInstance()
+
+    }
+
     override fun init(context: Context?) {
 
     }

+ 58 - 0
cpt_parttime/src/main/java/com/hongyegroup/cpt_parttime/ui/activity/PartTimeJobTrainingActivity.java

@@ -0,0 +1,58 @@
+package com.hongyegroup.cpt_parttime.ui.activity;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+
+import com.guadou.lib_baselib.base.activity.BaseVMActivity;
+import com.guadou.lib_baselib.base.vm.BaseViewModel;
+import com.guadou.lib_baselib.utils.CommUtils;
+import com.guadou.lib_baselib.utils.StatusBarUtils;
+import com.hongyegroup.cpt_parttime.R;
+import com.hongyegroup.cpt_parttime.ui.fragment.PartTimeTrainingFragment;
+
+import androidx.annotation.Nullable;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+
+/**
+ * 培训的Web容器
+ */
+public class PartTimeJobTrainingActivity extends BaseVMActivity<BaseViewModel> {
+
+    public static void startInstance() {
+
+        Context context = CommUtils.getContext();
+        Intent intent = new Intent(context, PartTimeJobTrainingActivity.class);
+        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        context.startActivity(intent);
+
+    }
+
+    @Override
+    public void init(@Nullable Bundle savedInstanceState) {
+
+        //沉浸式
+        StatusBarUtils.immersive(mActivity);
+
+        PartTimeTrainingFragment partTimeTrainingFragment = PartTimeTrainingFragment.newInstance();
+        FragmentManager mFragmentManager = getSupportFragmentManager();
+        FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
+        fragmentTransaction.add(R.id.fl_content, partTimeTrainingFragment);
+        fragmentTransaction.commit();
+
+
+    }
+
+    @Override
+    public int getLayoutIdRes() {
+
+        return R.layout.activity_parttime_frame;
+
+    }
+
+    @Override
+    public void startObserve() {
+
+    }
+}

+ 345 - 0
cpt_parttime/src/main/java/com/hongyegroup/cpt_parttime/ui/fragment/PartTimeTrainingFragment.java

@@ -0,0 +1,345 @@
+package com.hongyegroup.cpt_parttime.ui.fragment;
+
+import android.annotation.SuppressLint;
+import android.os.Bundle;
+import android.view.View;
+import android.webkit.JavascriptInterface;
+import android.widget.ProgressBar;
+
+import com.guadou.cs_cptservices.YYConstants;
+import com.guadou.cs_cptservices.ui.PartTimeTrainWebActivity;
+import com.guadou.lib_baselib.base.fragment.BaseVMFragment;
+import com.guadou.lib_baselib.utils.CommUtils;
+import com.guadou.lib_baselib.utils.SPUtils;
+import com.guadou.lib_baselib.utils.StatusBarUtils;
+import com.guadou.lib_baselib.view.MyWebView;
+import com.guadou.lib_baselib.view.titlebar.EasyTitleBar;
+import com.hongyegroup.cpt_parttime.R;
+import com.hongyegroup.cpt_parttime.mvvm.PartTimeTrainingViewModel;
+import com.hongyegroup.cpt_parttime.ui.PartJobEditProfileInfoActivity;
+import com.jeremyliao.liveeventbus.LiveEventBus;
+import com.luck.picture.lib.tools.ToastUtils;
+
+import androidx.annotation.Nullable;
+
+/**
+ * 兼职工作首页的培训子页面
+ */
+public class PartTimeTrainingFragment extends BaseVMFragment<PartTimeTrainingViewModel> {
+
+    protected EasyTitleBar mTrainingTitle;
+    private MyWebView mTrainWebView;
+    private ProgressBar mProgressBar;
+
+    private String mUrlEndWith;
+    private boolean isTraining = false;
+
+    public static PartTimeTrainingFragment newInstance() {
+
+        Bundle args = new Bundle();
+
+        PartTimeTrainingFragment fragment = new PartTimeTrainingFragment();
+        fragment.setArguments(args);
+        return fragment;
+    }
+
+    @Override
+    public int getLayoutIdRes() {
+
+        return R.layout.fragment_part_time_training;
+
+    }
+
+    @Override
+    public void init(@Nullable Bundle savedInstanceState) {
+
+        initData();
+        initListener();
+
+    }
+
+
+    protected void initListener() {
+        mTrainingTitle.getBackLayout().setOnClickListener(v -> {
+            //去parttime首页
+//            LiveEventBus.get(YYConstants.EVENT_PART_TIME_JOB_MAIN_SWITCH, Integer.class).post(0);
+        });
+    }
+
+    private void initData() {
+
+        mProgressBar.setVisibility(View.VISIBLE);
+        mViewModel.getTrainStatus();
+
+        CommUtils.getHandler().postDelayed(new Runnable() {
+            @Override
+            public void run() {
+
+//                mProgressBar.setVisibility(View.GONE);
+
+                mTrainWebView.loadUrl(YYConstants.PART_TIME_TRAIN_RULE_URL + mUrlEndWith);
+                mTrainingTitle.setTitle("Training");
+
+            }
+        },500);
+
+    }
+
+    @Override
+    protected void initViews(View view) {
+        super.initViews(view);
+
+        mTrainingTitle = view.findViewById(R.id.easy_title_bar_part_time_training);
+        mTrainWebView = view.findViewById(R.id.web_view_part_time_training);
+        mProgressBar = view.findViewById(R.id.pb_part_time_training);
+
+        String tokenStr = SPUtils.getInstance(CommUtils.getContext()).getString(YYConstants.USER_TOKEN, "");
+        int statusBarHeight = StatusBarUtils.getStatusBarHeight(mActivity);
+
+        mUrlEndWith = "?" + "token=" + tokenStr + "&statusBarHeight=" + statusBarHeight;
+
+        initWebView();
+
+    }
+
+    /**
+     * 根据百分比和起始颜色和结束颜色 计算当前的RGBA颜色
+     */
+    public int evaluate(float fraction, int startValue, int endValue) {
+        int startA = (startValue >> 24) & 0xff;
+        int startR = (startValue >> 16) & 0xff;
+        int startG = (startValue >> 8) & 0xff;
+        int startB = startValue & 0xff;
+
+        int endA = (endValue >> 24) & 0xff;
+        int endR = (endValue >> 16) & 0xff;
+        int endG = (endValue >> 8) & 0xff;
+        int endB = endValue & 0xff;
+
+        return ((startA + (int) (fraction * (endA - startA))) << 24) |
+                ((startR + (int) (fraction * (endR - startR))) << 16) |
+                ((startG + (int) (fraction * (endG - startG))) << 8) |
+                ((startB + (int) (fraction * (endB - startB))));
+    }
+
+    @SuppressLint("AddJavascriptInterface")
+    public void initWebView() {
+
+        int mHeight = CommUtils.dip2px(50);
+
+        mTrainWebView.setMyWebViewScrollListener(scrollY -> {
+            if (scrollY >= 0 && scrollY <= mHeight) {
+
+                float percent = 0;
+                if (mHeight != 0) {
+                    percent = scrollY / mHeight;
+                }
+
+                mTrainingTitle.setBackgroundColor(evaluate(percent, CommUtils.getColor(R.color.transparent), CommUtils.getColor(R.color.white)));
+
+            } else {
+
+                mTrainingTitle.setBackgroundColor(CommUtils.getColor(R.color.app_blue));
+
+            }
+        });
+
+        mTrainWebView.setOnWebChangeListener(new MyWebView.OnWebChangeListener() {
+            @Override
+            public void titleChange(String title) {
+
+            }
+
+            @Override
+            public void progressChange(int progress) {
+
+                if (progress < 95) {
+
+//                    LoadingDialogManager.get().showLoading(mActivity);
+                    mProgressBar.setVisibility(View.VISIBLE);
+
+                } else {
+
+//                    LoadingDialogManager.get().dismissLoading();
+
+                    mProgressBar.setVisibility(View.GONE);
+
+                }
+
+            }
+
+            @Override
+            public void onInnerLinkChecked() {
+            }
+
+            @Override
+            public void onWebLoadError() {
+            }
+        });
+        mTrainWebView.addJavascriptInterface(new H5CallBack(), "webkit");
+        mTrainWebView.getSettings().setDomStorageEnabled(true);
+
+    }
+
+
+    @Override
+    public void startObserve() {
+
+        //培训状态
+//        mViewModel.mTrainStatusLiveData.observe(this, responseData -> {
+//            if (responseData == null) return;
+////            //        1:Pending没有经过面试,等待中,2:Upload批准过来面试,3:Approve面试通过可以申请工作,
+//////        4:Rejected被拒绝面试,5:Inactive无效用户,6.Pre Approve,7.Pending Approve .8 面试完成)',
+////            if (responseData.member_status.equals("2") || responseData.member_status.equals("8")
+////                    || responseData.member_status.equals("3") || responseData.member_status.equals("6") || responseData.member_status.equals("7")) {
+////
+////                ViewGroup rightLayout = mTrainingTitle.getRightLayout();
+////                rightLayout.removeAllViews();
+////
+////                mTrainingTitle.addRightText("Additional Info", () -> {
+////
+////                    //点击跳转到附加信息界面
+////                    YYRouterService.profileComponentService.startAdditionalInfoActivity(mActivity);
+////
+////                });
+////
+////            }
+////
+////
+//            //1 不需要培训,0需要培训
+//            if (responseData.is_train.equals("1")) {
+////                //已经培训过了,展示证书的页面
+////                mTrainWebView.loadUrl(Constants.PART_TIME_TRAIN_CERTIFICATE_URL + mUrlEndWith);
+////                mTrainingTitle.setTitle("My Training");
+//
+//                isTraining = true;
+//
+//            } else {
+////                //没有培训,去参加培训
+////                mTrainWebView.loadUrl(Constants.PART_TIME_TRAIN_RULE_URL + mUrlEndWith);
+////
+//////                mTrainingTitle.setVisibility(View.GONE);
+////                mTrainingTitle.setTitle("Training");
+//
+//                isTraining = false;
+//
+//            }
+//
+//            String webUrl = "";
+//            if (BaseApplication.APP_COUNTRY == 1) {
+//
+//                //马来
+//                webUrl = YYConstants.Malay_PART_TIME_TRAIN_RULE_URL;
+//
+//            } else {
+//
+//                //默认新加坡
+//                webUrl = YYConstants.PART_TIME_TRAIN_RULE_URL;
+//
+//            }
+//
+//            mTrainWebView.loadUrl(webUrl + mUrlEndWith);
+//            mTrainingTitle.setTitle("Training");
+//
+//        });
+
+        //兼职在线培训完成
+//        LiveEventBus.get(YYConstants.EVENT_PART_TIME_JOB_ONLINE_TRAINING_COMPLETE, Boolean.class).observe(this, aBoolean -> {
+//
+//            if (aBoolean) {
+//                initData();
+//            }
+//
+//        });
+
+    }
+
+
+    private class H5CallBack {
+
+        @JavascriptInterface
+        public void AdhocTrainingStart(Object object) {
+
+            String webUrl = "";
+
+//            if (BaseApplication.APP_COUNTRY == 1) {
+//
+//                //马来
+//                webUrl = YYConstants.Malay_PART_TIME_TRAIN_ANSWER_URL;
+//
+//            } else {
+
+                //默认新加坡
+                webUrl = YYConstants.PART_TIME_TRAIN_ANSWER_URL;
+//            }
+
+            PartTimeTrainWebActivity.startInstance("Online Training", webUrl + mUrlEndWith);
+
+        }
+
+        @JavascriptInterface
+        public void ToCheckMyTrainingDetails(Object object) {
+
+            String webUrl = "";
+
+//            if (BaseApplication.APP_COUNTRY == 1) {
+//
+//                //马来
+//                webUrl = YYConstants.Malay_PART_TIME_TRAIN_ANSWER_URL;
+//
+//            } else {
+
+                //默认新加坡
+                webUrl = YYConstants.PART_TIME_TRAIN_ANSWER_URL;
+//            }
+
+            PartTimeTrainWebActivity.startInstance("Online Training", webUrl + mUrlEndWith);
+
+        }
+
+        @JavascriptInterface
+        public void toMyAdditionalInfo(Object object) {
+
+            //点击跳转到附加信息界面
+//            IProfileComponentService profileComponentService = YYRouterService.profileComponentService;
+//            if (profileComponentService != null) {
+//                profileComponentService.startAdditionalInfoActivity(mActivity);
+//            }
+
+            PartJobEditProfileInfoActivity.Companion.startInstance();
+
+        }
+
+        @JavascriptInterface
+        public void toCertificate(Object object) {
+
+            if (isTraining) {
+
+                //跳转到证书界面
+
+                String webUrl = "";
+
+//                if (BaseApplication.APP_COUNTRY == 1) {
+//
+//                    //马来
+//                    webUrl = YYConstants.Malay_PART_TIME_TRAIN_CERTIFICATE_URL;
+//
+//                } else {
+
+                    //默认新加坡
+                    webUrl = YYConstants.PART_TIME_TRAIN_CERTIFICATE_URL;
+//                }
+
+                PartTimeTrainWebActivity.startInstance("Training", webUrl + mUrlEndWith);
+
+            } else {
+
+                ToastUtils.s(CommUtils.getContext(), "Only after you have completed your training, you can view the training certificate here.");
+
+            }
+
+
+        }
+
+    }
+}

+ 9 - 0
cpt_parttime/src/main/res/layout/activity_parttime_frame.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/fl_content"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:ignore="MissingDefaultResource">
+
+</FrameLayout>

+ 34 - 0
cpt_parttime/src/main/res/layout/fragment_part_time_training.xml

@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <com.guadou.lib_baselib.view.MyWebView
+        android:id="@+id/web_view_part_time_training"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"/>
+
+    <com.guadou.lib_baselib.view.titlebar.EasyTitleBar
+        android:id="@+id/easy_title_bar_part_time_training"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        app:Easy_lineState="gone"
+        app:Easy_hasStatusPadding="true"
+        app:Easy_titleColor="@color/white"
+        app:Easy_backRes="@drawable/back_white"
+        app:Easy_titleBarBackground="@color/transparent"
+        app:Easy_menuTextColor="@color/yellow_part_time_train"
+        app:Easy_title="YY Circle" />
+
+    <ProgressBar
+        android:id="@+id/pb_part_time_training"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:visibility="visible">
+
+    </ProgressBar>
+
+</FrameLayout>

+ 24 - 0
cs_baselib/src/main/java/com/guadou/lib_baselib/view/MyWebView.java

@@ -30,6 +30,7 @@ public class MyWebView extends WebView {
 
     private WebSettings mWebSettings;
     private boolean isNeedExe = true;
+    private OnScrollListener mScrollListener;
 
     public MyWebView(Context context) {
         super(context);
@@ -269,4 +270,27 @@ public class MyWebView extends WebView {
         }
     }
 
+    public void setMyWebViewScrollListener(OnScrollListener listener) {
+
+        mScrollListener = listener;
+
+    }
+
+    // 滑动距离监听器
+    public interface OnScrollListener {
+
+        /**
+         * 在滑动的时候调用,scrollY为已滑动的距离
+         */
+        void onScroll(int scrollY);
+    }
+
+    @Override
+    public void computeScroll() {
+        super.computeScroll();
+        if (mScrollListener != null) {
+            mScrollListener.onScroll(getScrollY());
+        }
+    }
+
 }

+ 35 - 0
cs_cptServices/build.gradle

@@ -9,6 +9,14 @@ android {
 
         String helpCenterUrl
         String qaWebUrl
+        String partTimeCreditHomeUrl
+        String partTimeCreditTransactionsUrl
+        String partTimeCreditRulesUrl
+
+        String partTimeTrainRuleUrl
+        String partTimeTrainAnswerUrl
+        String partTimeTrainResultUrl
+        String partTimeTrainCertificateUrl
 
         //判断是正式环境还是测试环境
         if (mIsReleaseUrl) {
@@ -18,6 +26,15 @@ android {
             helpCenterUrl = rootProject.ext.help_center_relese_url
             qaWebUrl = rootProject.ext.parttime_qa_relese_url
 
+            partTimeCreditHomeUrl = rootProject.ext.part_time_credit_home_relese_url
+            partTimeCreditTransactionsUrl = rootProject.ext.part_time_credit_credit_transactions_relese_url
+            partTimeCreditRulesUrl = rootProject.ext.part_time_credit_credit_rules_relese_url
+
+            partTimeTrainRuleUrl = rootProject.ext.part_time_train_rule_relese_url
+            partTimeTrainAnswerUrl = rootProject.ext.part_time_train_answer_relese_url
+            partTimeTrainResultUrl = rootProject.ext.part_time_train_result_relese_url
+            partTimeTrainCertificateUrl = rootProject.ext.part_time_train_certificate_relese_url
+
         } else {
             String baseUrlDev = rootProject.ext.baseUrl_dev
             buildConfigField 'String', 'Base_Url', "\"${baseUrlDev}\""
@@ -25,11 +42,29 @@ android {
             helpCenterUrl = rootProject.ext.help_center_dev_url
             qaWebUrl = rootProject.ext.parttime_qa_dev_url
 
+            partTimeCreditHomeUrl = rootProject.ext.part_time_credit_home_dev_url
+            partTimeCreditTransactionsUrl = rootProject.ext.part_time_credit_credit_transactions_dev_url
+            partTimeCreditRulesUrl = rootProject.ext.part_time_credit_credit_rules_dev_url
+
+            partTimeTrainRuleUrl = rootProject.ext.part_time_train_rule_dev_url
+            partTimeTrainAnswerUrl = rootProject.ext.part_time_train_answer_dev_url
+            partTimeTrainResultUrl = rootProject.ext.part_time_train_result_dev_url
+            partTimeTrainCertificateUrl = rootProject.ext.part_time_train_certificate_dev_url
+
         }
 
         buildConfigField 'String', 'Help_Center_URL', "\"${helpCenterUrl}\""
         buildConfigField 'String', 'Part_Time_QA_Url', "\"${qaWebUrl}\""
 
+        buildConfigField 'String', 'Part_Time_Credit_Home_URL', "\"${partTimeCreditHomeUrl}\""
+        buildConfigField 'String', 'Part_Time_Credit_Transaction_URL', "\"${partTimeCreditTransactionsUrl}\""
+        buildConfigField 'String', 'Part_Time_Credit_Rules_URL', "\"${partTimeCreditRulesUrl}\""
+
+        buildConfigField 'String', 'Part_Time_Train_Rule_URL', "\"${partTimeTrainRuleUrl}\""
+        buildConfigField 'String', 'Part_Time_Train_Answer_URL', "\"${partTimeTrainAnswerUrl}\""
+        buildConfigField 'String', 'Part_Time_Train_Result_URL', "\"${partTimeTrainResultUrl}\""
+        buildConfigField 'String', 'Part_Time_Train_Certificate_URL', "\"${partTimeTrainCertificateUrl}\""
+
     }
 
     buildFeatures {

+ 4 - 0
cs_cptServices/src/main/AndroidManifest.xml

@@ -7,6 +7,10 @@
             android:name=".ui.GlobalWebActivity"
             android:screenOrientation="portrait" />
 
+        <activity android:name=".ui.PartTimeJobCreditWebActivity"/>
+
+        <activity android:name=".ui.PartTimeTrainWebActivity"/>
+
     </application>
 
 </manifest>

+ 12 - 0
cs_cptServices/src/main/java/com/guadou/cs_cptservices/YYConstants.java

@@ -22,4 +22,16 @@ public class YYConstants {
     //PartTime模块QA的Web
     public static final String PART_TIME_QA_URL = BuildConfig.Part_Time_QA_Url;
 
+    //Credit信用分URL
+    public static final String PART_TIME_JOB_CREDIT_HOME = BuildConfig.Part_Time_Credit_Home_URL;
+    public static final String PART_TIME_JOB_CREDIT_TRANSACTIONS = BuildConfig.Part_Time_Credit_Transaction_URL;
+    public static final String PART_TIME_JOB_CREDIT_RULES = BuildConfig.Part_Time_Credit_Rules_URL;
+
+    //兼职培训Url
+    public static final String PART_TIME_TRAIN_RULE_URL = BuildConfig.Part_Time_Train_Rule_URL;
+    public static final String PART_TIME_TRAIN_ANSWER_URL = BuildConfig.Part_Time_Train_Answer_URL;
+    public static final String PART_TIME_TRAIN_RESULT_URL = BuildConfig.Part_Time_Train_Result_URL;
+    public static final String PART_TIME_TRAIN_CERTIFICATE_URL = BuildConfig.Part_Time_Train_Certificate_URL;
+
+
 }

+ 312 - 0
cs_cptServices/src/main/java/com/guadou/cs_cptservices/ui/PartTimeJobCreditWebActivity.java

@@ -0,0 +1,312 @@
+package com.guadou.cs_cptservices.ui;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Message;
+import android.os.Messenger;
+import android.os.RemoteException;
+import android.text.TextUtils;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.webkit.JavascriptInterface;
+import android.widget.FrameLayout;
+import android.widget.ProgressBar;
+
+import com.guadou.cs_cptservices.R;
+import com.guadou.cs_cptservices.YYConstants;
+import com.guadou.lib_baselib.base.activity.BaseVMActivity;
+import com.guadou.lib_baselib.base.vm.BaseViewModel;
+import com.guadou.lib_baselib.utils.CheckUtil;
+import com.guadou.lib_baselib.utils.CommUtils;
+import com.guadou.lib_baselib.utils.SPUtils;
+import com.guadou.lib_baselib.utils.StatusBarUtils;
+import com.guadou.lib_baselib.utils.log.YYLogUtils;
+import com.guadou.lib_baselib.view.LoadingDialogManager;
+import com.guadou.lib_baselib.view.MyWebView;
+
+import androidx.annotation.Nullable;
+
+/**
+ * Profile模块 信用分的Web容器
+ */
+public class PartTimeJobCreditWebActivity extends BaseVMActivity<BaseViewModel> {
+
+    private String mWebtitle;
+    private String mWeburl;
+    private ProgressBar mPbWebView;
+    private FrameLayout mFlContent;
+    private MyWebView mWebView;
+    private boolean isHideTitleBar;
+
+    private String mUrlEndWith = "";
+
+    public static void startInstance(String webtitle, String weburl) {
+        Context context = CommUtils.getContext();
+        if (context != null) {
+            Intent intent = new Intent(context, PartTimeJobCreditWebActivity.class);
+            intent.putExtra("webtitle", webtitle);
+            intent.putExtra("weburl", weburl);
+            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+            context.startActivity(intent);
+        } else {
+            throw new RuntimeException("context is null.please check it.");
+        }
+    }
+
+    public static void startInstance(String webtitle, String weburl, boolean hideTitleBar) {
+        Context context = CommUtils.getContext();
+        if (context != null) {
+            Intent intent = new Intent(context, PartTimeJobCreditWebActivity.class);
+            intent.putExtra("webtitle", webtitle);
+            intent.putExtra("weburl", weburl);
+            intent.putExtra("hideTitleBar", hideTitleBar);
+            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+            context.startActivity(intent);
+        } else {
+            throw new RuntimeException("context is null.please check it.");
+        }
+    }
+
+    @Override
+    protected void getDataFromIntent(Intent intent) {
+        super.getDataFromIntent(intent);
+        mWebtitle = intent.getStringExtra("webtitle");
+        mWeburl = intent.getStringExtra("weburl");
+        isHideTitleBar = intent.getBooleanExtra("hideTitleBar", false);
+    }
+
+    @Override
+    public void init(@Nullable Bundle savedInstanceState) {
+
+        StatusBarUtils.immersive(mActivity);
+        StatusBarUtils.setStatusBarWhiteText(mActivity);
+
+
+        String tokenStr = SPUtils.getInstance(CommUtils.getContext()).getString(YYConstants.USER_TOKEN, "");
+        int statusBarHeight = StatusBarUtils.getStatusBarHeight(mActivity);
+
+        mUrlEndWith = "?" + "statusBarHeight=" + "0" + "&token=" + tokenStr;
+//        mUrlEndWith = "?token=" + tokenStr ;
+        mWeburl = mWeburl + mUrlEndWith;
+
+        initView();
+        initTitles();
+        initWeb();
+
+    }
+
+    @Override
+    public int getLayoutIdRes() {
+        if (isHideTitleBar) {
+            //去除标题栏
+//            requestWindowFeature(Window.FEATURE_NO_TITLE);
+            //去除状态栏
+//            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
+        }
+        return R.layout.activity_part_time_job_credit_web;
+    }
+
+    @Override
+    public void startObserve() {
+
+    }
+
+    private void initTitles() {
+    }
+
+    @SuppressLint("AddJavascriptInterface")
+    private void initWeb() {
+        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
+        mWebView = new MyWebView(getApplicationContext());
+        mWebView.setLayoutParams(params);
+        mWebView.addJavascriptInterface(new H5NewCallBackAndroid(), "webkit");
+
+        mWebView.setOnWebChangeListener(new MyWebView.OnWebChangeListener() {
+            @Override
+            public void titleChange(String title) {
+//                if (CheckUtil.isEmpty(mWebtitle) && mTvToolbarTitle != null) {
+//                    mTvToolbarTitle.setText(title);
+//                }
+            }
+
+            @Override
+            public void progressChange(int newProgress) {
+                if (newProgress == 100) {
+                    mPbWebView.setVisibility(View.GONE);
+                    LoadingDialogManager.get().dismissLoading();
+
+
+                }
+
+            }
+
+            @Override
+            public void onInnerLinkChecked() {
+            }
+
+            @Override
+            public void onWebLoadError() {
+            }
+        });
+
+        if (!TextUtils.isEmpty(mWeburl)) {
+            YYLogUtils.w("加载的网页地址:" + mWeburl);
+            mWebView.loadUrl(mWeburl);
+        }
+
+        mFlContent.addView(mWebView);
+    }
+
+    private void initView() {
+        mPbWebView = findViewById(R.id.pb_web_view);
+        mFlContent = findViewById(R.id.fl_content);
+
+    }
+
+
+    //JS Java Call 用一个类包装起来方便忽略混淆
+    private class H5CallBackAndroid {
+
+        @JavascriptInterface
+        public void callPhone(String phoneNum) {
+
+//            YYLogUtils.e("Click Phone No"+phoneNum);
+            //跨进程-通知拨打电话
+
+            Message msg = getIntent().getParcelableExtra("message");
+            Messenger replyMessenger = msg.replyTo;
+
+            Message replyMsg = new Message();
+            replyMsg.what = 2;
+
+            Bundle b = new Bundle();
+            b.putString("phone_num", phoneNum);
+            replyMsg.setData(b);
+
+            try {
+                replyMessenger.send(replyMsg);
+            } catch (RemoteException e) {
+                e.printStackTrace();
+            }
+
+        }
+
+    }
+
+    //新版Webkit的点击接口回调
+    private class H5NewCallBackAndroid {
+
+        @JavascriptInterface
+        public void goCreditsTransactions(Object object) {
+
+            //交易记录
+            String webUrl = "";
+//            if (BaseApplication.APP_COUNTRY == 1) {
+//
+//                //马来
+//                webUrl = YYConstants.Malay_PART_TIME_JOB_CREDIT_TRANSACTIONS;
+//
+//            } else {
+
+                //默认新加坡
+                webUrl = YYConstants.PART_TIME_JOB_CREDIT_TRANSACTIONS;
+
+//            }
+            PartTimeJobCreditWebActivity.startInstance("", webUrl);
+
+        }
+
+        @JavascriptInterface
+        public void goCreditsRules(Object object) {
+
+            //信用分规则
+
+            String webUrl = "";
+
+//            if (BaseApplication.APP_COUNTRY == 1) {
+//
+//                //马来
+//                webUrl = YYConstants.Malay_PART_TIME_JOB_CREDIT_RULES;
+//
+//            } else {
+
+                //默认新加坡
+                webUrl = YYConstants.PART_TIME_JOB_CREDIT_RULES;
+
+//            }
+
+            PartTimeJobCreditWebActivity.startInstance("", webUrl);
+
+        }
+
+        @JavascriptInterface
+        public void goCredits(Object object) {
+
+            finish();
+
+        }
+
+        @JavascriptInterface
+        public void YYCircleWebBack(Object object) {
+
+            finish();
+
+        }
+
+    }
+
+    /**
+     * 集成了系统的回退和网页的回退
+     */
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
+            mWebView.goBack();
+            return true;
+        }
+        return super.onKeyDown(keyCode, event);
+    }
+
+    @Override
+    protected void onPause() {
+        super.onPause();
+        if (mWebView != null) {
+            mWebView.onPause();
+        }
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        if (mWebView != null) {
+            mWebView.onResume();
+        }
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        if (mWebView != null) {
+            mWebView.clearCache(true); //清空缓存
+            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
+                if (mFlContent != null) {
+                    mFlContent.removeView(mWebView);
+                }
+                mWebView.removeAllViews();
+                mWebView.destroy();
+            } else {
+                mWebView.removeAllViews();
+                mWebView.destroy();
+                if (mFlContent != null) {
+                    mFlContent.removeView(mWebView);
+                }
+            }
+            mWebView = null;
+        }
+
+        //退出当前web进程
+//        System.exit(0);
+    }
+}

+ 358 - 0
cs_cptServices/src/main/java/com/guadou/cs_cptservices/ui/PartTimeTrainWebActivity.java

@@ -0,0 +1,358 @@
+package com.guadou.cs_cptservices.ui;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.Window;
+import android.view.WindowManager;
+import android.webkit.JavascriptInterface;
+import android.widget.FrameLayout;
+import android.widget.ProgressBar;
+
+import com.guadou.cs_cptservices.R;
+import com.guadou.cs_cptservices.YYConstants;
+import com.guadou.cs_router.YYRouterService;
+import com.guadou.lib_baselib.base.activity.BaseVMActivity;
+import com.guadou.lib_baselib.base.vm.BaseViewModel;
+import com.guadou.lib_baselib.utils.CheckUtil;
+import com.guadou.lib_baselib.utils.CommUtils;
+import com.guadou.lib_baselib.utils.SPUtils;
+import com.guadou.lib_baselib.utils.StatusBarUtils;
+import com.guadou.lib_baselib.utils.log.YYLogUtils;
+import com.guadou.lib_baselib.view.LoadingDialogManager;
+import com.guadou.lib_baselib.view.MyWebView;
+import com.guadou.lib_baselib.view.titlebar.EasyTitleBar;
+import com.jeremyliao.liveeventbus.LiveEventBus;
+
+import androidx.annotation.Nullable;
+
+/**
+ * 兼职工作面试的加载Web容器
+ * 全屏的Web页面
+ */
+public class PartTimeTrainWebActivity extends BaseVMActivity<BaseViewModel> {
+
+    private String mWebtitle;
+    private String mWeburl;
+    private ProgressBar mPbWebView;
+    private FrameLayout mFlContent;
+    private MyWebView mWebView;
+    private boolean isHideTitleBar;
+    private EasyTitleBar mTitleBar;
+
+    private String mUrlEndWith;
+
+    public static void startInstance(String webtitle, String weburl) {
+        Context context = CommUtils.getContext();
+        if (context != null) {
+            Intent intent = new Intent(context, PartTimeTrainWebActivity.class);
+            intent.putExtra("webtitle", webtitle);
+            intent.putExtra("weburl", weburl);
+            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+            context.startActivity(intent);
+        } else {
+            throw new RuntimeException("context is null.please check it.");
+        }
+    }
+
+    public static void startInstance(String webtitle, String weburl, boolean hideTitleBar) {
+        Context context = CommUtils.getContext();
+        if (context != null) {
+            Intent intent = new Intent(context, PartTimeTrainWebActivity.class);
+            intent.putExtra("webtitle", webtitle);
+            intent.putExtra("weburl", weburl);
+            intent.putExtra("hideTitleBar", hideTitleBar);
+            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+            context.startActivity(intent);
+        } else {
+            throw new RuntimeException("context is null.please check it.");
+        }
+    }
+
+    @Override
+    public void init(@Nullable Bundle savedInstanceState) {
+
+        initView();
+        initTitles();
+        initWeb();
+
+    }
+
+    @Override
+    public int getLayoutIdRes() {
+        if (isHideTitleBar) {
+            //去除标题栏
+            requestWindowFeature(Window.FEATURE_NO_TITLE);
+            //去除状态栏
+            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
+        }
+        return R.layout.activity_part_time_train_web;
+    }
+
+    @Override
+    public void startObserve() {
+
+    }
+
+    @Override
+    protected void getDataFromIntent(Intent intent) {
+        super.getDataFromIntent(intent);
+        mWebtitle = intent.getStringExtra("webtitle");
+        mWeburl = intent.getStringExtra("weburl");
+        isHideTitleBar = intent.getBooleanExtra("hideTitleBar", false);
+    }
+
+
+    private void initTitles() {
+        if (isHideTitleBar) {
+            mTitleBar.setVisibility(View.GONE);
+            mPbWebView.setVisibility(View.GONE);
+            LoadingDialogManager.get().showLoading(this);
+        } else {
+            mTitleBar.setVisibility(View.VISIBLE);
+            mPbWebView.setVisibility(View.VISIBLE);
+            if (!CheckUtil.isEmpty(mWebtitle)) {
+
+                mTitleBar.setTitle(mWebtitle);
+            }
+        }
+
+    }
+
+    /**
+     * 根据百分比和起始颜色和结束颜色 计算当前的RGBA颜色
+     */
+    public int evaluate(float fraction, int startValue, int endValue) {
+        int startA = (startValue >> 24) & 0xff;
+        int startR = (startValue >> 16) & 0xff;
+        int startG = (startValue >> 8) & 0xff;
+        int startB = startValue & 0xff;
+
+        int endA = (endValue >> 24) & 0xff;
+        int endR = (endValue >> 16) & 0xff;
+        int endG = (endValue >> 8) & 0xff;
+        int endB = endValue & 0xff;
+
+        return ((startA + (int) (fraction * (endA - startA))) << 24) |
+                ((startR + (int) (fraction * (endR - startR))) << 16) |
+                ((startG + (int) (fraction * (endG - startG))) << 8) |
+                ((startB + (int) (fraction * (endB - startB))));
+    }
+
+    @SuppressLint("AddJavascriptInterface")
+    private void initWeb() {
+        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
+        mWebView = new MyWebView(getApplicationContext());
+        mWebView.setLayoutParams(params);
+        mWebView.addJavascriptInterface(new H5NewCallBackAndroid(), "webkit");
+        mWebView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
+
+        int mHeight = CommUtils.dip2px(50);
+
+        mWebView.setMyWebViewScrollListener(new MyWebView.OnScrollListener() {
+            @Override
+            public void onScroll(int scrollY) {
+                if (scrollY >= 0 && scrollY <= mHeight) {
+
+                    float percent = 0;
+                    if (mHeight != 0) {
+                        percent = scrollY / mHeight;
+                    }
+
+                    mTitleBar.setBackgroundColor(evaluate(percent, CommUtils.getColor(R.color.transparent), CommUtils.getColor(R.color.white)));
+
+                } else {
+
+                    mTitleBar.setBackgroundColor(CommUtils.getColor(R.color.app_blue));
+
+                }
+            }
+        });
+
+        mWebView.setOnWebChangeListener(new MyWebView.OnWebChangeListener() {
+            @Override
+            public void titleChange(String title) {
+                if (CheckUtil.isEmpty(mWebtitle)) {
+
+                    mTitleBar.setTitle(mWebtitle);
+                }
+            }
+
+            @Override
+            public void progressChange(int newProgress) {
+                if (newProgress == 100) {
+//                    mPbWebView.setProgress(100);
+                    LoadingDialogManager.get().dismissLoading();
+                    CommUtils.getHandler().postDelayed(() ->
+                            mPbWebView.setVisibility(View.GONE), 200);//0.2秒后隐藏进度条
+
+                } else if (mPbWebView.getVisibility() == View.GONE) {
+                    if (!isHideTitleBar) {
+                        mPbWebView.setVisibility(View.VISIBLE);
+                    }
+                }
+                if (!isHideTitleBar) {
+                    //设置初始进度10,这样会显得效果真一点,不能从0开始吧
+                    if (newProgress < 10) {
+                        newProgress = 10;
+                    }
+                    //不断更新进度
+//                    mPbWebView.setProgress(newProgress);
+                }
+
+            }
+
+            @Override
+            public void onInnerLinkChecked() {
+            }
+
+            @Override
+            public void onWebLoadError() {
+//                ToastUtils.get().makeText(mActivity, "Load Error!");
+            }
+        });
+
+        if (!TextUtils.isEmpty(mWeburl)) {
+            YYLogUtils.w("加载的网页地址:" + mWeburl);
+            mWebView.loadUrl(mWeburl);
+        }
+
+        mFlContent.addView(mWebView);
+    }
+
+    private void initView() {
+
+        StatusBarUtils.immersive(mActivity);
+
+        String tokenStr = SPUtils.getInstance(CommUtils.getContext()).getString(YYConstants.USER_TOKEN, "");
+        int statusBarHeight = StatusBarUtils.getStatusBarHeight(mActivity);
+
+        mUrlEndWith = "?" + "token=" + tokenStr + "&statusBarHeight=" + statusBarHeight;
+
+        mPbWebView = findViewById(R.id.pb_web_view);
+        mFlContent = findViewById(R.id.fl_content);
+        mTitleBar = findViewById(R.id.easy_tittle_part_time_train_web);
+
+    }
+
+    //新版Webkit的点击接口回调
+    private class H5NewCallBackAndroid {
+
+        @JavascriptInterface
+        public void AdhocTrainingCompleted(Object object) {
+
+//            ToastUtils.get().makeText(CommUtils.getContext(), "AdhocTrainingCompleted");
+
+            String webUrl = "";
+
+//            if (BaseApplication.APP_COUNTRY == 1) {
+//
+//                //马来
+//                webUrl = YYConstants.Malay_PART_TIME_TRAIN_RESULT_URL;
+//
+//            } else {
+
+                //默认新加坡
+                webUrl = YYConstants.PART_TIME_TRAIN_RESULT_URL;
+//            }
+
+            PartTimeTrainWebActivity.startInstance("Training Result", webUrl + mUrlEndWith);
+
+            //完成在线培训后发通知
+//            LiveEventBus.get(YYConstants.EVENT_PART_TIME_JOB_ONLINE_TRAINING_COMPLETE, Boolean.class).post(true);
+
+            finish();
+
+        }
+
+        @JavascriptInterface
+        public void ToFillPersonalDetail(Object object) {
+
+//            ToastUtils.get().makeText(CommUtils.getContext(), "ToFillPersonalDetail");
+
+            YYRouterService.INSTANCE.getParttimeComponentServer().startPartTimeJobEditProfileInfoActivity();
+
+
+            finish();
+
+        }
+
+        @JavascriptInterface
+        public void ToCheckMyTrainingDetails(Object object) {
+
+            String webUrl = "";
+
+//            if (BaseApplication.APP_COUNTRY == 1) {
+//
+//                //马来
+//                webUrl = YYConstants.Malay_PART_TIME_TRAIN_ANSWER_URL;
+//
+//            } else {
+
+                //默认新加坡
+                webUrl = YYConstants.PART_TIME_TRAIN_ANSWER_URL;
+//            }
+
+            PartTimeTrainWebActivity.startInstance("Online Training", webUrl + mUrlEndWith);
+
+        }
+
+    }
+
+    /**
+     * 集成了系统的回退和网页的回退
+     */
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
+            mWebView.goBack();
+            return true;
+        }
+        return super.onKeyDown(keyCode, event);
+    }
+
+    @Override
+    protected void onPause() {
+        super.onPause();
+        if (mWebView != null) {
+            mWebView.onPause();
+        }
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        if (mWebView != null) {
+            mWebView.onResume();
+        }
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        if (mWebView != null) {
+            mWebView.clearCache(true); //清空缓存
+            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
+                if (mFlContent != null) {
+                    mFlContent.removeView(mWebView);
+                }
+                mWebView.removeAllViews();
+                mWebView.destroy();
+            } else {
+                mWebView.removeAllViews();
+                mWebView.destroy();
+                if (mFlContent != null) {
+                    mFlContent.removeView(mWebView);
+                }
+            }
+            mWebView = null;
+        }
+
+        //退出当前web进程
+//        System.exit(0);
+    }
+}

BIN
cs_cptServices/src/main/res/drawable-xhdpi/back_white.webp


BIN
cs_cptServices/src/main/res/drawable-xxhdpi/back_white.webp


+ 35 - 0
cs_cptServices/src/main/res/layout/activity_part_time_job_credit_web.xml

@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:orientation="vertical">
+
+<!--    <include layout="@layout/include_comm_toolbar" />-->
+
+<!--    <include layout="@layout/layout_title_divide"/>-->
+
+    <FrameLayout
+        android:id="@+id/fl_content"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+    </FrameLayout>
+
+    <ProgressBar
+        android:id="@+id/pb_web_view"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:visibility="visible">
+
+    </ProgressBar>
+
+<!--    <com.android.basiclib.view.titlebar.EasyTitleBar
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/d_30dp"
+        app:Easy_backLayoutState="gone"
+        app:Easy_titleBarBackground="@color/my_credits_blue"
+        app:Easy_title=""/>-->
+
+</FrameLayout>

+ 34 - 0
cs_cptServices/src/main/res/layout/activity_part_time_train_web.xml

@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <FrameLayout
+        android:id="@+id/fl_content"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+    </FrameLayout>
+
+    <com.guadou.lib_baselib.view.titlebar.EasyTitleBar
+        android:id="@+id/easy_tittle_part_time_train_web"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        app:Easy_backRes="@drawable/back_white"
+        app:Easy_hasStatusPadding="true"
+        app:Easy_lineState="gone"
+        app:Easy_titleBarBackground="@color/transparent"
+        app:Easy_titleColor="@color/white" />
+
+    <ProgressBar
+        android:id="@+id/pb_web_view"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:visibility="gone">
+
+    </ProgressBar>
+
+</FrameLayout>

+ 1 - 0
cs_cptServices/src/main/res/values/colors.xml

@@ -59,6 +59,7 @@
     <color name="white_text_fe">#fefefe</color>
     <color name="gray_text_8e">#8E8E8E</color>
     <color name="gray_add_bank_card">#F2F4F8</color>
+    <color name="yellow_part_time_train">#FFFC01</color>
 
     <color name="color_333">#767676</color>
     <color name="color_275D9D">#275D9D</color>

+ 4 - 0
cs_router/src/main/java/com/guadou/cs_router/newsfeed/INewsFeedComponentServer.kt

@@ -11,4 +11,8 @@ interface INewsFeedComponentServer : IProvider {
 
     fun obtainNewsFeedMainFragment(): Fragment
 
+    fun startNewsFeedProfileActivity()
+
+    fun startNewsFeedFollowsActivity()
+
 }

+ 2 - 0
cs_router/src/main/java/com/guadou/cs_router/parttime/IParttimeComponentServer.kt

@@ -13,4 +13,6 @@ interface IParttimeComponentServer : IProvider {
 
     fun startPartTimeJobEditProfileInfoActivity()
 
+    fun startPartTimeJobTrainActivity()
+
 }