Ver código fonte

个人风采,个人设置,设置,修改昵称

Ryan8057 2 anos atrás
pai
commit
f8e8d5c4f4
63 arquivos alterados com 2474 adições e 2 exclusões
  1. 1 0
      BaseLibrary/build.gradle
  2. 1 0
      BaseLibrary/src/main/AndroidManifest.xml
  3. 5 0
      BaseLibrary/src/main/java/com/cooleshow/base/router/RouterPath.kt
  4. 43 0
      BaseLibrary/src/main/java/com/cooleshow/base/utils/FileUtils.java
  5. 18 0
      BaseLibrary/src/main/java/com/cooleshow/base/utils/helper/upload/UploadHelper.java
  6. 3 0
      BaseLibrary/src/main/res/values/colors.xml
  7. 21 0
      teacher/src/main/AndroidManifest.xml
  8. 69 0
      teacher/src/main/java/com/cooleshow/teacher/adapter/MineStyleVideoAdapter.java
  9. 48 0
      teacher/src/main/java/com/cooleshow/teacher/adapter/TeachableInstrumentAdapter.java
  10. 69 0
      teacher/src/main/java/com/cooleshow/teacher/adapter/TeachableInstrumentItemAdapter.java
  11. 30 0
      teacher/src/main/java/com/cooleshow/teacher/adapter/TeachableSelectAdapter.java
  12. 16 0
      teacher/src/main/java/com/cooleshow/teacher/api/APIService.java
  13. 57 0
      teacher/src/main/java/com/cooleshow/teacher/bean/TeachableInstrumentBean.java
  14. 11 2
      teacher/src/main/java/com/cooleshow/teacher/bean/TeacherSelfStyleInfoBean.java
  15. 23 0
      teacher/src/main/java/com/cooleshow/teacher/contract/MineStylePageContract.java
  16. 19 0
      teacher/src/main/java/com/cooleshow/teacher/contract/ModifyNickNameContract.java
  17. 19 0
      teacher/src/main/java/com/cooleshow/teacher/contract/PersonalSettingContract.java
  18. 17 0
      teacher/src/main/java/com/cooleshow/teacher/contract/SettingContract.java
  19. 23 0
      teacher/src/main/java/com/cooleshow/teacher/contract/TeachableInstrumentContract.java
  20. 34 0
      teacher/src/main/java/com/cooleshow/teacher/presenter/mine/ModifyNickNamePresenter.java
  21. 28 0
      teacher/src/main/java/com/cooleshow/teacher/presenter/mine/PersonalSettingPresenter.java
  22. 14 0
      teacher/src/main/java/com/cooleshow/teacher/presenter/mine/SettingPresenter.java
  23. 86 0
      teacher/src/main/java/com/cooleshow/teacher/presenter/minestyle/MineStylePagePresenter.java
  24. 32 0
      teacher/src/main/java/com/cooleshow/teacher/presenter/minestyle/TeachableInstrumentPresenter.java
  25. 16 0
      teacher/src/main/java/com/cooleshow/teacher/ui/main/MineFragment.java
  26. 83 0
      teacher/src/main/java/com/cooleshow/teacher/ui/mine/ModifyNickNameActivity.java
  27. 124 0
      teacher/src/main/java/com/cooleshow/teacher/ui/mine/PersonalSettingActivity.java
  28. 54 0
      teacher/src/main/java/com/cooleshow/teacher/ui/mine/SettingActivity.java
  29. 357 0
      teacher/src/main/java/com/cooleshow/teacher/ui/minestyle/MineStylePageActivity.java
  30. 134 0
      teacher/src/main/java/com/cooleshow/teacher/ui/minestyle/TeachableInstrumentActivity.java
  31. BIN
      teacher/src/main/res/drawable-xhdpi/icon_check_normal.png
  32. BIN
      teacher/src/main/res/drawable-xhdpi/icon_check_select.png
  33. BIN
      teacher/src/main/res/drawable-xhdpi/icon_et_close.png
  34. BIN
      teacher/src/main/res/drawable-xhdpi/icon_fan_pages.png
  35. BIN
      teacher/src/main/res/drawable-xhdpi/icon_go_right.png
  36. BIN
      teacher/src/main/res/drawable-xhdpi/icon_personal_introduction.png
  37. BIN
      teacher/src/main/res/drawable-xhdpi/icon_switch_off.png
  38. BIN
      teacher/src/main/res/drawable-xhdpi/icon_switch_open.png
  39. BIN
      teacher/src/main/res/drawable-xhdpi/icon_upload_tum.png
  40. BIN
      teacher/src/main/res/drawable-xhdpi/icon_video_close.png
  41. BIN
      teacher/src/main/res/drawable-xxhdpi/icon_check_normal.png
  42. BIN
      teacher/src/main/res/drawable-xxhdpi/icon_check_select.png
  43. BIN
      teacher/src/main/res/drawable-xxhdpi/icon_et_close.png
  44. BIN
      teacher/src/main/res/drawable-xxhdpi/icon_fan_pages.png
  45. BIN
      teacher/src/main/res/drawable-xxhdpi/icon_go_right.png
  46. BIN
      teacher/src/main/res/drawable-xxhdpi/icon_personal_introduction.png
  47. BIN
      teacher/src/main/res/drawable-xxhdpi/icon_switch_off.png
  48. BIN
      teacher/src/main/res/drawable-xxhdpi/icon_switch_open.png
  49. BIN
      teacher/src/main/res/drawable-xxhdpi/icon_upload_tum.png
  50. BIN
      teacher/src/main/res/drawable-xxhdpi/icon_video_close.png
  51. 15 0
      teacher/src/main/res/drawable/bg_dash_border_radius.xml
  52. 9 0
      teacher/src/main/res/drawable/bg_select_2dc7aa_radius.xml
  53. 8 0
      teacher/src/main/res/drawable/mark_2dc7aa_3radius.xml
  54. 226 0
      teacher/src/main/res/layout/activity_mine_style_page.xml
  55. 42 0
      teacher/src/main/res/layout/activity_modify_nickname.xml
  56. 301 0
      teacher/src/main/res/layout/activity_personal_setting.xml
  57. 181 0
      teacher/src/main/res/layout/activity_setting.xml
  58. 59 0
      teacher/src/main/res/layout/activity_teachable_instrument.xml
  59. 34 0
      teacher/src/main/res/layout/item_teacher_style_video_layout.xml
  60. 32 0
      teacher/src/main/res/layout/item_teacher_style_video_layout_add.xml
  61. 36 0
      teacher/src/main/res/layout/layout_teachable_instrument.xml
  62. 41 0
      teacher/src/main/res/layout/layout_teachable_instrument_item.xml
  63. 35 0
      teacher/src/main/res/layout/layout_teachable_instrument_select.xml

+ 1 - 0
BaseLibrary/build.gradle

@@ -144,4 +144,5 @@ dependencies {
     api 'com.github.mcxtzhang:SuspensionIndexBar:V1.0.0'
     //金山云上传所需
     api 'joda-time:joda-time:2.9.9'
+    api 'com.google.android:flexbox:2.0.1'
 }

+ 1 - 0
BaseLibrary/src/main/AndroidManifest.xml

@@ -6,6 +6,7 @@
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
     <application />
 
 </manifest>

+ 5 - 0
BaseLibrary/src/main/java/com/cooleshow/base/router/RouterPath.kt

@@ -58,6 +58,11 @@ object RouterPath {
     class MineCenter {
         companion object {
             const val HOME_PAGE = "/teacher/ui/homepage/HomePageActivity"
+            const val MINE_STYLE_PAGE = "/teacher/ui/minestyle/MineStyleActivity"
+            const val MINE_TEACHABLE_INSTRUMENT = "/teacher/ui/minestyle/TeachableInstrumentActivity"
+            const val MINE_PERSONAL_SETTING = "/teacher/ui/mine/PersonalSettingActivity"
+            const val MINE_SETTING = "/teacher/ui/mine/SettingActivity"
+            const val MINE_MODIFY_NICKNAME = "/teacher/ui/mine/ModifyNickNameActivity"
         }
     }
 }

+ 43 - 0
BaseLibrary/src/main/java/com/cooleshow/base/utils/FileUtils.java

@@ -4,12 +4,15 @@ import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.AssetFileDescriptor;
+import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.net.Uri;
 import android.os.Build;
 import android.os.Environment;
 import android.os.StatFs;
+import android.provider.OpenableColumns;
 import android.text.TextUtils;
+import android.util.Log;
 
 import java.io.BufferedInputStream;
 import java.io.ByteArrayInputStream;
@@ -1551,4 +1554,44 @@ public final class FileUtils {
 
         return file == null ? false : file.exists();
     }
+
+    /**
+     * 获取本地文件
+     * @param uri
+     * @param context
+     * @return
+     */
+    public static String getFilePathForN(Uri uri, Context context) {
+        Uri returnUri = uri;
+        Cursor returnCursor = context.getContentResolver().query(returnUri, null, null, null, null);
+        int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
+        int sizeIndex = returnCursor.getColumnIndex(OpenableColumns.SIZE);
+        returnCursor.moveToFirst();
+        String name = (returnCursor.getString(nameIndex));
+        String size = (Long.toString(returnCursor.getLong(sizeIndex)));
+        File file = new File(context.getFilesDir(), name);
+        try {
+            InputStream inputStream = context.getContentResolver().openInputStream(uri);
+            FileOutputStream outputStream = new FileOutputStream(file);
+            int read = 0;
+            int maxBufferSize = 1 * 1024 * 1024;
+            int bytesAvailable = inputStream.available();
+
+            //int bufferSize = 1024;
+            int bufferSize = Math.min(bytesAvailable, maxBufferSize);
+
+            final byte[] buffers = new byte[bufferSize];
+            while ((read = inputStream.read(buffers)) != -1) {
+                outputStream.write(buffers, 0, read);
+            }
+            Log.e("File Size", "Size " + file.length());
+            inputStream.close();
+            outputStream.close();
+            Log.e("File Path", "Path " + file.getPath());
+            Log.e("File Size", "Size " + file.length());
+        } catch (Exception e) {
+            Log.e("Exception", e.getMessage());
+        }
+        return file.getPath();
+    }
 }

+ 18 - 0
BaseLibrary/src/main/java/com/cooleshow/base/utils/helper/upload/UploadHelper.java

@@ -117,6 +117,9 @@ public class UploadHelper {
 
             @Override
             public void onTaskSuccess(int i, Header[] headers) {
+                if (null!=upLoadCallBack){
+                    upLoadCallBack.onSuccess(buildUploadUrl(key));
+                }
                 LogUtils.i("pq", "onSuccess postObject is " + i);
             }
 
@@ -189,9 +192,24 @@ public class UploadHelper {
                 .append(END_POINT)
                 .append("/")
                 .append(SRC_BUCKETNAME)
+                .append("/")
                 .append(key);
         LogUtils.i("UploadHelper", "upload success path:" + sb.toString());
         return sb.toString();
     }
 
+    private UpLoadCallBack upLoadCallBack;
+
+    public void setUpLoadCallBack(UpLoadCallBack upLoadCallBack) {
+        this.upLoadCallBack = upLoadCallBack;
+
+    }
+
+    public interface UpLoadCallBack {
+        void onSuccess(String url);
+
+        void onFailure();
+    }
+
+
 }

+ 3 - 0
BaseLibrary/src/main/res/values/colors.xml

