Ver Fonte

增加老师端曲谱搜索

Pq há 3 anos atrás
pai
commit
8074787a8d

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

@@ -156,6 +156,7 @@
         <activity
             android:name=".ui.homepage.HomePageActivity"
             android:configChanges="orientation|screenSize|keyboardHidden"
+            android:windowSoftInputMode="adjustPan"
             android:screenOrientation="portrait" />
         <activity
             android:name=".ui.minestyle.MineStylePageActivity"
@@ -258,6 +259,7 @@
         <activity
             android:name=".ui.score.MineScoreActivity"
             android:configChanges="orientation|screenSize|keyboardHidden"
+            android:windowSoftInputMode="adjustPan"
             android:screenOrientation="portrait" />
         <activity
             android:name=".ui.work.HomeWorkActivity"

+ 5 - 0
teacher/src/main/java/com/cooleshow/teacher/contract/MineScoreActContract.java

@@ -2,6 +2,9 @@ package com.cooleshow.teacher.contract;
 
 import com.cooleshow.base.presenter.view.BaseView;
 import com.cooleshow.teacher.bean.MusicSheetShareBean;
+import com.cooleshow.teacher.bean.QuerySubjectBean;
+
+import java.util.List;
 
 /**
  * 创建日期:2022/5/23 10:24
@@ -12,6 +15,8 @@ import com.cooleshow.teacher.bean.MusicSheetShareBean;
 public interface MineScoreActContract {
     interface MineScoreActView extends BaseView {
         void musicSheetShareSuccess(MusicSheetShareBean data);
+
+        void querySubjectItemSuccess(List<QuerySubjectBean> data);
     }
 
     interface Presenter {

+ 23 - 0
teacher/src/main/java/com/cooleshow/teacher/presenter/score/MineScoreActPresenter.java

@@ -8,8 +8,11 @@ import com.cooleshow.base.utils.ToastUtils;
 import com.cooleshow.base.utils.ErrorParse;
 import com.cooleshow.teacher.api.APIService;
 import com.cooleshow.teacher.bean.MusicSheetShareBean;
+import com.cooleshow.teacher.bean.QuerySubjectBean;
 import com.cooleshow.teacher.contract.MineScoreActContract;
 
+import java.util.List;
+
 /**
  * 创建日期:2022/5/23 10:24
  *
@@ -44,4 +47,24 @@ public class MineScoreActPresenter extends BasePresenter<MineScoreActContract.Mi
             }
         });
     }
+
+    /**
+     * 查询声部信息
+     */
+    public void querySubjectItem() {
+        addSubscribe(create(APIService.class).querySubjectItem(), new BaseObserver<List<QuerySubjectBean>>(getView()) {
+            @Override
+            protected void onSuccess(List<QuerySubjectBean> data) {
+                if (getView() != null) {
+                    getView().querySubjectItemSuccess(data);
+                }
+            }
+
+            @Override
+            public void onError(Throwable e) {
+                super.onError(e);
+
+            }
+        });
+    }
 }

+ 9 - 2
teacher/src/main/java/com/cooleshow/teacher/presenter/score/MineScorePresenter.java

@@ -1,5 +1,7 @@
 package com.cooleshow.teacher.presenter.score;
 
+import android.text.TextUtils;
+
 import com.cooleshow.base.constanst.Constants;
 import com.cooleshow.base.presenter.BasePresenter;
 import com.cooleshow.base.rx.BaseObserver;
