/* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License */ package com.android.incallui.sessiondata; import android.graphics.drawable.Drawable; import android.location.Location; import android.net.Uri; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.VisibleForTesting; import android.support.v4.app.Fragment; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; import com.android.dialer.common.FragmentUtils; import com.android.dialer.common.LogUtil; import com.android.dialer.multimedia.MultimediaData; import com.android.dialer.theme.base.ThemeComponent; import com.android.incallui.maps.MapsComponent; import com.bumptech.glide.Glide; import com.bumptech.glide.load.DataSource; import com.bumptech.glide.load.engine.GlideException; import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.target.Target; /** * Displays info from {@link MultimediaData MultimediaData}. * *
Currently displays image, location (as a map), and message that come bundled with
* MultimediaData when calling {@link #newInstance(MultimediaData, boolean, boolean, boolean)}.
*/
public class MultimediaFragment extends Fragment implements AvatarPresenter {
private static final String ARG_SUBJECT = "subject";
private static final String ARG_IMAGE = "image";
private static final String ARG_LOCATION = "location";
private static final String ARG_INTERACTIVE = "interactive";
private static final String ARG_SHOW_AVATAR = "show_avatar";
private static final String ARG_IS_SPAM = "is_spam";
private ImageView avatarImageView;
private boolean showAvatar;
private boolean isSpam;
public static MultimediaFragment newInstance(
@NonNull MultimediaData multimediaData,
boolean isInteractive,
boolean showAvatar,
boolean isSpam) {
return newInstance(
multimediaData.getText(),
multimediaData.getImageUri(),
multimediaData.getLocation(),
isInteractive,
showAvatar,
isSpam);
}
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
public static MultimediaFragment newInstance(
@Nullable String subject,
@Nullable Uri imageUri,
@Nullable Location location,
boolean isInteractive,
boolean showAvatar,
boolean isSpam) {
Bundle args = new Bundle();
args.putString(ARG_SUBJECT, subject);
args.putParcelable(ARG_IMAGE, imageUri);
args.putParcelable(ARG_LOCATION, location);
args.putBoolean(ARG_INTERACTIVE, isInteractive);
args.putBoolean(ARG_SHOW_AVATAR, showAvatar);
args.putBoolean(ARG_IS_SPAM, isSpam);
MultimediaFragment fragment = new MultimediaFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(@Nullable Bundle bundle) {
super.onCreate(bundle);
showAvatar = getArguments().getBoolean(ARG_SHOW_AVATAR);
isSpam = getArguments().getBoolean(ARG_IS_SPAM);
}
@Nullable
@Override
public View onCreateView(
LayoutInflater layoutInflater, @Nullable ViewGroup viewGroup, @Nullable Bundle bundle) {
layoutInflater =
layoutInflater.cloneInContext(
ThemeComponent.get(getContext()).theme().getThemedContext(getContext()));
if (isSpam) {
LogUtil.i("MultimediaFragment.onCreateView", "show spam layout");
return layoutInflater.inflate(R.layout.fragment_spam, viewGroup, false);
}
boolean hasImage = getImageUri() != null;
boolean hasSubject = !TextUtils.isEmpty(getSubject());
boolean hasMap = getLocation() != null;
if (hasMap && MapsComponent.get(getContext()).getMaps().isAvailable()) {
if (hasImage) {
if (hasSubject) {
LogUtil.i("MultimediaFragment.onCreateView", "show text, image, location layout");
return layoutInflater.inflate(
R.layout.fragment_composer_text_image_frag, viewGroup, false);
} else {
LogUtil.i("MultimediaFragment.onCreateView", "show image, location layout");
return layoutInflater.inflate(R.layout.fragment_composer_image_frag, viewGroup, false);
}
} else if (hasSubject) {
LogUtil.i("MultimediaFragment.onCreateView", "show text, location layout");
return layoutInflater.inflate(R.layout.fragment_composer_text_frag, viewGroup, false);
} else {
LogUtil.i("MultimediaFragment.onCreateView", "show location layout");
return layoutInflater.inflate(R.layout.fragment_composer_frag, viewGroup, false);
}
} else if (hasImage) {
if (hasSubject) {
LogUtil.i("MultimediaFragment.onCreateView", "show text, image layout");
return layoutInflater.inflate(R.layout.fragment_composer_text_image, viewGroup, false);
} else {
LogUtil.i("MultimediaFragment.onCreateView", "show image layout");
return layoutInflater.inflate(R.layout.fragment_composer_image, viewGroup, false);
}
} else {
LogUtil.i("MultimediaFragment.onCreateView", "show text layout");
return layoutInflater.inflate(R.layout.fragment_composer_text, viewGroup, false);
}
}
@Override
public void onViewCreated(View view, @Nullable Bundle bundle) {
super.onViewCreated(view, bundle);
View container = view.findViewById(R.id.answer_message_container);
if (container != null) {
container.setClipToOutline(true);
}
// If the call is spam and only has a subject, update the view to reflect that.
if (isSpam
&& getLocation() == null
&& getImageUri() == null
&& !TextUtils.isEmpty(getSubject())) {
((ImageView) view.findViewById(R.id.spam_image))
.setImageResource(R.drawable.quantum_ic_message_white_24);
((TextView) view.findViewById(R.id.spam_text)).setText(R.string.spam_message_text);
}
TextView messageText = view.findViewById(R.id.answer_message_text);
if (messageText != null) {
messageText.setText(getSubject());
}
ImageView mainImage = view.findViewById(R.id.answer_message_image);
if (mainImage != null) {
Glide.with(this)
.load(getImageUri())
.transition(DrawableTransitionOptions.withCrossFade())
.listener(
new RequestListener