@@ -61,4 +61,7 @@
     <color name="color_e5e5e5">#E5E5E5</color>
     <color name="color_0086ff">#0086FF</color>
     <color name="color_e1f0ff">#E1F0FF</color>
+    <color name="color_f6f8f9">#F6F8F9</color>
+    <color name="color_ff9e5a">#FF9E5A</color>
+    <color name="color_e9fff8">#E9FFF8</color>
 </resources>

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

@@ -8,6 +8,7 @@
         android:icon="@mipmap/ic_launcher"
         android:label="@string/app_name"
         android:networkSecurityConfig="@xml/network_security_config"
+        android:requestLegacyExternalStorage="true"
         android:roundIcon="@mipmap/ic_launcher_round"
         android:supportsRtl="true"
         android:theme="@style/Theme.CooleShow">
@@ -58,6 +59,26 @@
             android:name=".ui.homepage.HomePageActivity"
             android:configChanges="orientation|screenSize|keyboardHidden"
             android:screenOrientation="portrait" />
+        <activity
+            android:name=".ui.minestyle.MineStylePageActivity"
+            android:configChanges="orientation|screenSize|keyboardHidden"
+            android:screenOrientation="portrait" />
+        <activity
+            android:name=".ui.minestyle.TeachableInstrumentActivity"
+            android:screenOrientation="portrait" />
+        <activity
+            android:name=".ui.mine.PersonalSettingActivity"
+            android:configChanges="orientation|screenSize|keyboardHidden"
+            android:screenOrientation="portrait" />
+        <activity
+            android:name=".ui.mine.SettingActivity"
+            android:configChanges="orientation|screenSize|keyboardHidden"
+            android:screenOrientation="portrait" />
+
+        <activity
+            android:name=".ui.mine.ModifyNickNameActivity"
+            android:configChanges="orientation|screenSize|keyboardHidden"
+            android:screenOrientation="portrait" />
     </application>
 
 </manifest>

+ 69 - 0
teacher/src/main/java/com/cooleshow/teacher/adapter/MineStyleVideoAdapter.java

@@ -0,0 +1,69 @@
+package com.cooleshow.teacher.adapter;
+
+import android.view.View;
+import android.widget.ImageView;
+
+import androidx.annotation.NonNull;
+
+import com.chad.library.adapter.base.BaseMultiItemQuickAdapter;
+import com.chad.library.adapter.base.viewholder.BaseViewHolder;
+import com.cooleshow.base.utils.GlideUtils;
+import com.cooleshow.teacher.R;
+import com.cooleshow.teacher.bean.TeacherSelfStyleInfoBean;
+
+import java.util.List;
+
+/**
+ * 创建日期:2022/5/13 15:46
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class MineStyleVideoAdapter extends BaseMultiItemQuickAdapter<TeacherSelfStyleInfoBean.StyleVideoBean, BaseViewHolder> {
+    public MineStyleVideoAdapter(List<TeacherSelfStyleInfoBean.StyleVideoBean> data) {
+        super(data);
+        addItemType(0, R.layout.item_teacher_style_video_layout);
+        addItemType(1, R.layout.item_teacher_style_video_layout_add);
+    }
+
+    @Override
+    protected void convert(@NonNull BaseViewHolder holder, TeacherSelfStyleInfoBean.StyleVideoBean styleVideoBean) {
+        switch (styleVideoBean.getItemType()) {
+            case 0:
+                //加载视频缩略图
+                ImageView iv_video_bg = holder.getView(R.id.iv_video_bg);
+                GlideUtils.INSTANCE.loadVideoThumbnail(getContext(), styleVideoBean.videoUrl, iv_video_bg);
+                ImageView im_delete = holder.getView(R.id.im_delete);
+                im_delete.setOnClickListener(view -> {
+                    if (null != itemAddClickAction) {
+                        itemAddClickAction.delete(styleVideoBean.videoUrl);
+                    }
+                });
+                break;
+            case 1:
+                ImageView iv_video_add = holder.getView(R.id.iv_video_add);
+                iv_video_add.setOnClickListener(view -> {
+                    if (null != itemAddClickAction) {
+                        itemAddClickAction.add();
+                    }
+                });
+                break;
+        }
+
+    }
+
+    private ItemAddClickAction itemAddClickAction;
+
+    public void setItemAddClickAction(ItemAddClickAction itemAddClickAction) {
+        this.itemAddClickAction = itemAddClickAction;
+
+    }
+
+    public interface ItemAddClickAction {
+        void add();
+
+        void delete(String url);
+    }
+
+
+}

+ 48 - 0
teacher/src/main/java/com/cooleshow/teacher/adapter/TeachableInstrumentAdapter.java

@@ -0,0 +1,48 @@
+package com.cooleshow.teacher.adapter;
+
+import android.view.View;
+import android.widget.TextView;
+
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.viewholder.BaseViewHolder;
+import com.cooleshow.teacher.R;
+import com.cooleshow.teacher.bean.TeachableInstrumentBean;
+
+import java.util.List;
+
+/**
+ * 创建日期:2022/5/13 17:31
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class TeachableInstrumentAdapter  extends BaseQuickAdapter<TeachableInstrumentBean, BaseViewHolder> {
+
+    public TeachableInstrumentAdapter(List<TeachableInstrumentBean> data) {
+        super(R.layout.layout_teachable_instrument, data);
+    }
+
+
+    @Override
+    protected void convert(BaseViewHolder helper, TeachableInstrumentBean item) {
+        TextView tv_title = helper.getView(R.id.tv_title);
+        tv_title.setText(item.name);
+        RecyclerView rv_item=helper.getView(R.id.rv_item);
+        if (null!=item.subjects&&item.subjects.size()>0){
+            rv_item.setVisibility(View.VISIBLE);
+            GridLayoutManager manager = new GridLayoutManager(getContext(), 3);
+            rv_item.setHasFixedSize(true);
+            rv_item.setLayoutManager(manager);
+            TeachableInstrumentItemAdapter teachableInstrumentItemAdapter=new TeachableInstrumentItemAdapter(item.subjects);
+            rv_item.setNestedScrollingEnabled(false);
+            rv_item.setAdapter(teachableInstrumentItemAdapter);
+        }else {
+            rv_item.setVisibility(View.GONE);
+        }
+
+    }
+
+}

+ 69 - 0
teacher/src/main/java/com/cooleshow/teacher/adapter/TeachableInstrumentItemAdapter.java

@@ -0,0 +1,69 @@
+package com.cooleshow.teacher.adapter;
+
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.viewholder.BaseViewHolder;
+import com.cooleshow.base.utils.GlideUtils;
+import com.cooleshow.base.utils.ToastUtil;
+import com.cooleshow.base.utils.ToastUtils;
+import com.cooleshow.teacher.R;
+import com.cooleshow.teacher.bean.TeachableInstrumentBean;
+
+import java.util.List;
+
+/**
+ * 创建日期:2022/5/13 18:12
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class TeachableInstrumentItemAdapter extends BaseQuickAdapter<TeachableInstrumentBean, BaseViewHolder> {
+
+    public TeachableInstrumentItemAdapter(List<TeachableInstrumentBean> data) {
+        super(R.layout.layout_teachable_instrument_item, data);
+    }
+
+
+    @Override
+    protected void convert(BaseViewHolder helper, TeachableInstrumentBean item) {
+        if (item == null) {
+            return;
+        }
+        ImageView iv_pic = helper.getView(R.id.iv_pic);
+        ImageView im_check = helper.getView(R.id.im_check);
+        TextView tv_name = helper.getView(R.id.tv_name);
+        GlideUtils.INSTANCE.loadImage(getContext(), item.img, iv_pic);
+        if (item.isSelect) {
+            im_check.setBackgroundResource(R.drawable.icon_check_select);
+        } else {
+            im_check.setBackgroundResource(R.drawable.icon_check_normal);
+        }
+        tv_name.setText(item.name);
+        iv_pic.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                item.isSelect = !item.isSelect;
+                if (item.isSelect) {
+                    int selectCount = 0;
+                    for (TeachableInstrumentBean datum : getData()) {
+                        if (datum.isSelect) {
+                            selectCount++;
+                        }
+                    }
+                    if (selectCount==6){
+                        ToastUtils.showShort("最多选5个乐器!");
+                        item.isSelect=false;
+                        return;
+                    }
+
+                    im_check.setBackgroundResource(R.drawable.icon_check_select);
+                } else {
+                    im_check.setBackgroundResource(R.drawable.icon_check_normal);
+                }
+            }
+        });
+    }
+}

+ 30 - 0
teacher/src/main/java/com/cooleshow/teacher/adapter/TeachableSelectAdapter.java

@@ -0,0 +1,30 @@
+package com.cooleshow.teacher.adapter;
+
+import android.widget.TextView;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.viewholder.BaseViewHolder;
+import com.cooleshow.teacher.R;
+import com.cooleshow.teacher.bean.TeachableInstrumentBean;
+
+import java.util.List;
+
+/**
+ * 创建日期:2022/5/16 14:44
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class TeachableSelectAdapter extends BaseQuickAdapter<TeachableInstrumentBean, BaseViewHolder> {
+
+    public TeachableSelectAdapter(List<TeachableInstrumentBean> data) {
+        super(R.layout.layout_teachable_instrument_select, data);
+    }
+
+
+    @Override
+    protected void convert(BaseViewHolder helper, TeachableInstrumentBean item) {
+        TextView tv_name=helper.getView(R.id.tv_name);
+        tv_name.setText(item.name);
+    }
+}

+ 16 - 0
teacher/src/main/java/com/cooleshow/teacher/api/APIService.java

@@ -9,6 +9,7 @@ import com.cooleshow.teacher.bean.ReceivedCommentListBean;
 import com.cooleshow.teacher.bean.SparringCourseCommentBean;
 import com.cooleshow.teacher.bean.SparringCourseHomeworkBean;
 import com.cooleshow.teacher.bean.SparringCourseListBean;
+import com.cooleshow.teacher.bean.TeachableInstrumentBean;
 import com.cooleshow.teacher.bean.TeacherSelfStyleInfoBean;
 import com.cooleshow.teacher.bean.TeacherUserInfo;
 import com.cooleshow.teacher.bean.VideoCourseListBean;
@@ -177,4 +178,19 @@ public interface APIService {
      */
     @POST(TEACHER_GROUP + "music/sheet/list")
     Observable<BaseResponse<HomePageSheetMusicListBean>> getSheetMusicList(@Body RequestBody body);
+
+    /**
+     * 乐器列表查询
+     * @return
+     */
+    @GET(TEACHER_GROUP + "subject/subjectSelect")
+    Observable<BaseResponse<List<TeachableInstrumentBean>>> subjectSelect();
+
+    /**
+     * 我的-个人风采保存
+     * @param body
+     * @return
+     */
+    @POST(TEACHER_GROUP + "teacher/saveTeacherStyle")
+    Observable<BaseResponse<TeacherSelfStyleInfoBean>> saveTeacherStyle(@Body RequestBody body);
 }

+ 57 - 0
teacher/src/main/java/com/cooleshow/teacher/bean/TeachableInstrumentBean.java

