3434import androidx .recyclerview .widget .AsyncDifferConfig ;
3535import androidx .recyclerview .widget .DiffUtil ;
3636import androidx .recyclerview .widget .ListUpdateCallback ;
37- import androidx .recyclerview .widget .RecyclerView ;
3837
3938import com .bumptech .glide .Glide ;
4039import com .bumptech .glide .RequestManager ;
@@ -118,73 +117,30 @@ public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
118117 public void onBindViewHolder (@ NonNull ViewHolder holder , int position ) {
119118 if (showCamera ) {
120119 if (position == 0 ) {
121- handleCamera ( holder .openCamera , false );
120+ holder .bind ( null , false );
122121 return ;
123122 }
124123 if (showVideoCamera ) {
125124 if (position == 1 ) {
126- handleCamera ( holder .openVideoCamera , true );
125+ holder .bind ( null , true );
127126 return ;
128127 }
129- holder .openVideoCamera .setVisibility (View .GONE );
130128 position --;
131129 }
132- holder .openCamera .setVisibility (View .GONE );
133130 position --;
134131 } else if (showVideoCamera ) {
135132 if (position == 0 ) {
136- handleCamera ( holder .openVideoCamera , true );
133+ holder .bind ( null , true );
137134 return ;
138135 }
139- holder .openVideoCamera .setVisibility (View .GONE );
140136 position --;
141137 }
142138
143139 super .onBindViewHolder (holder , position );
144140
145141 MediaFile mediaFile = getItem (position );
146142
147- if (mediaFile .getMediaType () == MediaFile .TYPE_VIDEO ||
148- mediaFile .getMediaType () == MediaFile .TYPE_IMAGE ) {
149- glideRequest .load (mediaFile .getUri ())
150- .into (holder .fileThumbnail );
151- } else if (mediaFile .getMediaType () == MediaFile .TYPE_AUDIO ) {
152- glideRequest .load (mediaFile .getThumbnail ())
153- .apply (RequestOptions .placeholderOf (R .drawable .ic_audio ))
154- .into (holder .fileThumbnail );
155- } else {
156- holder .fileThumbnail .setImageResource (R .drawable .ic_file );
157- }
158-
159- if (mediaFile .getMediaType () == MediaFile .TYPE_VIDEO ||
160- mediaFile .getMediaType () == MediaFile .TYPE_AUDIO ) {
161- holder .fileDuration .setVisibility (View .VISIBLE );
162- holder .fileDuration .setText (TimeUtils .getDuration (mediaFile .getDuration ()));
163- } else {
164- holder .fileDuration .setVisibility (View .GONE );
165- }
166-
167- if (mediaFile .getMediaType () == MediaFile .TYPE_FILE
168- || mediaFile .getMediaType () == MediaFile .TYPE_AUDIO ) {
169- holder .fileName .setVisibility (View .VISIBLE );
170- holder .fileName .setText (mediaFile .getName ());
171- } else {
172- holder .fileName .setVisibility (View .GONE );
173- }
174-
175- holder .fileSelected .setVisibility (isSelected (mediaFile ) ? View .VISIBLE : View .GONE );
176- }
177-
178- private void handleCamera (final ImageView openCamera , final boolean forVideo ) {
179- openCamera .setVisibility (View .VISIBLE );
180- openCamera .setOnClickListener (new View .OnClickListener () {
181- @ Override
182- public void onClick (View v ) {
183- if (onCameraClickListener != null && !onCameraClickListener .onCameraClick (forVideo ))
184- return ;
185- openCamera (forVideo );
186- }
187- });
143+ holder .bind (mediaFile , null );
188144 }
189145
190146 public void openCamera (boolean forVideo ) {
@@ -300,7 +256,7 @@ public void onMaxReached() {
300256 }
301257 }
302258
303- public static class ViewHolder extends RecyclerView .ViewHolder {
259+ public class ViewHolder extends MultiSelectionAdapter .ViewHolder {
304260 private ImageView fileSelected , openCamera , openVideoCamera ;
305261 private SquareImage fileThumbnail ;
306262 private TextView fileDuration , fileName ;
@@ -313,6 +269,66 @@ public static class ViewHolder extends RecyclerView.ViewHolder {
313269 fileDuration = v .findViewById (R .id .file_duration );
314270 fileName = v .findViewById (R .id .file_name );
315271 fileSelected = v .findViewById (R .id .file_selected );
272+
273+ openCamera .setOnClickListener (new View .OnClickListener () {
274+ @ Override
275+ public void onClick (View v ) {
276+ if (onCameraClickListener != null && !onCameraClickListener .onCameraClick (false ))
277+ return ;
278+ openCamera (false );
279+ }
280+ });
281+
282+ openVideoCamera .setOnClickListener (new View .OnClickListener () {
283+ @ Override
284+ public void onClick (View v ) {
285+ if (onCameraClickListener != null && !onCameraClickListener .onCameraClick (true ))
286+ return ;
287+ openCamera (true );
288+ }
289+ });
290+ }
291+
292+ void bind (MediaFile mediaFile , Boolean forVideo ) {
293+ if (forVideo == null ) {
294+ openCamera .setVisibility (View .GONE );
295+ openVideoCamera .setVisibility (View .GONE );
296+ } else {
297+ openCamera .setVisibility (forVideo ? View .GONE : View .VISIBLE );
298+ openVideoCamera .setVisibility (forVideo ? View .VISIBLE : View .GONE );
299+ }
300+
301+ if (mediaFile == null ) return ;
302+
303+ if (mediaFile .getMediaType () == MediaFile .TYPE_VIDEO ||
304+ mediaFile .getMediaType () == MediaFile .TYPE_IMAGE ) {
305+ glideRequest .load (mediaFile .getUri ())
306+ .into (fileThumbnail );
307+ } else if (mediaFile .getMediaType () == MediaFile .TYPE_AUDIO ) {
308+ glideRequest .load (mediaFile .getThumbnail ())
309+ .apply (RequestOptions .placeholderOf (R .drawable .ic_audio ))
310+ .into (fileThumbnail );
311+ } else {
312+ fileThumbnail .setImageResource (R .drawable .ic_file );
313+ }
314+
315+ if (mediaFile .getMediaType () == MediaFile .TYPE_VIDEO ||
316+ mediaFile .getMediaType () == MediaFile .TYPE_AUDIO ) {
317+ fileDuration .setVisibility (View .VISIBLE );
318+ fileDuration .setText (TimeUtils .getDuration (mediaFile .getDuration ()));
319+ } else {
320+ fileDuration .setVisibility (View .GONE );
321+ }
322+
323+ if (mediaFile .getMediaType () == MediaFile .TYPE_FILE
324+ || mediaFile .getMediaType () == MediaFile .TYPE_AUDIO ) {
325+ fileName .setVisibility (View .VISIBLE );
326+ fileName .setText (mediaFile .getName ());
327+ } else {
328+ fileName .setVisibility (View .GONE );
329+ }
330+
331+ fileSelected .setVisibility (isSelected (mediaFile ) ? View .VISIBLE : View .GONE );
316332 }
317333 }
318334
0 commit comments