@Override
 public void changePhotosCategory(int toCategoryId) {
   if (mCategoryId != toCategoryId) {
     mRxPhotoNote
         .findByCategoryId(mCategoryId, mAlbumSortKind)
         .observeOn(AndroidSchedulers.mainThread())
         .map(
             photoNoteList -> {
               TreeMap<Integer, PhotoNote> map = getTreeMap();
               for (int i = 0; i < photoNoteList.size(); i++) {
                 PhotoNote photoNote = photoNoteList.get(i);
                 if (photoNote.isSelected()) {
                   photoNote.setSelected(false);
                   photoNote.setCategoryId(toCategoryId);
                   map.put(i, photoNote);
                 }
               }
               int times = 0;
               for (Map.Entry<Integer, PhotoNote> entry : map.entrySet()) {
                 photoNoteList.remove(entry.getValue());
                 mAlbumView.notifyItemRemoved(entry.getKey() - times); // todo 这个在这里合适吗?觉得严重的不合适
                 mRxPhotoNote.updatePhotoNote(entry.getValue()).subscribe();
                 times++;
               }
               return map.size();
             })
         .subscribe(
             integer -> {
               mRxCategory
                   .updateChangeCategory(mCategoryId, toCategoryId, integer)
                   .subscribe(
                       categories -> {
                         mRxPhotoNote
                             .refreshByCategoryId(mCategoryId, ComparatorFactory.FACTORY_NOT_SORT)
                             .subscribe();
                         mRxPhotoNote
                             .refreshByCategoryId(toCategoryId, ComparatorFactory.FACTORY_NOT_SORT)
                             .subscribe();
                         EventBus.getDefault().post(new CategoryMoveEvent());
                       });
             });
   }
 }
 @Override
 public void updateFromBroadcast(
     boolean broadcast_process, boolean broadcast_service, boolean broadcast_photo) {
   // 当图片数据改变的时候,比如滤镜,Service作图
   // 另外个进程发来广播的时候
   // todo  这里可以弄动画,需要计算的过程
   if (broadcast_process || broadcast_service) {
     mRxPhotoNote
         .refreshByCategoryId(mCategoryId, mAlbumSortKind)
         .observeOn(AndroidSchedulers.mainThread())
         .subscribe(
             photoNoteList -> {
               mAlbumView.updateData(photoNoteList);
             });
   } else if (broadcast_photo) {
     mAlbumView.notifyDataSetChanged();
   }
 }