@@ -0,0 +1,57 @@
+package com.cooleshow.teacher.bean;
+
+import com.chad.library.adapter.base.entity.MultiItemEntity;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 创建日期:2022/5/13 16:59
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class TeachableInstrumentBean implements Serializable {
+    /**
+     * "code": "",
+     * "createTime": "",
+     * "delFlag": true,
+     * "desc": "",
+     * "id": 0,
+     * "img": "",
+     * "name": "",
+     * "parentSubjectId": 0,
+     * "parentSubjectName": "",
+     * "subjects": [
+     * {
+     * "code": "",
+     * "createTime": "",
+     * "delFlag": true,
+     * "desc": "",
+     * "id": 0,
+     * "img": "",
+     * "name": "",
+     * "parentSubjectId": 0,
+     * "parentSubjectName": "",
+     * "subjects": [
+     * {}
+     * ],
+     * "updateTime": ""
+     * }
+     * ],
+     * "updateTime": ""
+     */
+    public String code;
+    public String createTime;
+    public boolean delFlag;
+    public String desc;
+    public int id;
+    public String img;
+    public String name;
+    public int parentSubjectId;
+    public String parentSubjectName;
+    public List<TeachableInstrumentBean> subjects;
+    public String updateTime;
+    public boolean isSelect;
+
+}

+ 11 - 2
teacher/src/main/java/com/cooleshow/teacher/bean/TeacherSelfStyleInfoBean.java

@@ -1,11 +1,14 @@
 package com.cooleshow.teacher.bean;
 
+import com.chad.library.adapter.base.entity.MultiItemEntity;
+
+import java.io.Serializable;
 import java.util.List;
 
 /**
  * Author by pq, Date on 2022/5/10.
  */
-public class TeacherSelfStyleInfoBean {
+public class TeacherSelfStyleInfoBean implements Serializable {
 
     /**
      * avatar :
@@ -79,7 +82,7 @@ public class TeacherSelfStyleInfoBean {
     public String workUnit;
     public List<StyleVideoBean> styleVideo;
 
-    public static class StyleVideoBean {
+    public static class StyleVideoBean  implements MultiItemEntity {
         /**
          * auditVersion :
          * browse : 0
@@ -99,5 +102,11 @@ public class TeacherSelfStyleInfoBean {
         public String updateTime;
         public int userId;
         public String videoUrl;
+        //默认为0 为视频展示 为1时添加视频
+        public int type;
+        @Override
+        public int getItemType() {
+            return type;
+        }
     }
 }

+ 23 - 0
teacher/src/main/java/com/cooleshow/teacher/contract/MineStylePageContract.java

@@ -0,0 +1,23 @@
+package com.cooleshow.teacher.contract;
+
+import com.cooleshow.base.presenter.view.BaseView;
+import com.cooleshow.teacher.bean.TeacherSelfStyleInfoBean;
+
+/**
+ * 创建日期:2022/5/13 14:15
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public interface MineStylePageContract {
+    interface MineStylePageView extends BaseView {
+        void getSelfStyleSuccess(TeacherSelfStyleInfoBean styleInfoBean);
+        void saveTeacherStyleSuccess(TeacherSelfStyleInfoBean styleInfoBean);
+        void upLoadVideoSuccess(TeacherSelfStyleInfoBean.StyleVideoBean styleVideoBean);
+        void upLoadVideoFailure();
+    }
+
+    interface Presenter {
+        void getTeacherSelfStyle();
+    }
+}

+ 19 - 0
teacher/src/main/java/com/cooleshow/teacher/contract/ModifyNickNameContract.java

@@ -0,0 +1,19 @@
+package com.cooleshow.teacher.contract;
+
+import com.cooleshow.base.presenter.view.BaseView;
+import com.cooleshow.teacher.bean.TeacherSelfStyleInfoBean;
+
+/**
+ * 创建日期:2022/5/16 17:50
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public interface ModifyNickNameContract {
+    interface ModifyNickNameView extends BaseView {
+        void saveTeacherStyleSuccess(TeacherSelfStyleInfoBean styleInfoBean);
+    }
+
+    interface Presenter {
+    }
+}

+ 19 - 0
teacher/src/main/java/com/cooleshow/teacher/contract/PersonalSettingContract.java

@@ -0,0 +1,19 @@
+package com.cooleshow.teacher.contract;
+
+import com.cooleshow.base.presenter.view.BaseView;
+import com.cooleshow.teacher.bean.TeacherSelfStyleInfoBean;
+
+/**
+ * 创建日期:2022/5/16 16:12
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public interface PersonalSettingContract {
+    interface PersonalSettingView extends BaseView {
+        void getSelfStyleSuccess(TeacherSelfStyleInfoBean styleInfoBean);
+    }
+    interface Presenter {
+        void getTeacherSelfStyle();
+    }
+}

+ 17 - 0
teacher/src/main/java/com/cooleshow/teacher/contract/SettingContract.java

@@ -0,0 +1,17 @@
+package com.cooleshow.teacher.contract;
+
+import com.cooleshow.base.presenter.view.BaseView;
+
+/**
+ * 创建日期:2022/5/16 16:58
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public interface SettingContract {
+    interface SettingView extends BaseView {
+
+    }
+    interface Presenter {
+    }
+}

+ 23 - 0
teacher/src/main/java/com/cooleshow/teacher/contract/TeachableInstrumentContract.java

@@ -0,0 +1,23 @@
+package com.cooleshow.teacher.contract;
+
+import com.cooleshow.base.presenter.view.BaseView;
+import com.cooleshow.teacher.bean.TeachableInstrumentBean;
+import com.cooleshow.teacher.bean.TeacherSelfStyleInfoBean;
+
+import java.util.List;
+
+/**
+ * 创建日期:2022/5/13 16:33
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public interface TeachableInstrumentContract {
+    interface TeachableInstrumentView extends BaseView {
+        void subjectSelectSuccess(List<TeachableInstrumentBean> styleInfoBean);
+    }
+
+    interface Presenter {
+        void subjectSelect();
+    }
+}

+ 34 - 0
teacher/src/main/java/com/cooleshow/teacher/presenter/mine/ModifyNickNamePresenter.java

@@ -0,0 +1,34 @@
+package com.cooleshow.teacher.presenter.mine;
+
+import com.cooleshow.base.presenter.BasePresenter;
+import com.cooleshow.base.rx.BaseObserver;
+import com.cooleshow.base.utils.RequestBodyUtil;
+import com.cooleshow.teacher.api.APIService;
+import com.cooleshow.teacher.bean.TeacherSelfStyleInfoBean;
+import com.cooleshow.teacher.contract.ModifyNickNameContract;
+
+/**
+ * 创建日期:2022/5/16 17:49
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class ModifyNickNamePresenter extends BasePresenter<ModifyNickNameContract.ModifyNickNameView> implements ModifyNickNameContract.Presenter {
+
+    public void saveTeacherStyle(String jsonStr){
+        addSubscribe(create(APIService.class).saveTeacherStyle(RequestBodyUtil.convertToRequestBodyJson(jsonStr)), new BaseObserver<TeacherSelfStyleInfoBean>(getView()) {
+            @Override
+            protected void onSuccess(TeacherSelfStyleInfoBean data) {
+                if (getView() != null) {
+                    getView().saveTeacherStyleSuccess(data);
+                }
+            }
+
+            @Override
+            public void onError(Throwable e) {
+                super.onError(e);
+
+            }
+        });
+    }
+}

+ 28 - 0
teacher/src/main/java/com/cooleshow/teacher/presenter/mine/PersonalSettingPresenter.java

@@ -0,0 +1,28 @@
+package com.cooleshow.teacher.presenter.mine;
+
+import com.cooleshow.base.presenter.BasePresenter;
+import com.cooleshow.base.rx.BaseObserver;
+import com.cooleshow.teacher.api.APIService;
+import com.cooleshow.teacher.bean.TeacherSelfStyleInfoBean;
+import com.cooleshow.teacher.contract.PersonalSettingContract;
+
+/**
+ * 创建日期:2022/5/16 16:10
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class PersonalSettingPresenter extends BasePresenter<PersonalSettingContract.PersonalSettingView> implements PersonalSettingContract.Presenter {
+
+    @Override
+    public void getTeacherSelfStyle() {
+        addSubscribe(create(APIService.class).getTeacherSelfStyle(), new BaseObserver<TeacherSelfStyleInfoBean>(getView()) {
+            @Override
+            protected void onSuccess(TeacherSelfStyleInfoBean data) {
+                if (getView() != null) {
+                    getView().getSelfStyleSuccess(data);
+                }
+            }
+        });
+    }
+}

+ 14 - 0
teacher/src/main/java/com/cooleshow/teacher/presenter/mine/SettingPresenter.java

@@ -0,0 +1,14 @@
+package com.cooleshow.teacher.presenter.mine;
+
+import com.cooleshow.base.presenter.BasePresenter;
+import com.cooleshow.teacher.contract.SettingContract;
+
+/**
+ * 创建日期:2022/5/16 16:58
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class SettingPresenter extends BasePresenter<SettingContract.SettingView> implements SettingContract.Presenter {
+
+}

+ 86 - 0
teacher/src/main/java/com/cooleshow/teacher/presenter/minestyle/MineStylePagePresenter.java

@@ -0,0 +1,86 @@
+package com.cooleshow.teacher.presenter.minestyle;
+
+import android.app.Activity;
+import android.util.Log;
+
+import com.cooleshow.base.data.net.BaseResponse;
+import com.cooleshow.base.presenter.BasePresenter;
+import com.cooleshow.base.rx.BaseObserver;
+import com.cooleshow.base.utils.RequestBodyUtil;
+import com.cooleshow.base.utils.helper.upload.UploadHelper;
+import com.cooleshow.teacher.api.APIService;
+import com.cooleshow.teacher.bean.HomePageSheetMusicListBean;
+import com.cooleshow.teacher.bean.TeacherSelfStyleInfoBean;
+import com.cooleshow.teacher.contract.MineStylePageContract;
+import com.cooleshow.teacher.ui.minestyle.MineStylePageActivity;
+import com.daya.live_teaching.LiveTeachingApp;
+import com.daya.live_teaching.model.FileUploadBean;
+import com.daya.live_teaching.repository.ClassRepository;
+
+import java.io.File;
+
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Response;
+
+/**
+ * 创建日期:2022/5/13 14:17
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class MineStylePagePresenter extends BasePresenter<MineStylePageContract.MineStylePageView> implements MineStylePageContract.Presenter {
+
+
+    @Override
+    public void getTeacherSelfStyle() {
+        addSubscribe(create(APIService.class).getTeacherSelfStyle(), new BaseObserver<TeacherSelfStyleInfoBean>(getView()) {
+            @Override
+            protected void onSuccess(TeacherSelfStyleInfoBean data) {
+                if (getView() != null) {
+                    getView().getSelfStyleSuccess(data);
+                }
+            }
+        });
+    }
+    public void saveTeacherStyle(String jsonStr){
+        addSubscribe(create(APIService.class).saveTeacherStyle(RequestBodyUtil.convertToRequestBodyJson(jsonStr)), new BaseObserver<TeacherSelfStyleInfoBean>(getView()) {
+            @Override
+            protected void onSuccess(TeacherSelfStyleInfoBean data) {
+                if (getView() != null) {
+                    getView().saveTeacherStyleSuccess(data);
+                }
+            }
+
+            @Override
+            public void onError(Throwable e) {
+                super.onError(e);
+
+            }
+        });
+    }
+
+    public void upLoadVideo(Activity activity,String filePath){
+
+        UploadHelper uploadHelper = new UploadHelper(activity);
+        uploadHelper.uploadFile(new File(filePath));
+        uploadHelper.setUpLoadCallBack(new UploadHelper.UpLoadCallBack() {
+            @Override
+            public void onSuccess(String url) {
+                if (getView() != null) {
+                    TeacherSelfStyleInfoBean.StyleVideoBean styleVideoBean=new TeacherSelfStyleInfoBean.StyleVideoBean();
+                    styleVideoBean.videoUrl=url;
+                    styleVideoBean.type=0;
+                    getView().upLoadVideoSuccess(styleVideoBean);
+                }
+            }
+
+            @Override
+            public void onFailure() {
+                if (getView() != null) {
+                    getView().upLoadVideoFailure();
+                }
+            }
+        });
+    }
+}

+ 32 - 0
teacher/src/main/java/com/cooleshow/teacher/presenter/minestyle/TeachableInstrumentPresenter.java

@@ -0,0 +1,32 @@
+package com.cooleshow.teacher.presenter.minestyle;
+
+import com.cooleshow.base.presenter.BasePresenter;
+import com.cooleshow.base.rx.BaseObserver;
+import com.cooleshow.teacher.api.APIService;
+import com.cooleshow.teacher.bean.TeachableInstrumentBean;
+import com.cooleshow.teacher.bean.TeacherSelfStyleInfoBean;
+import com.cooleshow.teacher.contract.TeachableInstrumentContract;
+
+import java.util.List;
+
+/**
+ * 创建日期:2022/5/13 16:32
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class TeachableInstrumentPresenter extends BasePresenter<TeachableInstrumentContract.TeachableInstrumentView> implements TeachableInstrumentContract.Presenter {
+
+    @Override
+    public void subjectSelect() {
+        addSubscribe(create(APIService.class).subjectSelect(), new BaseObserver<List<TeachableInstrumentBean>>(getView()) {
+            @Override
+            protected void onSuccess(List<TeachableInstrumentBean> data) {
+                if (getView() != null) {
+                    getView().subjectSelectSuccess(data);
+                }
+            }
+
+        });
+    }
+}

+ 16 - 0
teacher/src/main/java/com/cooleshow/teacher/ui/main/MineFragment.java

@@ -29,6 +29,10 @@ public class MineFragment extends BaseMVPFragment<FragmentMineLayoutBinding, Min
         mViewBinding.ivUnCertificationTip.setOnClickListener(this);
         mViewBinding.ivMinePage.setOnClickListener(this);
         mViewBinding.tvMinePage.setOnClickListener(this);
+        mViewBinding.tvMineStyle.setOnClickListener(this);
+        mViewBinding.ivMineStyle.setOnClickListener(this);
+        mViewBinding.ivAvatar.setOnClickListener(this);
+        mViewBinding.ivSetting.setOnClickListener(this);
     }
 
     @Override
@@ -108,6 +112,18 @@ public class MineFragment extends BaseMVPFragment<FragmentMineLayoutBinding, Min
             //个人主页
             ARouter.getInstance().build(RouterPath.MineCenter.HOME_PAGE)
                     .navigation();
+        }else if (id==R.id.tv_mine_style||id==R.id.iv_mine_style){
+            //个人风采
+            ARouter.getInstance().build(RouterPath.MineCenter.MINE_STYLE_PAGE)
+                    .navigation();
+        }else if (id==R.id.iv_avatar){
+            //个人设置
+            ARouter.getInstance().build(RouterPath.MineCenter.MINE_PERSONAL_SETTING)
+                    .navigation();
+        }else if (id==R.id.iv_setting){
+            //设置
+            ARouter.getInstance().build(RouterPath.MineCenter.MINE_SETTING)
+                    .navigation();
         }
     }
 }

+ 83 - 0
teacher/src/main/java/com/cooleshow/teacher/ui/mine/ModifyNickNameActivity.java

@@ -0,0 +1,83 @@
+package com.cooleshow.teacher.ui.mine;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.TextView;
+
+import com.alibaba.android.arouter.facade.annotation.Autowired;
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.alibaba.android.arouter.launcher.ARouter;
+import com.cooleshow.base.router.RouterPath;
+import com.cooleshow.base.ui.activity.BaseMVPActivity;
+import com.cooleshow.teacher.R;
+import com.cooleshow.teacher.bean.TeachableInstrumentBean;
+import com.cooleshow.teacher.bean.TeacherSelfStyleInfoBean;
+import com.cooleshow.teacher.contract.ModifyNickNameContract;
+import com.cooleshow.teacher.databinding.ActivityModifyNicknameBinding;
+import com.cooleshow.teacher.presenter.mine.ModifyNickNamePresenter;
+import com.google.gson.Gson;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 创建日期:2022/5/16 17:22
+ *
+ * @author Ryan
+ * 类说明:
+ */
+@Route(path = RouterPath.MineCenter.MINE_MODIFY_NICKNAME)
+public class ModifyNickNameActivity extends BaseMVPActivity<ActivityModifyNicknameBinding, ModifyNickNamePresenter> implements ModifyNickNameContract.ModifyNickNameView, View.OnClickListener {
+    @Autowired(name = "bundle")
+    Bundle myBundle;
+    private TeacherSelfStyleInfoBean teacherInfoBean;
+
+    @Override
+    public void onClick(View view) {
+        switch (view.getId()) {
+            case R.id.tv_right_text:
+                Gson gson = new Gson();
+                teacherInfoBean.username= viewBinding.etNickname.getText().toString().trim();
+                presenter.saveTeacherStyle(gson.toJson(teacherInfoBean));
+                break;
+            case R.id.im_close:
+                viewBinding.etNickname.setText("");
+                break;
+
+        }
+    }
+
+    @Override
+    protected void initView() {
+        ARouter.getInstance().inject(this);
+        initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "修改昵称");
+        viewBinding.toolbarInclude.tvRightText.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_2dc7aa));
+        viewBinding.toolbarInclude.tvRightText.setVisibility(View.VISIBLE);
+        viewBinding.toolbarInclude.tvRightText.setText("保存");
+        viewBinding.toolbarInclude.tvRightText.setOnClickListener(this);
+        if (null != myBundle) {
+            teacherInfoBean = (TeacherSelfStyleInfoBean) myBundle.getSerializable("teacherInfoBean");
+            viewBinding.etNickname.setText(teacherInfoBean.username);
+        }
+        viewBinding.imClose.setOnClickListener(this);
+    }
+
+    @Override
+    protected ActivityModifyNicknameBinding getLayoutView() {
+        return ActivityModifyNicknameBinding.inflate(getLayoutInflater());
+    }
+
+    @Override
+    protected ModifyNickNamePresenter createPresenter() {
+        return new ModifyNickNamePresenter();
+    }
+
+    @Override
+    public void saveTeacherStyleSuccess(TeacherSelfStyleInfoBean styleInfoBean) {
+        Intent intent=new Intent();
+        intent.putExtra("userName",styleInfoBean.username);
+        setResult(RESULT_OK);
+        finish();
+    }
+}

