• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.providers.media.photopicker.ui;
18 
19 import android.content.Context;
20 import android.view.SurfaceHolder;
21 import android.view.SurfaceView;
22 import android.view.View;
23 import android.view.ViewGroup;
24 import android.widget.ImageButton;
25 import android.widget.ImageView;
26 
27 import androidx.viewpager2.widget.ViewPager2;
28 
29 import com.android.providers.media.R;
30 import com.android.providers.media.photopicker.data.model.Item;
31 
32 import com.google.android.exoplayer2.ui.AspectRatioFrameLayout;
33 
34 /**
35  * ViewHolder of a video item within the {@link ViewPager2}
36  */
37 public class PreviewVideoHolder extends BaseViewHolder {
38 
39     private final ImageLoader mImageLoader;
40     private final ImageView mImageView;
41     private final SurfaceView mSurfaceView;
42     private final AspectRatioFrameLayout mPlayerFrame;
43     private final View mPlayerContainer;
44     private final View mPlayerControlsRoot;
45     private final ImageButton mPlayPauseButton;
46     private final ImageButton mMuteButton;
47 
PreviewVideoHolder(Context context, ViewGroup parent, ImageLoader imageLoader, boolean enabledCloudMediaPreview)48     PreviewVideoHolder(Context context, ViewGroup parent, ImageLoader imageLoader,
49             boolean enabledCloudMediaPreview) {
50         super(context, parent, enabledCloudMediaPreview ? R.layout.item_cloud_video_preview
51                 : R.layout.item_video_preview);
52 
53         mImageLoader = imageLoader;
54         mImageView = itemView.findViewById(R.id.preview_video_image);
55         mSurfaceView = enabledCloudMediaPreview ? itemView.findViewById(R.id.preview_player_view)
56                 : null;
57         mPlayerFrame = enabledCloudMediaPreview ?
58                 itemView.findViewById(R.id.preview_player_frame) : null;
59         mPlayerContainer = enabledCloudMediaPreview ?
60                 itemView.findViewById(R.id.preview_player_container) : null;
61         mPlayerControlsRoot = enabledCloudMediaPreview ? itemView.findViewById(
62                 R.id.preview_player_controls) : null;
63         mPlayPauseButton = enabledCloudMediaPreview ? itemView.findViewById(
64                 R.id.exo_play_pause) : null;
65         mMuteButton = enabledCloudMediaPreview ? itemView.findViewById(
66                 R.id.preview_mute) : null;
67     }
68 
69     @Override
bind()70     public void bind() {
71         // Video playback needs granular page state events and hence video playback is initiated by
72         // ViewPagerWrapper and handled by PlaybackHandler#handleVideoPlayback.
73         // Here, we set the ImageView with thumbnail from the video, to improve the
74         // user experience while video player is not yet initialized or being prepared.
75         final Item item = (Item) itemView.getTag();
76         mImageLoader.loadImageFromVideoForPreview(item, mImageView);
77     }
78 
getThumbnailView()79     public ImageView getThumbnailView() {
80         return mImageView;
81     }
82 
getSurfaceHolder()83     public SurfaceHolder getSurfaceHolder() {
84         return mSurfaceView.getHolder();
85     }
86 
getPlayerFrame()87     public AspectRatioFrameLayout getPlayerFrame() {
88         return mPlayerFrame;
89     }
90 
getPlayerContainer()91     public View getPlayerContainer() {
92         return mPlayerContainer;
93     }
94 
getPlayerControlsRoot()95     public View getPlayerControlsRoot() {
96         return mPlayerControlsRoot;
97     }
98 
getPlayPauseButton()99     public ImageButton getPlayPauseButton() {
100         return mPlayPauseButton;
101     }
102 
getMuteButton()103     public ImageButton getMuteButton() {
104         return mMuteButton;
105     }
106 }
107