|  |  |  | @ -24,6 +24,7 @@ import io.legado.app.utils.ColorUtils | 
			
		
	
		
			
				
					|  |  |  |  | import io.legado.app.utils.invisible | 
			
		
	
		
			
				
					|  |  |  |  | import io.legado.app.utils.startActivity | 
			
		
	
		
			
				
					|  |  |  |  | import io.legado.app.utils.visible | 
			
		
	
		
			
				
					|  |  |  |  | import java.util.* | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | class BookSourceAdapter(context: Context, val callBack: CallBack) : | 
			
		
	
	
		
			
				
					|  |  |  | @ -31,6 +32,7 @@ class BookSourceAdapter(context: Context, val callBack: CallBack) : | 
			
		
	
		
			
				
					|  |  |  |  |     ItemTouchCallback.Callback { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     private val selected = linkedSetOf<BookSource>() | 
			
		
	
		
			
				
					|  |  |  |  |     private val selectedPosition = linkedSetOf<Int>() | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     val selection: List<BookSource> | 
			
		
	
		
			
				
					|  |  |  |  |         get() { | 
			
		
	
	
		
			
				
					|  |  |  | @ -141,8 +143,10 @@ class BookSourceAdapter(context: Context, val callBack: CallBack) : | 
			
		
	
		
			
				
					|  |  |  |  |                     if (view.isPressed) { | 
			
		
	
		
			
				
					|  |  |  |  |                         if (checked) { | 
			
		
	
		
			
				
					|  |  |  |  |                             selected.add(it) | 
			
		
	
		
			
				
					|  |  |  |  |                             selectedPosition.add(holder.layoutPosition) | 
			
		
	
		
			
				
					|  |  |  |  |                         } else { | 
			
		
	
		
			
				
					|  |  |  |  |                             selected.remove(it) | 
			
		
	
		
			
				
					|  |  |  |  |                             selectedPosition.remove(holder.layoutPosition) | 
			
		
	
		
			
				
					|  |  |  |  |                         } | 
			
		
	
		
			
				
					|  |  |  |  |                         callBack.upCountView() | 
			
		
	
		
			
				
					|  |  |  |  |                     } | 
			
		
	
	
		
			
				
					|  |  |  | @ -215,25 +219,42 @@ class BookSourceAdapter(context: Context, val callBack: CallBack) : | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     fun selectAll() { | 
			
		
	
		
			
				
					|  |  |  |  |         getItems().forEach { | 
			
		
	
		
			
				
					|  |  |  |  |         getItems().forEachIndexed { index, it -> | 
			
		
	
		
			
				
					|  |  |  |  |             selected.add(it) | 
			
		
	
		
			
				
					|  |  |  |  |             selectedPosition.add(index) | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         notifyItemRangeChanged(0, itemCount, bundleOf(Pair("selected", null))) | 
			
		
	
		
			
				
					|  |  |  |  |         callBack.upCountView() | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     fun revertSelection() { | 
			
		
	
		
			
				
					|  |  |  |  |         getItems().forEach { | 
			
		
	
		
			
				
					|  |  |  |  |         getItems().forEachIndexed { index, it -> | 
			
		
	
		
			
				
					|  |  |  |  |             if (selected.contains(it)) { | 
			
		
	
		
			
				
					|  |  |  |  |                 selected.remove(it) | 
			
		
	
		
			
				
					|  |  |  |  |                 selectedPosition.remove(index) | 
			
		
	
		
			
				
					|  |  |  |  |             } else { | 
			
		
	
		
			
				
					|  |  |  |  |                 selected.add(it) | 
			
		
	
		
			
				
					|  |  |  |  |                 selectedPosition.add(index) | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         notifyItemRangeChanged(0, itemCount, bundleOf(Pair("selected", null))) | 
			
		
	
		
			
				
					|  |  |  |  |         callBack.upCountView() | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     fun checkSelectedInterval() { | 
			
		
	
		
			
				
					|  |  |  |  |         val minPosition = Collections.min(selectedPosition) | 
			
		
	
		
			
				
					|  |  |  |  |         val maxPosition = Collections.max(selectedPosition) | 
			
		
	
		
			
				
					|  |  |  |  |         val itemCount = maxPosition - minPosition + 1 | 
			
		
	
		
			
				
					|  |  |  |  |         for (i in minPosition..maxPosition) { | 
			
		
	
		
			
				
					|  |  |  |  |             getItem(i)?.let { | 
			
		
	
		
			
				
					|  |  |  |  |                 selected.add(it) | 
			
		
	
		
			
				
					|  |  |  |  |                 selectedPosition.add(i) | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         notifyItemRangeChanged(minPosition, itemCount, bundleOf(Pair("selected", null))) | 
			
		
	
		
			
				
					|  |  |  |  |         callBack.upCountView() | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     override fun swap(srcPosition: Int, targetPosition: Int): Boolean { | 
			
		
	
		
			
				
					|  |  |  |  |         val srcItem = getItem(srcPosition) | 
			
		
	
		
			
				
					|  |  |  |  |         val targetItem = getItem(targetPosition) | 
			
		
	
	
		
			
				
					|  |  |  | @ -275,8 +296,10 @@ class BookSourceAdapter(context: Context, val callBack: CallBack) : | 
			
		
	
		
			
				
					|  |  |  |  |                 getItem(position)?.let { | 
			
		
	
		
			
				
					|  |  |  |  |                     if (isSelected) { | 
			
		
	
		
			
				
					|  |  |  |  |                         selected.add(it) | 
			
		
	
		
			
				
					|  |  |  |  |                         selectedPosition.add(position) | 
			
		
	
		
			
				
					|  |  |  |  |                     } else { | 
			
		
	
		
			
				
					|  |  |  |  |                         selected.remove(it) | 
			
		
	
		
			
				
					|  |  |  |  |                         selectedPosition.remove(position) | 
			
		
	
		
			
				
					|  |  |  |  |                     } | 
			
		
	
		
			
				
					|  |  |  |  |                     notifyItemChanged(position, bundleOf(Pair("selected", null))) | 
			
		
	
		
			
				
					|  |  |  |  |                     callBack.upCountView() | 
			
		
	
	
		
			
				
					|  |  |  | 
 |