+ 124 - 0
teacher/src/main/java/com/cooleshow/teacher/ui/mine/PersonalSettingActivity.java

@@ -0,0 +1,124 @@
+package com.cooleshow.teacher.ui.mine;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+
+import androidx.annotation.Nullable;
+import androidx.constraintlayout.widget.ConstraintLayout;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.alibaba.android.arouter.launcher.ARouter;
+import com.cooleshow.base.common.WebConstants;
+import com.cooleshow.base.router.RouterPath;
+import com.cooleshow.base.ui.activity.BaseMVPActivity;
+import com.cooleshow.base.utils.GlideUtils;
+import com.cooleshow.teacher.R;
+import com.cooleshow.teacher.bean.TeacherSelfStyleInfoBean;
+import com.cooleshow.teacher.contract.PersonalSettingContract;
+import com.cooleshow.teacher.databinding.ActivityPersonalSettingBinding;
+import com.cooleshow.teacher.presenter.mine.PersonalSettingPresenter;
+
+import java.io.Serializable;
+
+/**
+ * 创建日期:2022/5/16 16:07
+ *
+ * @author Ryan
+ * 类说明:
+ */
+@Route(path = RouterPath.MineCenter.MINE_PERSONAL_SETTING)
+public class PersonalSettingActivity extends BaseMVPActivity<ActivityPersonalSettingBinding, PersonalSettingPresenter> implements PersonalSettingContract.PersonalSettingView, View.OnClickListener {
+    private TeacherSelfStyleInfoBean teacherInfoBean;
+    private final int MODIFY_NICKNAME = 1001;
+    @Override
+    public void onClick(View view) {
+        switch (view.getId()) {
+            case R.id.cl_header:
+                break;
+            case R.id.cl_name:
+                if (null != teacherInfoBean) {
+                    Bundle bundle = new Bundle();
+                    bundle.putSerializable("teacherInfoBean",teacherInfoBean);
+                    ARouter.getInstance().build(RouterPath.MineCenter.MINE_MODIFY_NICKNAME)
+                            .withBundle("bundle", bundle)
+                            .navigation(this,MODIFY_NICKNAME);
+                }
+
+                break;
+            case R.id.cl_sex:
+                break;
+            case R.id.cl_phone:
+                break;
+            case R.id.cl_modify_psd:
+                break;
+            case R.id.cl_certification:
+                //老师认证
+                ARouter.getInstance().build(RouterPath.WebCenter.ACTIVITY_HTML)
+                        .withString(WebConstants.WEB_URL, WebConstants.TEACHER_CERT)
+                        .navigation();
+                break;
+        }
+    }
+
+    @Override
+    protected void initView() {
+        initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "设置");
+        viewBinding.clHeader.setOnClickListener(this);
+        viewBinding.clName.setOnClickListener(this);
+        viewBinding.clSex.setOnClickListener(this);
+        viewBinding.clPhone.setOnClickListener(this);
+        viewBinding.clModifyPsd.setOnClickListener(this);
+        viewBinding.clCertification.setOnClickListener(this);
+    }
+
+    @Override
+    public void initData() {
+        super.initData();
+        presenter.getTeacherSelfStyle();
+    }
+
+    @Override
+    protected ActivityPersonalSettingBinding getLayoutView() {
+        return ActivityPersonalSettingBinding.inflate(getLayoutInflater());
+    }
+
+    @Override
+    protected PersonalSettingPresenter createPresenter() {
+        return new PersonalSettingPresenter();
+    }
+
+    @Override
+    public void getSelfStyleSuccess(TeacherSelfStyleInfoBean styleInfoBean) {
+        teacherInfoBean = styleInfoBean;
+        GlideUtils.INSTANCE.loadImage(this, styleInfoBean.avatar, viewBinding.imHeader, R.drawable.icon_teacher_default_head);
+        viewBinding.tvNickname.setText(styleInfoBean.username);
+        if (styleInfoBean.gender.equals("0")) {
+            //女
+            viewBinding.tvSex.setText("女");
+        } else {
+            //男
+            viewBinding.tvSex.setText("男");
+        }
+        viewBinding.tvPhone.setText(styleInfoBean.phone);
+        if (styleInfoBean.isReal.equals("0")) {
+            //否
+            viewBinding.tvCertificationStatus.setText("未认证");
+        } else {
+            //是
+            viewBinding.tvCertificationStatus.setText("已认证");
+        }
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+        if (resultCode == RESULT_OK) {
+            if (requestCode == MODIFY_NICKNAME) {
+                String userName = data.getStringExtra("userName");
+                teacherInfoBean.username=userName;
+                viewBinding.tvNickname.setText(userName);
+            }
+        }
+    }
+}

+ 54 - 0
teacher/src/main/java/com/cooleshow/teacher/ui/mine/SettingActivity.java