@@ -20,13 +22,18 @@ import org.json.JSONObject;
  * 类说明:
  */
 public class MineScorePresenter extends BasePresenter<MineScoreContract.MineScoreView> implements MineScoreContract.Presenter {
-    public void queryPageCourseGroup(boolean isLoading,int page,String auditStatus){
+    public void queryPageCourseGroup(boolean isLoading, String subjectIds, String searchStr, int page, String auditStatus) {
         if (isLoading && getView() != null) {
             getView().showLoading();
         }
         JSONObject jsonObject = new JSONObject();
         try {
-            jsonObject.put("auditStatus",auditStatus);
+            if (!TextUtils.isEmpty(subjectIds) && !TextUtils.equals(subjectIds, "0")) {
+                //全部声部的时候不传这个字段
+                jsonObject.put("subjectIds", subjectIds);
+            }
+            jsonObject.put("auditStatus", auditStatus);
+            jsonObject.put("idAndName", searchStr);
             jsonObject.putOpt("page", page);
             jsonObject.putOpt("rows", Constants.DEFAULT_DATA_SIZE);
         } catch (JSONException e) {

+ 86 - 7
teacher/src/main/java/com/cooleshow/teacher/ui/score/MineScoreActivity.java

@@ -16,9 +16,12 @@ import com.cooleshow.base.router.RouterPath;
 import com.cooleshow.base.ui.activity.BaseMVPActivity;
 import com.cooleshow.base.utils.ToastUtil;
 import com.cooleshow.base.utils.ToastUtils;
+import com.cooleshow.base.widgets.poplist.PopMenuBean;
+import com.cooleshow.base.widgets.poplist.PopupListWindow;
 import com.cooleshow.teacher.R;
 import com.cooleshow.teacher.adapter.MineLiveCoursePagerAdapter;
 import com.cooleshow.teacher.bean.MusicSheetShareBean;
+import com.cooleshow.teacher.bean.QuerySubjectBean;
 import com.cooleshow.teacher.constants.TeacherInfoConstants;
 import com.cooleshow.teacher.contract.MineScoreActContract;
 import com.cooleshow.teacher.databinding.ActivityMineScoreBinding;
@@ -53,18 +56,21 @@ import io.rong.imkit.utils.StatusBarUtil;
 @Route(path = RouterPath.ScoreCenter.TEACHER_MINE_SCORE)
 public class MineScoreActivity extends BaseMVPActivity<ActivityMineScoreBinding, MineScoreActPresenter> implements MineScoreActContract.MineScoreActView, View.OnClickListener {
     private String musicianAuthStatus;
+    private String currentSubjectId = "";
+    private String currentSearchStr = "";
     private TabLayout tabLayout;
     private ViewPager viewPager;
     private List<String> titles = new ArrayList<String>(Arrays.asList("已上架", "审核中", "审核失败"));
     private List<String> auditStatusList = new ArrayList<String>(Arrays.asList("PASS", "DOING", "UNPASS"));
     private List<Fragment> fragments = new ArrayList<>();
+    private ArrayList<QuerySubjectBean> subjectBeanList = new ArrayList<>();
 
     @Override
     public void onClick(View view) {
         switch (view.getId()) {
             case R.id.tv_right:
-                if(!TextUtils.equals(musicianAuthStatus, TeacherInfoConstants.MUSICIAN_STATUS_PASS)){
-                    ToastUtil.getInstance().show(this,"您还没有上传曲谱");
+                if (!TextUtils.equals(musicianAuthStatus, TeacherInfoConstants.MUSICIAN_STATUS_PASS)) {
+                    ToastUtil.getInstance().show(this, "您还没有上传曲谱");
                     return;
                 }
                 presenter.musicSheetShare();
@@ -83,6 +89,18 @@ public class MineScoreActivity extends BaseMVPActivity<ActivityMineScoreBinding,
         viewPager = viewBinding.viewpager;
         viewPager.setCurrentItem(0);
         mShareListener = new CustomShareListener(this);
+        viewBinding.searchView.setOnSearchListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                String target = viewBinding.searchView.getSearchEdit().getText().toString().trim();
+                currentSearchStr = target;
+                updateByFilter();
+            }
+        });
+
+        viewBinding.searchView.setOnLeftClickListener(v -> {
+            selectVocalPart();
+        });
     }
 
     @Override
@@ -90,11 +108,58 @@ public class MineScoreActivity extends BaseMVPActivity<ActivityMineScoreBinding,
         super.onCreate(savedInstanceState);
         StatusBarUtil.setStatusBarDarkTheme(this, true);
     }
+
     @Override
     public void initData() {
         super.initData();
-        musicianAuthStatus= getIntent().getStringExtra("musicianAuthStatus");
+        musicianAuthStatus = getIntent().getStringExtra("musicianAuthStatus");
         initTabLayoutAndViewPager();
+        presenter.querySubjectItem();
+    }
+
+    /**
+     * 选择声部
+     */
+    private void selectVocalPart() {
+        if (subjectBeanList.size() == 0) {
+            subjectBeanList.add(new QuerySubjectBean("声部", 0));
+        }
+        List<PopMenuBean> popList = new ArrayList<>();
+        for (QuerySubjectBean bean : subjectBeanList) {
+            PopMenuBean popMenuBean = new PopMenuBean();
+            popMenuBean.setActionName(bean.name);
+            popList.add(popMenuBean);
+        }
+        initCoursePop(viewBinding.searchView, popList, position -> {
+            QuerySubjectBean bean = subjectBeanList.get(position);
+            currentSubjectId = String.valueOf(bean.id);
+            viewBinding.searchView.getLeftText().setText(bean.name);
+            updateByFilter();
+        });
+    }
+
+    private void updateByFilter() {
+        int currentItem = viewPager.getCurrentItem();
+        for (int i = 0; i < fragments.size(); i++) {
+            MineScoreFragment mineScoreFragment = (MineScoreFragment) fragments.get(i);
+            if (i == currentItem) {
+                mineScoreFragment.goSearch(currentSearchStr, currentSubjectId);
+            } else {
+                mineScoreFragment.updateFilter(currentSearchStr, currentSubjectId);
+            }
+        }
+    }
+
+    /**
+     * 选择声部pop
+     *
+     * @param targetView
+     * @param popList
+     * @param listener
+     */
+    private void initCoursePop(View targetView, List<PopMenuBean> popList, PopupListWindow.PopupListListener listener) {
+        PopupListWindow popWindow = new PopupListWindow(this);
+        popWindow.showListPop(targetView, popList, position -> listener.onPopupListClick(position));
     }
 
     @Override
@@ -112,7 +177,7 @@ public class MineScoreActivity extends BaseMVPActivity<ActivityMineScoreBinding,
         fragments.clear();
         for (int i = 0; i < titles.size(); i++) {
             tabLayout.addTab(tabLayout.newTab().setText(titles.get(i)));
-            Fragment adFragment = MineScoreFragment.newInstance(auditStatusList.get(i),musicianAuthStatus);
+            Fragment adFragment = MineScoreFragment.newInstance(auditStatusList.get(i), musicianAuthStatus);
             fragments.add(adFragment);
         }
         viewPager.setAdapter(new MineLiveCoursePagerAdapter(getSupportFragmentManager(), fragments, titles));
@@ -124,14 +189,26 @@ public class MineScoreActivity extends BaseMVPActivity<ActivityMineScoreBinding,
         showScoreShareDialog(data);
     }
 
+    @Override
+    public void querySubjectItemSuccess(List<QuerySubjectBean> data) {
+        if (!checkActivityExist()) {
+            return;
+        }
+        subjectBeanList.clear();
+        subjectBeanList.add(new QuerySubjectBean("声部", 0));
+        subjectBeanList.addAll(data);
+    }
+
     private void showScoreShareDialog(MusicSheetShareBean data) {
-        DialogUtils.showScoreShare(this,data, bitmap -> share(bitmap));
+        DialogUtils.showScoreShare(this, data, bitmap -> share(bitmap));
     }
+
     private ShareAction mShareAction;
     private UMShareListener mShareListener;
-    private void share(Bitmap bitmap){
+
+    private void share(Bitmap bitmap) {
         mShareAction = new ShareAction(MineScoreActivity.this).setDisplayList(
-                        SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE, SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE, SHARE_MEDIA.SINA)
+                SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE, SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE, SHARE_MEDIA.SINA)
                 .setShareboardclickCallback(new ShareBoardlistener() {
                     @Override
                     public void onclick(SnsPlatform snsPlatform, SHARE_MEDIA share_media) {
@@ -145,6 +222,7 @@ public class MineScoreActivity extends BaseMVPActivity<ActivityMineScoreBinding,
                 });
         mShareAction.open();
     }
+
     private static class CustomShareListener implements UMShareListener {
 
         private WeakReference<MineScoreActivity> mActivity;
@@ -215,6 +293,7 @@ public class MineScoreActivity extends BaseMVPActivity<ActivityMineScoreBinding,
             mShareAction.close();
         }
     }
+
     @Override
     public void onDestroy() {
         super.onDestroy();

+ 18 - 4
teacher/src/main/java/com/cooleshow/teacher/ui/score/MineScoreFragment.java

@@ -42,6 +42,8 @@ import java.util.List;
  */
 public class MineScoreFragment extends BaseMVPFragment<FragmentMineScoreBinding, MineScorePresenter> implements MineScoreContract.MineScoreView, View.OnClickListener {
     private String auditStatus = "";
+    private String currentSubjectId = "";
+    private String currentSearchStr = "";
     private String musicianAuthStatus = TeacherInfoConstants.MUSICIAN_STATUS_UNPAALY;
     private MineScoreAdapter mineScoreAdapter;
     List<MusicSheetListBean.RowsBean> dataList = new ArrayList<>();
@@ -127,14 +129,14 @@ public class MineScoreFragment extends BaseMVPFragment<FragmentMineScoreBinding,
         mineScoreAdapter.setOnItemClickListener((adapter, view, position) -> {
             List<MusicSheetListBean.RowsBean> data = mineScoreAdapter.getData();
             MusicSheetListBean.RowsBean rowsBean = data.get(position);
-            if(TextUtils.equals(rowsBean.auditStatus,"UNPASS")){
+            if (TextUtils.equals(rowsBean.auditStatus, "UNPASS")) {
                 ARouter.getInstance().build(RouterPath.WebCenter.ACTIVITY_HTML)
-                        .withString(WebConstants.WEB_URL, String.format(WebConstants.EDIT_SCORE_PAGE,rowsBean.id))
+                        .withString(WebConstants.WEB_URL, String.format(WebConstants.EDIT_SCORE_PAGE, rowsBean.id))
                         .navigation();
                 return;
             }
             ARouter.getInstance().build(RouterPath.WebCenter.ACTIVITY_ACCOMPANY_HTML)
-                    .withString("url", String.format(WebConstants.SCORE_DETAIL_PAGE,rowsBean.id))
+                    .withString("url", String.format(WebConstants.SCORE_DETAIL_PAGE, rowsBean.id))
                     .withBoolean("isHideTitle", true)
                     .withBoolean("statusBarTextColor", true)
                     .withBoolean("isOpenLight", true)
@@ -176,7 +178,19 @@ public class MineScoreFragment extends BaseMVPFragment<FragmentMineScoreBinding,
     }
 
     private void queryScore(boolean isLoading) {
-        presenter.queryPageCourseGroup(isLoading, currentPage, auditStatus);
+        presenter.queryPageCourseGroup(isLoading, currentSubjectId, currentSearchStr, currentPage, auditStatus);
+    }
+
+    public void goSearch(String searchStr, String subjectId) {
+        this.currentSubjectId = subjectId;
+        this.currentSearchStr = searchStr;
+        currentPage = 1;
+        queryScore(true);
+    }
+
+    public void updateFilter(String searchStr, String subjectId) {
+        this.currentSubjectId = subjectId;
+        this.currentSearchStr = searchStr;
     }
 
     @Override

+ 10 - 1
teacher/src/main/res/layout/activity_mine_score.xml

@@ -10,10 +10,20 @@
         android:id="@+id/toolbar_include"
         layout="@layout/common_toolbar_layout" />
 
+    <com.cooleshow.teacher.widgets.CourseSearchView
+        android:id="@+id/search_view"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="10dp"
+        app:layout_constraintTop_toTopOf="parent"
+        app:left_search_text="声部"
+        app:search_edit_hint="请输入曲目名称" />
+
     <com.google.android.material.tabs.TabLayout
         android:id="@+id/tablayout"
         android:layout_width="match_parent"
         android:layout_height="@dimen/dp_44"
+        android:layout_marginTop="10dp"
         android:scrollbars="none"
         app:tabBackground="@null"
         app:tabGravity="fill"
@@ -28,7 +38,6 @@
         app:tabTextColor="@color/color_666666" />
 
 
-
     <androidx.viewpager.widget.ViewPager
         android:id="@+id/viewpager"
         android:layout_width="match_parent"

+ 8 - 3
teacher/src/main/res/layout/course_search_view.xml

@@ -9,24 +9,29 @@
         android:id="@+id/tv_agency"
         android:layout_width="wrap_content"
         android:layout_height="0dp"
+        android:layout_marginLeft="@dimen/dp_14"
         android:drawableRight="@drawable/icon_arrow_down"
         android:drawablePadding="6dp"
-        android:layout_marginLeft="@dimen/dp_17"
+        android:ellipsize="end"
         android:gravity="center"
         android:includeFontPadding="false"
+        android:maxLines="1"
         android:text="声部"
         android:textColor="@color/color_666666"
         android:textSize="@dimen/sp_14"
-        app:layout_constraintLeft_toLeftOf="parent"
         app:layout_constraintBottom_toBottomOf="@+id/search_view"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toLeftOf="@+id/search_view"
         app:layout_constraintTop_toTopOf="@+id/search_view" />
 
     <View
         android:id="@+id/search_view"
-        android:layout_width="@dimen/dp_280"
+        android:layout_width="0dp"
         android:layout_height="@dimen/dp_36"
         android:layout_marginRight="@dimen/dp_14"
+        android:layout_marginStart="5dp"
         android:background="@drawable/bg_white_18dp"
+        app:layout_constraintLeft_toRightOf="@+id/tv_agency"
         app:layout_constraintRight_toRightOf="parent"
         app:layout_constraintTop_toTopOf="parent" />