• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023 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.intentresolver.contentpreview;
18 
19 import android.animation.ObjectAnimator;
20 import android.animation.ValueAnimator;
21 import android.content.res.Resources;
22 import android.graphics.Bitmap;
23 import android.text.TextUtils;
24 import android.view.LayoutInflater;
25 import android.view.View;
26 import android.view.ViewGroup;
27 import android.view.animation.DecelerateInterpolator;
28 import android.widget.ImageView;
29 import android.widget.TextView;
30 
31 import com.android.intentresolver.R;
32 import com.android.intentresolver.widget.ActionRow;
33 import com.android.intentresolver.widget.ScrollableImagePreviewView;
34 
35 abstract class ContentPreviewUi {
36     private static final int IMAGE_FADE_IN_MILLIS = 150;
37     static final String TAG = "ChooserPreview";
38 
39     @ContentPreviewType
getType()40     public abstract int getType();
41 
display( Resources resources, LayoutInflater layoutInflater, ViewGroup parent)42     public abstract ViewGroup display(
43             Resources resources, LayoutInflater layoutInflater, ViewGroup parent);
44 
updateViewWithImage(ImageView imageView, Bitmap image)45     protected static void updateViewWithImage(ImageView imageView, Bitmap image) {
46         if (image == null) {
47             imageView.setVisibility(View.GONE);
48             return;
49         }
50         imageView.setVisibility(View.VISIBLE);
51         imageView.setAlpha(0.0f);
52         imageView.setImageBitmap(image);
53 
54         ValueAnimator fadeAnim = ObjectAnimator.ofFloat(imageView, "alpha", 0.0f, 1.0f);
55         fadeAnim.setInterpolator(new DecelerateInterpolator(1.0f));
56         fadeAnim.setDuration(IMAGE_FADE_IN_MILLIS);
57         fadeAnim.start();
58     }
59 
displayHeadline(ViewGroup layout, String headline)60     protected static void displayHeadline(ViewGroup layout, String headline) {
61         if (layout != null) {
62             TextView titleView = layout.findViewById(R.id.headline);
63             if (titleView != null) {
64                 if (!TextUtils.isEmpty(headline)) {
65                     titleView.setText(headline);
66                     titleView.setVisibility(View.VISIBLE);
67                 } else {
68                     titleView.setVisibility(View.GONE);
69                 }
70             }
71         }
72     }
73 
displayModifyShareAction( ViewGroup layout, ChooserContentPreviewUi.ActionFactory actionFactory)74     protected static void displayModifyShareAction(
75             ViewGroup layout,
76             ChooserContentPreviewUi.ActionFactory actionFactory) {
77         ActionRow.Action modifyShareAction = actionFactory.getModifyShareAction();
78         if (modifyShareAction != null && layout != null) {
79             TextView modifyShareView = layout.findViewById(R.id.reselection_action);
80             if (modifyShareView != null) {
81                 modifyShareView.setText(modifyShareAction.getLabel());
82                 modifyShareView.setVisibility(View.VISIBLE);
83                 modifyShareView.setOnClickListener(view -> modifyShareAction.getOnClicked().run());
84             }
85         }
86     }
87 
getPreviewType( MimeTypeClassifier typeClassifier, String mimeType)88     static ScrollableImagePreviewView.PreviewType getPreviewType(
89             MimeTypeClassifier typeClassifier, String mimeType) {
90         if (mimeType == null) {
91             return ScrollableImagePreviewView.PreviewType.File;
92         }
93         if (typeClassifier.isImageType(mimeType)) {
94             return ScrollableImagePreviewView.PreviewType.Image;
95         }
96         if (typeClassifier.isVideoType(mimeType)) {
97             return ScrollableImagePreviewView.PreviewType.Video;
98         }
99         return ScrollableImagePreviewView.PreviewType.File;
100     }
101 }
102