@@ -0,0 +1,54 @@
+package com.cooleshow.teacher.ui.mine;
+
+import android.view.View;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.cooleshow.base.router.RouterPath;
+import com.cooleshow.base.ui.activity.BaseMVPActivity;
+import com.cooleshow.teacher.R;
+import com.cooleshow.teacher.contract.SettingContract;
+import com.cooleshow.teacher.databinding.ActivitySettingBinding;
+import com.cooleshow.teacher.presenter.mine.SettingPresenter;
+
+/**
+ * 创建日期:2022/5/16 16:55
+ *
+ * @author Ryan
+ * 类说明:
+ */
+@Route(path = RouterPath.MineCenter.MINE_SETTING)
+public class SettingActivity extends BaseMVPActivity<ActivitySettingBinding, SettingPresenter> implements SettingContract.SettingView, View.OnClickListener {
+
+    @Override
+    public void onClick(View view) {
+        switch (view.getId()){
+            case R.id.cl_address:
+                break;
+            case R.id.cl_detection:
+                break;
+            case R.id.cl_private:
+                break;
+            case R.id.cl_about:
+                break;
+        }
+    }
+
+    @Override
+    protected void initView() {
+        initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "设置");
+        viewBinding.clAddress.setOnClickListener(this);
+        viewBinding.clDetection.setOnClickListener(this);
+        viewBinding.clPrivate.setOnClickListener(this);
+        viewBinding.clPrivate.setOnClickListener(this);
+    }
+
+    @Override
+    protected ActivitySettingBinding getLayoutView() {
+        return ActivitySettingBinding.inflate(getLayoutInflater());
+    }
+
+    @Override
+    protected SettingPresenter createPresenter() {
+        return new SettingPresenter();
+    }
+}

+ 357 - 0
teacher/src/main/java/com/cooleshow/teacher/ui/minestyle/MineStylePageActivity.java

@@ -0,0 +1,357 @@
+package com.cooleshow.teacher.ui.minestyle;
+
+import android.Manifest;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Environment;
+import android.provider.MediaStore;
+import android.provider.OpenableColumns;
+import android.text.Editable;
+import android.text.TextUtils;
+import android.text.TextWatcher;
+import android.util.Log;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowManager;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+import android.widget.ScrollView;
+
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.alibaba.android.arouter.launcher.ARouter;
+import com.cooleshow.base.data.net.BaseResponse;
+import com.cooleshow.base.router.RouterPath;
+import com.cooleshow.base.ui.activity.BaseMVPActivity;
+import com.cooleshow.base.utils.ActivityUtils;
+import com.cooleshow.base.utils.FileUtils;
+import com.cooleshow.base.utils.ToastUtil;
+import com.cooleshow.base.utils.helper.upload.UploadHelper;
+import com.cooleshow.teacher.R;
+import com.cooleshow.teacher.adapter.MineStyleVideoAdapter;
+import com.cooleshow.teacher.adapter.TeachableSelectAdapter;
+import com.cooleshow.teacher.bean.TeachableInstrumentBean;
+import com.cooleshow.teacher.bean.TeacherSelfStyleInfoBean;
+import com.cooleshow.teacher.contract.MineStylePageContract;
+import com.cooleshow.teacher.databinding.ActivityMineStylePageBinding;
+import com.cooleshow.teacher.presenter.minestyle.MineStylePagePresenter;
+import com.cooleshow.teacher.ui.web.WebActivity;
+import com.daya.live_teaching.model.FileUploadBean;
+import com.daya.live_teaching.repository.ClassRepository;
+import com.google.android.flexbox.AlignItems;
+import com.google.android.flexbox.FlexDirection;
+import com.google.android.flexbox.FlexWrap;
+import com.google.android.flexbox.FlexboxLayoutManager;
+import com.google.android.flexbox.JustifyContent;
+import com.google.gson.Gson;
+import com.tbruyelle.rxpermissions3.RxPermissions;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Response;
+
+/**
+ * 创建日期:2022/5/13 14:02
+ *
+ * @author Ryan
+ * 类说明:
+ */
+@Route(path = RouterPath.MineCenter.MINE_STYLE_PAGE)
+public class MineStylePageActivity extends BaseMVPActivity<ActivityMineStylePageBinding, MineStylePagePresenter> implements MineStylePageContract.MineStylePageView, View.OnClickListener {
+    private final int SELECT_RESULT = 1001;
+    private final int CHOOSE_VIDEO = 1002;
+    private EditText etSelfIntroduction;
+    private RecyclerView videoList;
+    private MineStyleVideoAdapter mMineStyleVideoListAdapter;
+    private RecyclerView rvTopSelect;
+    private TeachableSelectAdapter teachableSelectAdapter;
+    private TeacherSelfStyleInfoBean myStyleInfoBean = null;
+    private List<TeachableInstrumentBean> selectTeachableInstrument = new ArrayList<>();
+
+    @Override
+    public void onClick(View view) {
+        switch (view.getId()) {
+            case R.id.tv_select_fans:
+                Bundle bundle=new Bundle();
+                bundle.putSerializable("selectTeachableInstrument", (Serializable) selectTeachableInstrument);
+                ARouter.getInstance().build(RouterPath.MineCenter.MINE_TEACHABLE_INSTRUMENT)
+                        .withBundle("bundle",bundle)
+                        .navigation(this, SELECT_RESULT);
+                break;
+            case R.id.tv_save:
+                Gson gson = new Gson();
+                myStyleInfoBean.styleVideo.clear();
+                for (TeacherSelfStyleInfoBean.StyleVideoBean styleVideoBean : videoBeanList) {
+                    if (styleVideoBean.type!=1){
+                        myStyleInfoBean.styleVideo.add(styleVideoBean);
+                    }
+                }
+                myStyleInfoBean.introduction=etSelfIntroduction.getText().toString().trim();
+                String subjectIdStr="";
+                String subjectNameStr="";
+                for (TeachableInstrumentBean teachableInstrumentBean : selectTeachableInstrument) {
+                    subjectIdStr+=","+teachableInstrumentBean.id;
+                    subjectNameStr+=","+teachableInstrumentBean.name;
+                }
+                if (subjectIdStr.startsWith(",")){
+                    subjectIdStr=   subjectIdStr.replaceFirst(",","");
+                }
+                if (subjectNameStr.startsWith(",")){
+                    subjectNameStr=   subjectNameStr.replaceFirst(",","");
+                }
+                myStyleInfoBean.subjectId=subjectIdStr;
+                myStyleInfoBean.subjectName=subjectNameStr;
+                presenter.saveTeacherStyle(gson.toJson(myStyleInfoBean));
+                break;
+        }
+    }
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        getWindow().setSoftInputMode
+                (WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN |
+                        WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
+        super.onCreate(savedInstanceState);
+
+    }
+
+    @Override
+    public void initData() {
+        super.initData();
+        presenter.getTeacherSelfStyle();
+    }
+
+    private List<TeacherSelfStyleInfoBean.StyleVideoBean> videoBeanList = new ArrayList<>();
+
+    @Override
+    protected void initView() {
+        initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "个人风采");
+        etSelfIntroduction = viewBinding.etSelfIntroduction;
+        videoList = viewBinding.rvTeacherStyleVideo;
+        viewBinding.tvSelectFans.setOnClickListener(this);
+        viewBinding.tvSave.setOnClickListener(this);
+        GridLayoutManager manager = new GridLayoutManager(this, 2);
+        videoList.setLayoutManager(manager);
+        addEmptyVideoBean();
+        mMineStyleVideoListAdapter = new MineStyleVideoAdapter(videoBeanList);
+        videoList.setAdapter(mMineStyleVideoListAdapter);
+        mMineStyleVideoListAdapter.setItemAddClickAction(new MineStyleVideoAdapter.ItemAddClickAction() {
+            @Override
+            public void add() {
+                getVideoPermission();
+            }
+
+            @Override
+            public void delete(String url) {
+                for (TeacherSelfStyleInfoBean.StyleVideoBean styleVideoBean : videoBeanList) {
+                    if (styleVideoBean.type == 0 && styleVideoBean.videoUrl.equals(url)) {
+                        videoBeanList.remove(styleVideoBean);
+                        break;
+                    }
+                }
+                mMineStyleVideoListAdapter.notifyDataSetChanged();
+            }
+        });
+        rvTopSelect = viewBinding.rvTopSelect;
+        //设置LayoutManager
+        FlexboxLayoutManager flexboxLayoutManager = new FlexboxLayoutManager(this);
+        //主轴为水平方向,起点在左端
+        flexboxLayoutManager.setFlexDirection(FlexDirection.ROW);
+        //按正常方向换行
+        flexboxLayoutManager.setFlexWrap(FlexWrap.WRAP);
+        //定义项目在副轴轴上如何对齐
+        flexboxLayoutManager.setAlignItems(AlignItems.CENTER);
+        //多个轴对齐方式
+        flexboxLayoutManager.setJustifyContent(JustifyContent.FLEX_START);
+        rvTopSelect.setLayoutManager(flexboxLayoutManager);
+        teachableSelectAdapter = new TeachableSelectAdapter(selectTeachableInstrument);
+        rvTopSelect.setAdapter(teachableSelectAdapter);
+        addETListener();
+    }
+
+    private void addETListener() {
+        etSelfIntroduction.addTextChangedListener(new TextWatcher() {
+            @Override
+            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+
+            }
+
+            @Override
+            public void onTextChanged(CharSequence s, int start, int before, int count) {
+
+            }
+
+            @Override
+            public void afterTextChanged(Editable s) {
+                String trim = etSelfIntroduction.getText().toString();
+                viewBinding.tvNumHint.setText(trim.length() + "/150");
+            }
+        });
+    }
+
+    @Override
+    protected ActivityMineStylePageBinding getLayoutView() {
+        return ActivityMineStylePageBinding.inflate(getLayoutInflater());
+    }
+
+    @Override
+    protected MineStylePagePresenter createPresenter() {
+        return new MineStylePagePresenter();
+    }
+
+    @Override
+    public void getSelfStyleSuccess(TeacherSelfStyleInfoBean styleInfoBean) {
+        myStyleInfoBean = styleInfoBean;
+        //个人介绍
+        viewBinding.etSelfIntroduction.setText(styleInfoBean.introduction);
+        //视频信息
+        if (mMineStyleVideoListAdapter != null) {
+            videoBeanList.clear();
+            videoBeanList.addAll(styleInfoBean.styleVideo);
+            addEmptyVideoBean();
+            mMineStyleVideoListAdapter.notifyDataSetChanged();
+        }
+        if (!TextUtils.isEmpty(styleInfoBean.subjectId)){
+            if (styleInfoBean.subjectId.contains(",")){
+                String[] splitId = styleInfoBean.subjectId.split(",");
+                String[] splitName = styleInfoBean.subjectName.split(",");
+                for (int i = 0; i < splitId.length; i++) {
+                    TeachableInstrumentBean instrumentBean=new TeachableInstrumentBean();
+                    instrumentBean.id=Integer.parseInt(splitId[i]);
+                    instrumentBean.name=splitName[i];
+                    selectTeachableInstrument.add(instrumentBean);
+                }
+            }else{
+                TeachableInstrumentBean instrumentBean=new TeachableInstrumentBean();
+                instrumentBean.id=Integer.parseInt(styleInfoBean.subjectId);
+                instrumentBean.name=styleInfoBean.subjectName;
+                selectTeachableInstrument.add(instrumentBean);
+            }
+            teachableSelectAdapter.notifyDataSetChanged();
+
+        }
+    }
+
+
+    @Override
+    public void saveTeacherStyleSuccess(TeacherSelfStyleInfoBean styleInfoBean) {
+        finish();
+    }
+
+    @Override
+    public void upLoadVideoSuccess(TeacherSelfStyleInfoBean.StyleVideoBean styleVideoBean) {
+        hideLoading();
+        videoBeanList.add(0, styleVideoBean);
+        mMineStyleVideoListAdapter.notifyDataSetChanged();
+
+    }
+
+    @Override
+    public void upLoadVideoFailure() {
+        hideLoading();
+    }
+
+    private void addEmptyVideoBean() {
+        TeacherSelfStyleInfoBean.StyleVideoBean styleVideoBean = new TeacherSelfStyleInfoBean.StyleVideoBean();
+        styleVideoBean.type = 1;
+        videoBeanList.add(styleVideoBean);
+
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+        if (resultCode == RESULT_OK) {
+            if (requestCode == SELECT_RESULT) {
+                List<TeachableInstrumentBean> dataSerializableExtra = (List<TeachableInstrumentBean>) data.getSerializableExtra("selectTeachableInstrument");
+                selectTeachableInstrument.clear();
+                selectTeachableInstrument.addAll(dataSerializableExtra);
+                teachableSelectAdapter.notifyDataSetChanged();
+            } else if (requestCode == CHOOSE_VIDEO) {
+                showLoading();
+                Uri uri = data.getData();
+                String v_path = FileUtils.getFilePathForN(uri, MineStylePageActivity.this);
+                presenter.upLoadVideo(MineStylePageActivity.this, v_path);
+            }
+        }
+    }
+
+
+    private void getVideoPermission() {
+        new RxPermissions(this)
+                .request(Manifest.permission.CAMERA,
+                        Manifest.permission.READ_EXTERNAL_STORAGE,
+                        Manifest.permission.WRITE_EXTERNAL_STORAGE)
+                .subscribe(granted -> {
+                    if (granted) {
+                        // All requested permissions are granted
+                        chooseVideo();
+                    } else {
+                        // At least one permission is denied
+                        ToastUtil.getInstance().show(this, "请选择存储和相机权限!");
+                    }
+                });
+    }
+
+    private void chooseVideo() {
+        Intent intent = new Intent();
+        intent.setType("video/*"); //选择视频 (mp4 3gp 是android支持的视频格式)
+        intent.setAction(Intent.ACTION_GET_CONTENT);
+        /* 取得相片后返回本画面 */
+        ActivityUtils.startActivityForResult(this, intent, CHOOSE_VIDEO);
+
+    }
+
+    @Override
+    public boolean dispatchTouchEvent(MotionEvent ev) {
+        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
+
+            View v = getCurrentFocus();
+            if (isShouldHideInput(v, ev)) {
+
+                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+                if (imm != null) {
+                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
+                }
+            }
+            return super.dispatchTouchEvent(ev);
+        }
+        // 必不可少,否则所有的组件都不会有TouchEvent了
+        if (getWindow().superDispatchTouchEvent(ev)) {
+            return true;
+        }
+        return onTouchEvent(ev);
+    }
+
+    public boolean isShouldHideInput(View v, MotionEvent event) {
+        if (v != null && (v instanceof EditText)) {
+            int[] leftTop = {0, 0};
+            //获取输入框当前的location位置
+            v.getLocationInWindow(leftTop);
+            int left = leftTop[0];
+            int top = leftTop[1];
+            int bottom = top + v.getHeight();
+            int right = left + v.getWidth();
+            return !(event.getX() > left && event.getX() < right
+                    && event.getY() > top && event.getY() < bottom);
+        }
+        return false;
+    }
+}

+ 134 - 0
teacher/src/main/java/com/cooleshow/teacher/ui/minestyle/TeachableInstrumentActivity.java

@@ -0,0 +1,134 @@
+package com.cooleshow.teacher.ui.minestyle;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.alibaba.android.arouter.facade.annotation.Autowired;
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.alibaba.android.arouter.launcher.ARouter;
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.listener.OnItemClickListener;
+import com.cooleshow.base.router.RouterPath;
+import com.cooleshow.base.ui.activity.BaseMVPActivity;
+import com.cooleshow.teacher.R;
+import com.cooleshow.teacher.adapter.TeachableInstrumentAdapter;
+import com.cooleshow.teacher.bean.TeachableInstrumentBean;
+import com.cooleshow.teacher.contract.TeachableInstrumentContract;
+import com.cooleshow.teacher.databinding.ActivityTeachableInstrumentBinding;
+import com.cooleshow.teacher.presenter.minestyle.TeachableInstrumentPresenter;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 创建日期:2022/5/13 15:25
+ *
+ * @author Ryan
+ * 类说明:
+ */
+@Route(path = RouterPath.MineCenter.MINE_TEACHABLE_INSTRUMENT)
+public class TeachableInstrumentActivity extends BaseMVPActivity<ActivityTeachableInstrumentBinding, TeachableInstrumentPresenter> implements TeachableInstrumentContract.TeachableInstrumentView, View.OnClickListener {
+    private RecyclerView instrumentList;
+    private TeachableInstrumentAdapter teachableInstrumentAdapter;
+    @Autowired(name = "bundle")
+    Bundle myBundle;
+
+    @Override
+    public void onClick(View view) {
+        switch (view.getId()) {
+            case R.id.tv_confirm:
+                List<TeachableInstrumentBean> selectTeachableInstrument = new ArrayList<>();
+
+                for (TeachableInstrumentBean teachableInstrumentBean : dataList) {
+                    if (null != teachableInstrumentBean.subjects && teachableInstrumentBean.subjects.size() > 0) {
+                        for (TeachableInstrumentBean subject : teachableInstrumentBean.subjects) {
+                            if (subject.isSelect) {
+                                selectTeachableInstrument.add(subject);
+                            }
+                        }
+                    }
+                }
+                Intent intent = new Intent();
+                intent.putExtra("selectTeachableInstrument", (Serializable) selectTeachableInstrument);
+                setResult(RESULT_OK, intent);
+                finish();
+                break;
+        }
+    }
+
+
+    private List<TeachableInstrumentBean> dataList = new ArrayList<>();
+
+    @Override
+    protected void initView() {
+        ARouter.getInstance().inject(this);
+        initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "可教授乐器");
+        instrumentList = viewBinding.rvInstrument;
+        viewBinding.tvConfirm.setOnClickListener(this);
+        LinearLayoutManager manager = new LinearLayoutManager(this);
+        instrumentList.setLayoutManager(manager);
+        teachableInstrumentAdapter = new TeachableInstrumentAdapter(dataList);
+        instrumentList.setAdapter(teachableInstrumentAdapter);
+        initCarryData();
+    }
+
+    private List<TeachableInstrumentBean> carryList = new ArrayList<>();
+
+    private void initCarryData() {
+        if (null != myBundle) {
+            carryList = (List<TeachableInstrumentBean>) myBundle.getSerializable("selectTeachableInstrument");
+            if (null==carryList){
+                carryList=new ArrayList<>();
+            }
+        }
+
+    }
+
+    @Override
+    protected ActivityTeachableInstrumentBinding getLayoutView() {
+        return ActivityTeachableInstrumentBinding.inflate(getLayoutInflater());
+    }
+
+    @Override
+    protected TeachableInstrumentPresenter createPresenter() {
+        return new TeachableInstrumentPresenter();
+    }
+
+    @Override
+    public void initData() {
+        super.initData();
+        presenter.subjectSelect();
+    }
+
+    @Override
+    public void subjectSelectSuccess(List<TeachableInstrumentBean> data) {
+        if (null != data && data.size() > 0) {
+            dataList.clear();
+            if (carryList.size()>0){
+                for (TeachableInstrumentBean datum : data) {
+                    if (null!=datum.subjects&&datum.subjects.size()>0){
+                        for (TeachableInstrumentBean subject : datum.subjects) {
+                            for (TeachableInstrumentBean teachableInstrumentBean : carryList) {
+                                if (teachableInstrumentBean.id==subject.id){
+                                    subject.isSelect=true;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+
+            dataList.addAll(data);
+            if (null != teachableInstrumentAdapter) {
+                teachableInstrumentAdapter.notifyDataSetChanged();
+            }
+        }
+    }
+}

BIN
teacher/src/main/res/drawable-xhdpi/icon_check_normal.png


BIN
teacher/src/main/res/drawable-xhdpi/icon_check_select.png


BIN
teacher/src/main/res/drawable-xhdpi/icon_et_close.png


BIN
teacher/src/main/res/drawable-xhdpi/icon_fan_pages.png


BIN
teacher/src/main/res/drawable-xhdpi/icon_go_right.png


BIN
teacher/src/main/res/drawable-xhdpi/icon_personal_introduction.png


BIN
teacher/src/main/res/drawable-xhdpi/icon_switch_off.png


BIN
teacher/src/main/res/drawable-xhdpi/icon_switch_open.png


BIN
teacher/src/main/res/drawable-xhdpi/icon_upload_tum.png


BIN
teacher/src/main/res/drawable-xhdpi/icon_video_close.png


BIN
teacher/src/main/res/drawable-xxhdpi/icon_check_normal.png


BIN
teacher/src/main/res/drawable-xxhdpi/icon_check_select.png


BIN
teacher/src/main/res/drawable-xxhdpi/icon_et_close.png


BIN
teacher/src/main/res/drawable-xxhdpi/icon_fan_pages.png


BIN
teacher/src/main/res/drawable-xxhdpi/icon_go_right.png


BIN
teacher/src/main/res/drawable-xxhdpi/icon_personal_introduction.png


BIN
teacher/src/main/res/drawable-xxhdpi/icon_switch_off.png


BIN
teacher/src/main/res/drawable-xxhdpi/icon_switch_open.png


BIN
teacher/src/main/res/drawable-xxhdpi/icon_upload_tum.png


BIN
teacher/src/main/res/drawable-xxhdpi/icon_video_close.png


+ 15 - 0
teacher/src/main/res/drawable/bg_dash_border_radius.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <solid android:color="@color/white" />
+
+    <corners
+        android:radius="10dp" />
+
+    <stroke
+        android:width="1dp"
+        android:color="#E3E3E3"
+        android:dashWidth="5dp"
+        android:dashGap="2dp" />
+
+</shape>

+ 9 - 0
teacher/src/main/res/drawable/bg_select_2dc7aa_radius.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <stroke
+        android:width="1dp"
+        android:color="@color/color_2dc7aa" />
+    <solid android:color="@color/color_e9fff8" />
+    <corners android:radius="13dp" />
+</shape>

+ 8 - 0
teacher/src/main/res/drawable/mark_2dc7aa_3radius.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="@color/color_2dc7aa" />
+    <size
+        android:width="@dimen/dp_3"
+        android:height="@dimen/dp_16" />
+    <corners android:radius="@dimen/dp_3" />
+</shape>

+ 226 - 0
teacher/src/main/res/layout/activity_mine_style_page.xml

@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout 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:background="@color/color_f6f8f9"
+    android:orientation="vertical">
+
+    <include
+        android:id="@+id/toolbarInclude"
+        layout="@layout/common_toolbar_layout" />
+
+    <ScrollView
+        android:id="@+id/sl_content"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:overScrollMode="never"
+        android:scrollbars="none">
+
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:id="@+id/cl_top_select"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="14dp"
+                android:layout_marginTop="15dp"
+                android:layout_marginEnd="14dp"
+                android:background="@drawable/bg_white_10dp"
+                android:orientation="vertical"
+                app:layout_constraintLeft_toLeftOf="parent"
+                app:layout_constraintTop_toTopOf="parent">
+
+                <ImageView
+                    android:id="@+id/im_fan_pages"
+                    android:layout_width="24dp"
+                    android:layout_height="24dp"
+                    android:layout_marginLeft="11dp"
+                    android:layout_marginTop="16dp"
+                    android:src="@drawable/icon_fan_pages"
+                    app:layout_constraintLeft_toLeftOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="4dp"
+                    android:text="*可教授乐器(可多选)"
+                    android:textColor="@color/black_333"
+                    android:textSize="@dimen/sp_16"
+                    android:textStyle="bold"
+                    app:layout_constraintBottom_toBottomOf="@+id/im_fan_pages"
+                    app:layout_constraintLeft_toRightOf="@+id/im_fan_pages"
+                    app:layout_constraintTop_toTopOf="@+id/im_fan_pages" />
+
+                <TextView
+                    android:id="@+id/tv_select_fans"
+                    android:layout_width="54dp"
+                    android:layout_height="24dp"
+                    android:layout_marginRight="11dp"
+                    android:background="@drawable/shape_course_status_ing"
+                    android:gravity="center"
+                    android:text="选择"
+                    android:textColor="@color/white"
+                    android:textSize="@dimen/sp_14"
+                    app:layout_constraintBottom_toBottomOf="@+id/im_fan_pages"
+                    app:layout_constraintRight_toRightOf="parent"
+                    app:layout_constraintTop_toTopOf="@+id/im_fan_pages" />
+
+                <androidx.recyclerview.widget.RecyclerView
+                    android:id="@+id/rv_top_select"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="8dp"
+                    android:layout_marginTop="4dp"
+                    android:layout_marginRight="8dp"
+                    android:layout_marginBottom="30dp"
+                    android:overScrollMode="never"
+                    android:scrollbars="none"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintTop_toBottomOf="@+id/im_fan_pages" />
+
+            </androidx.constraintlayout.widget.ConstraintLayout>
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:id="@+id/cl_personal_introduction"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="14dp"
+                android:layout_marginTop="15dp"
+                android:layout_marginEnd="14dp"
+                android:background="@drawable/bg_white_10dp"
+                android:orientation="vertical"
+                app:layout_constraintLeft_toLeftOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/cl_top_select">
+
+                <ImageView
+                    android:id="@+id/im_personal_introduction"
+                    android:layout_width="24dp"
+                    android:layout_height="24dp"
+                    android:layout_marginLeft="11dp"
+                    android:layout_marginTop="16dp"
+                    android:src="@drawable/icon_personal_introduction"
+                    app:layout_constraintLeft_toLeftOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="4dp"
+                    android:text="个人介绍"
+                    android:textColor="@color/black_333"
+                    android:textSize="@dimen/sp_16"
+                    android:textStyle="bold"
+                    app:layout_constraintBottom_toBottomOf="@+id/im_personal_introduction"
+                    app:layout_constraintLeft_toRightOf="@+id/im_personal_introduction"
+                    app:layout_constraintTop_toTopOf="@+id/im_personal_introduction" />
+
+                <TextView
+                    android:id="@+id/tv_num_hint"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginRight="11dp"
+                    android:gravity="center"
+                    android:text="0/200"
+                    android:textColor="@color/color_999999"
+                    android:textSize="@dimen/sp_12"
+                    app:layout_constraintBottom_toBottomOf="@+id/im_personal_introduction"
+                    app:layout_constraintRight_toRightOf="parent"
+                    app:layout_constraintTop_toTopOf="@+id/im_personal_introduction" />
+
+                <EditText
+                    android:id="@+id/et_self_introduction"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="14dp"
+                    android:layout_marginTop="16dp"
+                    android:layout_marginRight="14dp"
+                    android:layout_marginBottom="25dp"
+                    android:background="@null"
+                    android:gravity="left|top"
+                    android:hint="个人介绍"
+                    android:maxLength="200"
+                    android:lineSpacingExtra="4dp"
+                    android:minHeight="66dp"
+                    android:textColor="@color/color_666666"
+                    android:textColorHint="@color/color_999999"
+                    android:textSize="@dimen/sp_13"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintTop_toBottomOf="@+id/im_personal_introduction" />
+
+            </androidx.constraintlayout.widget.ConstraintLayout>
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:id="@+id/cl_eacher_style"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="14dp"
+                android:layout_marginTop="15dp"
+                android:layout_marginEnd="14dp"
+                android:background="@drawable/bg_white_10dp"
+                android:orientation="vertical"
+                app:layout_constraintLeft_toLeftOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/cl_personal_introduction">
+
+                <ImageView
+                    android:id="@+id/im_teacher_style"
+                    android:layout_width="24dp"
+                    android:layout_height="24dp"
+                    android:layout_marginLeft="11dp"
+                    android:layout_marginTop="16dp"
+                    android:src="@drawable/icon_teacher_style"
+                    app:layout_constraintLeft_toLeftOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="4dp"
+                    android:text="老师风采"
+                    android:textColor="@color/black_333"
+                    android:textSize="@dimen/sp_16"
+                    android:textStyle="bold"
+                    app:layout_constraintBottom_toBottomOf="@+id/im_teacher_style"
+                    app:layout_constraintLeft_toRightOf="@+id/im_teacher_style"
+                    app:layout_constraintTop_toTopOf="@+id/im_teacher_style" />
+
+                <androidx.recyclerview.widget.RecyclerView
+                    android:id="@+id/rv_teacher_style_video"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="5dp"
+                    android:layout_marginTop="7dp"
+                    android:layout_marginRight="5dp"
+                    android:layout_marginBottom="18dp"
+                    android:overScrollMode="never"
+                    android:scrollbars="none"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintTop_toBottomOf="@+id/im_teacher_style" />
+            </androidx.constraintlayout.widget.ConstraintLayout>
+
+            <TextView
+                android:id="@+id/tv_save"
+                android:layout_width="match_parent"
+                android:layout_height="44dp"
+                android:layout_marginLeft="27dp"
+                android:layout_marginTop="29dp"
+                android:layout_marginRight="27dp"
+                android:layout_marginBottom="48dp"
+                android:background="@drawable/shape_course_status_ing"
+                android:gravity="center"
+                android:text="保存"
+                android:textColor="@color/white"
+                android:textSize="@dimen/sp_14"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintLeft_toLeftOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/cl_eacher_style" />
+
+
+        </androidx.constraintlayout.widget.ConstraintLayout>
+    </ScrollView>
+</LinearLayout>
+

+ 42 - 0
teacher/src/main/res/layout/activity_modify_nickname.xml

@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout 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:background="@color/color_f6f8f9"
+    android:orientation="vertical">
+
+    <include
+        android:id="@+id/toolbarInclude"
+        layout="@layout/common_toolbar_layout" />
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dp_56"
+        android:layout_marginTop="15dp"
+        android:background="@drawable/bg_white_10dp">
+
+        <EditText
+            android:id="@+id/et_nickname"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:background="@null"
+            android:gravity="left|center_vertical"
+            android:hint="请输入昵称"
+            android:paddingLeft="14dp"
+            android:paddingRight="30dp"
+            android:textColor="@color/color_1a1a1a"
+            android:textColorHint="@color/color_999999"
+            android:textSize="@dimen/sp_16" />
+
+        <ImageView
+            android:id="@+id/im_close"
+            android:layout_width="@dimen/dp_41"
+            android:layout_height="@dimen/dp_41"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            android:padding="13dp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            android:src="@drawable/icon_et_close"/>
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</LinearLayout>

+ 301 - 0
teacher/src/main/res/layout/activity_personal_setting.xml

@@ -0,0 +1,301 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout 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:background="@color/color_f6f8f9"
+    android:orientation="vertical">
+
+    <include
+        android:id="@+id/toolbarInclude"
+        layout="@layout/common_toolbar_layout"/>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="14dp"
+        android:layout_marginTop="15dp"
+        android:background="@drawable/bg_white_10dp"
+        android:layout_marginEnd="14dp">
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:id="@+id/cl_header"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/dp_80"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toTopOf="parent">
+
+            <de.hdodenhof.circleimageview.CircleImageView
+                android:id="@+id/im_header"
+                android:layout_width="@dimen/dp_54"
+                android:layout_height="@dimen/dp_54"
+                android:layout_marginLeft="12dp"
+                android:layout_marginTop="8dp"
+                android:src="@drawable/icon_teacher_default_head"
+                app:layout_constraintLeft_toLeftOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginRight="28dp"
+                android:text="修改头像"
+                android:textColor="@color/color_999999"
+                android:textSize="@dimen/sp_16"
+                app:layout_constraintBottom_toBottomOf="@+id/im_header"
+                app:layout_constraintRight_toRightOf="parent"
+                app:layout_constraintTop_toTopOf="@+id/im_header" />
+
+            <ImageView
+                android:layout_width="@dimen/dp_6"
+                android:layout_height="@dimen/dp_11"
+                android:layout_marginRight="15dp"
+                android:background="@drawable/icon_go_right"
+                app:layout_constraintBottom_toBottomOf="@+id/im_header"
+                app:layout_constraintRight_toRightOf="parent"
+                app:layout_constraintTop_toTopOf="@+id/im_header" />
+
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:layout_marginLeft="11dp"
+                android:layout_marginRight="9dp"
+                android:background="@color/color_f2f2f2"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintLeft_toLeftOf="parent" />
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:id="@+id/cl_name"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/dp_55"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/cl_header">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="12dp"
+                android:text="昵称"
+                android:textColor="@color/color_1a1a1a"
+                android:textSize="@dimen/sp_16"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintLeft_toLeftOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+            <TextView
+                android:id="@+id/tv_nickname"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginRight="28dp"
+                android:text="--"
+                android:textColor="@color/color_999999"
+                android:textSize="@dimen/sp_16"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintRight_toRightOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+            <ImageView
+                android:layout_width="@dimen/dp_6"
+                android:layout_height="@dimen/dp_11"
+                android:layout_marginRight="15dp"
+                android:background="@drawable/icon_go_right"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintRight_toRightOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:layout_marginLeft="11dp"
+                android:layout_marginRight="9dp"
+                android:background="@color/color_f2f2f2"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintLeft_toLeftOf="parent" />
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:id="@+id/cl_sex"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/dp_55"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/cl_name">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="12dp"
+                android:text="性别"
+                android:textColor="@color/color_1a1a1a"
+                android:textSize="@dimen/sp_16"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintLeft_toLeftOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+            <TextView
+                android:id="@+id/tv_sex"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginRight="28dp"
+                android:text="--"
+                android:textColor="@color/color_999999"
+                android:textSize="@dimen/sp_16"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintRight_toRightOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+            <ImageView
+                android:layout_width="@dimen/dp_6"
+                android:layout_height="@dimen/dp_11"
+                android:layout_marginRight="15dp"
+                android:background="@drawable/icon_go_right"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintRight_toRightOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:layout_marginLeft="11dp"
+                android:layout_marginRight="9dp"
+                android:background="@color/color_f2f2f2"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintLeft_toLeftOf="parent" />
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:id="@+id/cl_phone"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/dp_55"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/cl_sex">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="12dp"
+                android:text="手机号"
+                android:textColor="@color/color_1a1a1a"
+                android:textSize="@dimen/sp_16"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintLeft_toLeftOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+            <TextView
+                android:id="@+id/tv_phone"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginRight="28dp"
+                android:text="--"
+                android:textColor="@color/color_999999"
+                android:textSize="@dimen/sp_16"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintRight_toRightOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+            <ImageView
+                android:layout_width="@dimen/dp_6"
+                android:layout_height="@dimen/dp_11"
+                android:layout_marginRight="15dp"
+                android:background="@drawable/icon_go_right"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintRight_toRightOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:layout_marginLeft="11dp"
+                android:layout_marginRight="9dp"
+                android:background="@color/color_f2f2f2"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintLeft_toLeftOf="parent" />
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:id="@+id/cl_modify_psd"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/dp_55"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/cl_phone">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="12dp"
+                android:text="修改密码"
+                android:textColor="@color/color_1a1a1a"
+                android:textSize="@dimen/sp_16"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintLeft_toLeftOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+
+            <ImageView
+                android:layout_width="@dimen/dp_6"
+                android:layout_height="@dimen/dp_11"
+                android:layout_marginRight="15dp"
+                android:background="@drawable/icon_go_right"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintRight_toRightOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:layout_marginLeft="11dp"
+                android:layout_marginRight="9dp"
+                android:background="@color/color_f2f2f2"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintLeft_toLeftOf="parent" />
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:id="@+id/cl_certification"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/dp_55"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/cl_modify_psd">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="12dp"
+                android:text="实名认证"
+                android:textColor="@color/color_1a1a1a"
+                android:textSize="@dimen/sp_16"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintLeft_toLeftOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+            <TextView
+                android:id="@+id/tv_certification_status"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginRight="28dp"
+                android:text="--"
+                android:textColor="@color/color_999999"
+                android:textSize="@dimen/sp_16"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintRight_toRightOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+            <ImageView
+                android:layout_width="@dimen/dp_6"
+                android:layout_height="@dimen/dp_11"
+                android:layout_marginRight="15dp"
+                android:background="@drawable/icon_go_right"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintRight_toRightOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="10dp"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/cl_certification" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</LinearLayout>

+ 181 - 0
teacher/src/main/res/layout/activity_setting.xml

@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout 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:background="@color/color_f6f8f9"
+    android:orientation="vertical">
+
+    <include
+        android:id="@+id/toolbarInclude"
+        layout="@layout/common_toolbar_layout" />
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="14dp"
+        android:layout_marginTop="15dp"
+        android:layout_marginEnd="14dp"
+        android:background="@drawable/bg_white_10dp">
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:id="@+id/cl_address"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/dp_50"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toTopOf="parent">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="12dp"
+                android:text="收货地址"
+                android:textColor="@color/color_1a1a1a"
+                android:textSize="@dimen/sp_16"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintLeft_toLeftOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+
+            <ImageView
+                android:layout_width="@dimen/dp_6"
+                android:layout_height="@dimen/dp_11"
+                android:layout_marginRight="15dp"
+                android:background="@drawable/icon_go_right"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintRight_toRightOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:layout_marginLeft="11dp"
+                android:layout_marginRight="9dp"
+                android:background="@color/color_f2f2f2"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintLeft_toLeftOf="parent" />
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:id="@+id/cl_detection"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/dp_50"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/cl_address">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="12dp"
+                android:text="进入课堂时进行网络&amp;设备检测"
+                android:textColor="@color/color_1a1a1a"
+                android:textSize="@dimen/sp_16"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintLeft_toLeftOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+
+            <ImageView
+                android:layout_width="@dimen/dp_47"
+                android:layout_height="@dimen/dp_24"
+                android:layout_marginRight="14dp"
+                android:background="@drawable/icon_switch_off"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintRight_toRightOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:layout_marginLeft="11dp"
+                android:layout_marginRight="9dp"
+                android:background="@color/color_f2f2f2"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintLeft_toLeftOf="parent" />
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:id="@+id/cl_private"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/dp_50"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/cl_detection">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="12dp"
+                android:text="安全隐私"
+                android:textColor="@color/color_1a1a1a"
+                android:textSize="@dimen/sp_16"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintLeft_toLeftOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+
+            <ImageView
+                android:layout_width="@dimen/dp_6"
+                android:layout_height="@dimen/dp_11"
+                android:layout_marginRight="15dp"
+                android:background="@drawable/icon_go_right"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintRight_toRightOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:layout_marginLeft="11dp"
+                android:layout_marginRight="9dp"
+                android:background="@color/color_f2f2f2"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintLeft_toLeftOf="parent" />
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:id="@+id/cl_about"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/dp_50"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/cl_private">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="12dp"
+                android:text="关于我们"
+                android:textColor="@color/color_1a1a1a"
+                android:textSize="@dimen/sp_16"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintLeft_toLeftOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+
+            <ImageView
+                android:layout_width="@dimen/dp_6"
+                android:layout_height="@dimen/dp_11"
+                android:layout_marginRight="15dp"
+                android:background="@drawable/icon_go_right"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintRight_toRightOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:layout_marginLeft="11dp"
+                android:layout_marginRight="9dp"
+                android:background="@color/color_f2f2f2"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintLeft_toLeftOf="parent" />
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="10dp"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/cl_about" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</LinearLayout>

+ 59 - 0
teacher/src/main/res/layout/activity_teachable_instrument.xml

@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout 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="wrap_content"
+    android:background="@color/color_f6f8f9"
+    android:orientation="vertical">
+
+    <include
+        android:id="@+id/toolbarInclude"
+        layout="@layout/common_toolbar_layout" />
+
+    <TextView
+        android:id="@+id/tv_tips"
+        android:layout_width="match_parent"
+        android:layout_height="36dp"
+        android:layout_marginLeft="14dp"
+        android:layout_marginTop="15dp"
+        android:layout_below="@+id/toolbarInclude"
+        android:layout_marginRight="14dp"
+        android:background="@drawable/bg_white_10dp"
+        android:gravity="center_vertical"
+        android:text="最多可选择5个乐器"
+        android:textColor="@color/color_ff9e5a"
+        android:textSize="@dimen/sp_14"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/rv_instrument"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@+id/tv_tips"
+        android:layout_marginLeft="10dp"
+        android:layout_marginTop="16dp"
+        android:overScrollMode="never"
+        android:layout_marginRight="10dp"
+        android:layout_marginBottom="119dp"
+        android:nestedScrollingEnabled="false"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+
+    <TextView
+        android:id="@+id/tv_confirm"
+        android:layout_width="match_parent"
+        android:layout_height="44dp"
+        android:layout_marginLeft="27dp"
+        android:layout_marginRight="27dp"
+        android:layout_marginBottom="48dp"
+        android:background="@drawable/shape_course_status_ing"
+        android:gravity="center"
+        android:text="确认"
+        android:textColor="@color/white"
+        android:textSize="@dimen/sp_14"
+        android:layout_alignParentBottom="true"
+       />
+
+</RelativeLayout>

+ 34 - 0
teacher/src/main/res/layout/item_teacher_style_video_layout.xml

@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout 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="wrap_content">
+
+    <FrameLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="5dp"
+        android:layout_marginRight="5dp">
+
+        <com.cooleshow.base.widgets.QMUIRadiusImageView
+            android:id="@+id/iv_video_bg"
+            android:layout_width="match_parent"
+            android:layout_height="106dp"
+            android:layout_marginTop="5dp"
+            android:layout_marginRight="5dp"
+            app:qmui_corner_radius="10dp" />
+
+        <ImageView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center"
+            android:src="@drawable/icon_play_video" />
+    </FrameLayout>
+
+    <ImageView
+        android:id="@+id/im_delete"
+        android:layout_width="22dp"
+        android:layout_height="22dp"
+        android:layout_alignParentRight="true"
+        android:background="@drawable/icon_video_close" />
+</RelativeLayout>

+ 32 - 0
teacher/src/main/res/layout/item_teacher_style_video_layout_add.xml

@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout 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="111dp">
+
+    <ImageView
+        android:id="@+id/iv_video_add"
+        android:layout_width="match_parent"
+        android:layout_height="106dp"
+        android:layout_marginTop="5dp"
+        android:layout_marginRight="5dp"
+        android:layout_marginLeft="5dp"
+        android:background="@drawable/bg_dash_border_radius"
+        app:qmui_corner_radius="10dp" />
+
+    <ImageView
+        android:layout_width="31dp"
+        android:layout_height="25dp"
+        android:layout_marginTop="22dp"
+        android:background="@drawable/icon_upload_tum"
+        android:layout_centerHorizontal="true" />
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="点击上传视频"
+        android:textColor="@color/color_999999"
+        android:textSize="@dimen/sp_14"
+        android:layout_alignParentBottom="true"
+        android:layout_marginBottom="22dp"
+        android:layout_centerHorizontal="true"/>
+</RelativeLayout>

+ 36 - 0
teacher/src/main/res/layout/layout_teachable_instrument.xml

@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout 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="wrap_content">
+
+
+    <View
+        android:id="@+id/view_mark"
+        android:layout_width="3dp"
+        android:layout_height="16dp"
+        android:layout_marginLeft="5dp"
+        android:background="@drawable/mark_2dc7aa_3radius"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <TextView
+        android:id="@+id/tv_title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="6dp"
+        android:text="xxxxx"
+        android:textColor="@color/black_333"
+        android:textSize="@dimen/sp_16"
+        app:layout_constraintBottom_toBottomOf="@+id/view_mark"
+        app:layout_constraintLeft_toRightOf="@+id/view_mark"
+        app:layout_constraintTop_toTopOf="@+id/view_mark" />
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/rv_item"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/tv_title" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 41 - 0
teacher/src/main/res/layout/layout_teachable_instrument_item.xml

@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout 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="wrap_content">
+
+    <com.cooleshow.base.widgets.QMUIRadiusImageView
+        android:id="@+id/iv_pic"
+        android:layout_width="match_parent"
+        android:layout_height="108dp"
+        android:layout_marginLeft="5dp"
+        android:layout_marginTop="5dp"
+        android:layout_marginRight="5dp"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:qmui_corner_radius="10dp" />
+
+
+    <ImageView
+        android:id="@+id/im_check"
+        android:layout_width="22dp"
+        android:layout_height="22dp"
+        android:layout_marginTop="7dp"
+        android:layout_marginRight="7dp"
+        android:background="@drawable/icon_check_normal"
+        app:layout_constraintRight_toRightOf="@+id/iv_pic"
+        app:layout_constraintTop_toTopOf="@+id/iv_pic" />
+
+
+    <TextView
+        android:id="@+id/tv_name"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="7dp"
+        android:layout_marginBottom="7dp"
+        android:text=""
+        android:textColor="@color/white"
+        android:textSize="@dimen/sp_16"
+        app:layout_constraintBottom_toBottomOf="@+id/iv_pic"
+        app:layout_constraintLeft_toLeftOf="@+id/iv_pic" />
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 35 - 0
teacher/src/main/res/layout/layout_teachable_instrument_select.xml

@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content">
+
+    <RelativeLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:background="@drawable/bg_select_2dc7aa_radius"
+        android:paddingLeft="8dp"
+        android:paddingTop="4dp"
+        android:layout_marginLeft="3dp"
+        android:layout_marginRight="3dp"
+        android:layout_marginTop="3dp"
+        android:layout_marginBottom="3dp"
+        android:paddingRight="8dp"
+        android:paddingBottom="4dp">
+
+        <TextView
+            android:id="@+id/tv_name"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="长笛"
+            android:textColor="@color/color_2dc7aa" />
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="2dp"
+            android:layout_toRightOf="@+id/tv_name"
+            android:text="×"
+            android:textColor="@color/color_2dc7aa" />
+
+    </RelativeLayout>
+</RelativeLayout>