Fix images not shown in dm

This commit is contained in:
Ammar Githam 2020-09-26 18:14:06 +09:00
parent 6bd0b811b1
commit b5e66e35bf
13 changed files with 249 additions and 72 deletions

View File

@ -2,9 +2,11 @@ package awais.instagrabber.adapters.viewholder.directmessages;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.core.text.HtmlCompat;
import androidx.core.util.Pair;
import awais.instagrabber.R;
import awais.instagrabber.databinding.LayoutDmBaseBinding;
@ -13,18 +15,24 @@ import awais.instagrabber.models.ProfileModel;
import awais.instagrabber.models.direct_messages.DirectItemModel;
import awais.instagrabber.models.direct_messages.DirectItemModel.DirectItemMediaModel;
import awais.instagrabber.models.enums.MediaItemType;
import awais.instagrabber.utils.NumberUtils;
import awais.instagrabber.utils.Utils;
import static androidx.core.text.HtmlCompat.FROM_HTML_MODE_COMPACT;
public class DirectMessageMediaShareViewHolder extends DirectMessageItemViewHolder {
private final LayoutDmMediaShareBinding binding;
private final int maxHeight;
private final int maxWidth;
public DirectMessageMediaShareViewHolder(@NonNull final LayoutDmBaseBinding baseBinding,
@NonNull final LayoutDmMediaShareBinding binding,
final View.OnClickListener onClickListener) {
super(baseBinding, onClickListener);
this.binding = binding;
maxHeight = itemView.getResources().getDimensionPixelSize(R.dimen.dm_media_img_max_height);
maxWidth = (int) (Utils.displayMetrics.widthPixels * 0.8);
setItemView(binding.getRoot());
}
@ -38,9 +46,48 @@ public class DirectMessageMediaShareViewHolder extends DirectMessageItemViewHold
"<small>" + context.getString(R.string.dms_inbox_media_shared_from, modelUser.getUsername()) + "</small>",
FROM_HTML_MODE_COMPACT));
}
final Pair<Integer, Integer> widthHeight = NumberUtils.calculateWidthHeight(
mediaModel.getHeight(),
mediaModel.getWidth(),
maxHeight,
maxWidth
);
final ViewGroup.LayoutParams layoutParams = binding.ivMediaPreview.getLayoutParams();
layoutParams.width = widthHeight.first != null ? widthHeight.first : 0;
layoutParams.height = widthHeight.second != null ? widthHeight.second : 0;
binding.ivMediaPreview.requestLayout();
binding.ivMediaPreview.setImageURI(mediaModel.getThumbUrl());
final MediaItemType modelMediaType = mediaModel.getMediaType();
binding.typeIcon.setVisibility(modelMediaType == MediaItemType.MEDIA_TYPE_VIDEO
|| modelMediaType == MediaItemType.MEDIA_TYPE_SLIDER ? View.VISIBLE : View.GONE);
}
private class WidthHeight {
private final DirectItemMediaModel mediaModel;
private int height;
private int width;
public WidthHeight(final DirectItemMediaModel mediaModel) {this.mediaModel = mediaModel;}
public int getHeight() {
return height;
}
public int getWidth() {
return width;
}
public WidthHeight invoke() {
height = mediaModel.getHeight();
width = mediaModel.getWidth();
// make height 500dp regardless
width = NumberUtils.getResultingWidth(maxHeight, height, width);
height = maxHeight;
if (width > maxWidth) {
height = NumberUtils.getResultingHeight(maxWidth, height, width);
width = maxWidth;
}
return this;
}
}
}

View File

@ -1,32 +1,53 @@
package awais.instagrabber.adapters.viewholder.directmessages;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.core.util.Pair;
import awais.instagrabber.R;
import awais.instagrabber.databinding.LayoutDmBaseBinding;
import awais.instagrabber.databinding.LayoutDmMediaBinding;
import awais.instagrabber.models.direct_messages.DirectItemModel;
import awais.instagrabber.models.enums.MediaItemType;
import awais.instagrabber.utils.NumberUtils;
import awais.instagrabber.utils.Utils;
public class DirectMessageMediaViewHolder extends DirectMessageItemViewHolder {
private final LayoutDmMediaBinding binding;
private final int maxHeight;
private final int maxWidth;
public DirectMessageMediaViewHolder(@NonNull final LayoutDmBaseBinding baseBinding,
@NonNull final LayoutDmMediaBinding binding,
final View.OnClickListener onClickListener) {
super(baseBinding, onClickListener);
this.binding = binding;
maxHeight = itemView.getResources().getDimensionPixelSize(R.dimen.dm_media_img_max_height);
maxWidth = (int) (Utils.displayMetrics.widthPixels * 0.8);
setItemView(binding.getRoot());
}
@Override
public void bindItem(final DirectItemModel directItemModel) {
final DirectItemModel.DirectItemMediaModel mediaModel = directItemModel.getMediaModel();
final Pair<Integer, Integer> widthHeight = NumberUtils.calculateWidthHeight(
mediaModel.getHeight(),
mediaModel.getWidth(),
maxHeight,
maxWidth
);
final ViewGroup.LayoutParams layoutParams = binding.ivMediaPreview.getLayoutParams();
layoutParams.width = widthHeight.first != null ? widthHeight.first : 0;
layoutParams.height = widthHeight.second != null ? widthHeight.second : 0;
binding.ivMediaPreview.requestLayout();
binding.ivMediaPreview.requestLayout();
binding.ivMediaPreview.setImageURI(mediaModel.getThumbUrl());
final MediaItemType modelMediaType = mediaModel.getMediaType();
binding.typeIcon.setVisibility(modelMediaType == MediaItemType.MEDIA_TYPE_VIDEO
|| modelMediaType == MediaItemType.MEDIA_TYPE_SLIDER ? View.VISIBLE : View.GONE);
binding.typeIcon.setVisibility(modelMediaType == MediaItemType.MEDIA_TYPE_VIDEO || modelMediaType == MediaItemType.MEDIA_TYPE_SLIDER
? View.VISIBLE
: View.GONE);
}
}

View File

@ -2,8 +2,10 @@ package awais.instagrabber.adapters.viewholder.directmessages;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.core.util.Pair;
import awais.instagrabber.R;
import awais.instagrabber.databinding.LayoutDmBaseBinding;
@ -12,17 +14,23 @@ import awais.instagrabber.models.direct_messages.DirectItemModel;
import awais.instagrabber.models.enums.MediaItemType;
import awais.instagrabber.models.enums.RavenExpiringMediaType;
import awais.instagrabber.models.enums.RavenMediaViewType;
import awais.instagrabber.utils.NumberUtils;
import awais.instagrabber.utils.TextUtils;
import awais.instagrabber.utils.Utils;
public class DirectMessageRavenMediaViewHolder extends DirectMessageItemViewHolder {
private final LayoutDmRavenMediaBinding binding;
private final int maxHeight;
private final int maxWidth;
public DirectMessageRavenMediaViewHolder(@NonNull final LayoutDmBaseBinding baseBinding,
@NonNull final LayoutDmRavenMediaBinding binding,
final View.OnClickListener onClickListener) {
super(baseBinding, onClickListener);
this.binding = binding;
maxHeight = itemView.getResources().getDimensionPixelSize(R.dimen.dm_media_img_max_height);
maxWidth = (int) (Utils.displayMetrics.widthPixels * 0.8);
binding.tvMessage.setVisibility(View.GONE);
setItemView(binding.getRoot());
}
@ -72,8 +80,19 @@ public class DirectMessageRavenMediaViewHolder extends DirectMessageItemViewHold
if (ravenMediaViewType == RavenMediaViewType.PERMANENT || ravenMediaViewType == RavenMediaViewType.REPLAYABLE) {
final MediaItemType mediaType = mediaModel.getMediaType();
textRes = -1;
binding.typeIcon.setVisibility(mediaType == MediaItemType.MEDIA_TYPE_VIDEO ||
mediaType == MediaItemType.MEDIA_TYPE_SLIDER ? View.VISIBLE : View.GONE);
binding.typeIcon.setVisibility(mediaType == MediaItemType.MEDIA_TYPE_VIDEO || mediaType == MediaItemType.MEDIA_TYPE_SLIDER
? View.VISIBLE
: View.GONE);
final Pair<Integer, Integer> widthHeight = NumberUtils.calculateWidthHeight(
mediaModel.getHeight(),
mediaModel.getWidth(),
maxHeight,
maxWidth
);
final ViewGroup.LayoutParams layoutParams = binding.ivMediaPreview.getLayoutParams();
layoutParams.width = widthHeight.first != null ? widthHeight.first : 0;
layoutParams.height = widthHeight.second != null ? widthHeight.second : 0;
binding.ivMediaPreview.requestLayout();
binding.ivMediaPreview.setImageURI(mediaModel.getThumbUrl());
}
}

View File

@ -1,19 +1,26 @@
package awais.instagrabber.adapters.viewholder.directmessages;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.core.util.Pair;
import awais.instagrabber.R;
import awais.instagrabber.databinding.LayoutDmBaseBinding;
import awais.instagrabber.databinding.LayoutDmRavenMediaBinding;
import awais.instagrabber.interfaces.MentionClickListener;
import awais.instagrabber.models.direct_messages.DirectItemModel;
import awais.instagrabber.models.enums.MediaItemType;
import awais.instagrabber.utils.NumberUtils;
import awais.instagrabber.utils.TextUtils;
import awais.instagrabber.utils.Utils;
public class DirectMessageReelShareViewHolder extends DirectMessageItemViewHolder {
private final LayoutDmRavenMediaBinding binding;
private final int maxHeight;
private final int maxWidth;
public DirectMessageReelShareViewHolder(@NonNull final LayoutDmBaseBinding baseBinding,
@NonNull final LayoutDmRavenMediaBinding binding,
@ -21,6 +28,8 @@ public class DirectMessageReelShareViewHolder extends DirectMessageItemViewHolde
final MentionClickListener mentionClickListener) {
super(baseBinding, onClickListener);
this.binding = binding;
maxHeight = itemView.getResources().getDimensionPixelSize(R.dimen.dm_media_img_max_height);
maxWidth = (int) (Utils.displayMetrics.widthPixels * 0.8);
binding.tvMessage.setMentionClickListener(mentionClickListener);
setItemView(binding.getRoot());
}
@ -42,6 +51,16 @@ public class DirectMessageReelShareViewHolder extends DirectMessageItemViewHolde
} else {
binding.typeIcon.setVisibility(mediaType == MediaItemType.MEDIA_TYPE_VIDEO ||
mediaType == MediaItemType.MEDIA_TYPE_SLIDER ? View.VISIBLE : View.GONE);
final Pair<Integer, Integer> widthHeight = NumberUtils.calculateWidthHeight(
reelShareMedia.getHeight(),
reelShareMedia.getWidth(),
maxHeight,
maxWidth
);
final ViewGroup.LayoutParams layoutParams = binding.ivMediaPreview.getLayoutParams();
layoutParams.width = widthHeight.first != null ? widthHeight.first : 0;
layoutParams.height = widthHeight.second != null ? widthHeight.second : 0;
binding.ivMediaPreview.requestLayout();
binding.ivMediaPreview.setImageURI(reelShareMedia.getThumbUrl());
}
}

View File

@ -1,27 +1,36 @@
package awais.instagrabber.adapters.viewholder.directmessages;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.core.text.HtmlCompat;
import androidx.core.util.Pair;
import awais.instagrabber.R;
import awais.instagrabber.databinding.LayoutDmBaseBinding;
import awais.instagrabber.databinding.LayoutDmStoryShareBinding;
import awais.instagrabber.models.direct_messages.DirectItemModel;
import awais.instagrabber.models.enums.MediaItemType;
import awais.instagrabber.utils.NumberUtils;
import awais.instagrabber.utils.TextUtils;
import awais.instagrabber.utils.Utils;
import static androidx.core.text.HtmlCompat.FROM_HTML_MODE_COMPACT;
public class DirectMessageStoryShareViewHolder extends DirectMessageItemViewHolder {
private final LayoutDmStoryShareBinding binding;
private final int maxHeight;
private final int maxWidth;
public DirectMessageStoryShareViewHolder(@NonNull final LayoutDmBaseBinding baseBinding,
@NonNull final LayoutDmStoryShareBinding binding,
final View.OnClickListener onClickListener) {
super(baseBinding, onClickListener);
this.binding = binding;
maxHeight = itemView.getResources().getDimensionPixelSize(R.dimen.dm_media_img_max_height);
maxWidth = (int) (Utils.displayMetrics.widthPixels * 0.8);
binding.tvMessage.setVisibility(View.GONE);
setItemView(binding.getRoot());
}
@ -41,6 +50,16 @@ public class DirectMessageStoryShareViewHolder extends DirectMessageItemViewHold
final DirectItemModel.DirectItemMediaModel reelShareMedia = reelShare.getMedia();
final MediaItemType mediaType = reelShareMedia.getMediaType();
binding.typeIcon.setVisibility(mediaType == MediaItemType.MEDIA_TYPE_VIDEO ? View.VISIBLE : View.GONE);
final Pair<Integer, Integer> widthHeight = NumberUtils.calculateWidthHeight(
reelShareMedia.getHeight(),
reelShareMedia.getWidth(),
maxHeight,
maxWidth
);
final ViewGroup.LayoutParams layoutParams = binding.ivMediaPreview.getLayoutParams();
layoutParams.width = widthHeight.first != null ? widthHeight.first : 0;
layoutParams.height = widthHeight.second != null ? widthHeight.second : 0;
binding.ivMediaPreview.requestLayout();
binding.ivMediaPreview.setImageURI(reelShareMedia.getThumbUrl());
}
}

View File

@ -166,10 +166,11 @@ public final class DiscoverFetcher extends AsyncTask<Void, Void, DiscoverItemMod
final MediaItemType mediaType = ResponseBodyUtils.getMediaItemType(media.getInt("media_type"));
final ResponseBodyUtils.ThumbnailDetails thumbnailUrl = ResponseBodyUtils.getThumbnailUrl(media, mediaType);
final DiscoverItemModel model = new DiscoverItemModel(mediaType,
media.getString("pk"),
media.getString("code"),
ResponseBodyUtils.getThumbnailUrl(media, mediaType));
thumbnailUrl != null ? thumbnailUrl.url : null);
final File downloadDir = new File(Environment.getExternalStorageDirectory(), "Download" +
(Utils.settingsHelper.getBoolean(DOWNLOAD_USER_FOLDER) ? ("/" + username) : ""));

View File

@ -139,11 +139,19 @@ public final class DirectItemModel implements Serializable, Comparable<DirectIte
public final static class DirectItemAnimatedMediaModel implements Serializable {
private final boolean isRandom, isSticker;
private final String id;
private final String gifUrl, webpUrl, mp4Url;
private final String gifUrl;
private final String webpUrl;
private final String mp4Url;
private final int height, width;
public DirectItemAnimatedMediaModel(final boolean isRandom, final boolean isSticker, final String id, final String gifUrl,
final String webpUrl, final String mp4Url, final int height, final int width) {
public DirectItemAnimatedMediaModel(final boolean isRandom,
final boolean isSticker,
final String id,
final String gifUrl,
final String webpUrl,
final String mp4Url,
final int height,
final int width) {
this.isRandom = isRandom;
this.isSticker = isSticker;
this.id = id;
@ -370,11 +378,24 @@ public final class DirectItemModel implements Serializable, Comparable<DirectIte
public final static class DirectItemMediaModel implements Serializable {
private final MediaItemType mediaType;
private final long expiringAt, pk;
private final String id, thumbUrl, videoUrl, code;
private final String id;
private final String thumbUrl;
private final String videoUrl;
private final String code;
private final ProfileModel user;
private final int height;
private final int width;
public DirectItemMediaModel(final MediaItemType mediaType, final long expiringAt, final long pk, final String id,
final String thumbUrl, final String videoUrl, final ProfileModel user, final String code) {
public DirectItemMediaModel(final MediaItemType mediaType,
final long expiringAt,
final long pk,
final String id,
final String thumbUrl,
final String videoUrl,
final ProfileModel user,
final String code,
final int height,
final int width) {
this.mediaType = mediaType;
this.expiringAt = expiringAt;
this.pk = pk;
@ -383,6 +404,8 @@ public final class DirectItemModel implements Serializable, Comparable<DirectIte
this.videoUrl = videoUrl;
this.user = user;
this.code = code;
this.height = height;
this.width = width;
}
public MediaItemType getMediaType() {
@ -419,6 +442,14 @@ public final class DirectItemModel implements Serializable, Comparable<DirectIte
else return thumbUrl;
}
public int getHeight() {
return height;
}
public int getWidth() {
return width;
}
}
public final static class DirectItemRavenMediaModel implements Serializable {

View File

@ -1,6 +1,7 @@
package awais.instagrabber.utils;
import androidx.annotation.NonNull;
import androidx.core.util.Pair;
import java.util.Random;
@ -53,4 +54,15 @@ public final class NumberUtils {
}
return r;
}
@NonNull
public static Pair<Integer, Integer> calculateWidthHeight(final int height, final int width, final int maxHeight, final int maxWidth) {
int tempWidth = NumberUtils.getResultingWidth(maxHeight, height, width);
int tempHeight = maxHeight;
if (width > maxWidth) {
tempHeight = NumberUtils.getResultingHeight(maxWidth, height, width);
tempWidth = maxWidth;
}
return new Pair<>(tempWidth, tempHeight);
}
}

View File

@ -10,7 +10,6 @@ import org.json.JSONArray;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Locale;
import awais.instagrabber.BuildConfig;
import awais.instagrabber.models.ProfileModel;
@ -24,6 +23,8 @@ import awais.instagrabber.models.enums.RavenMediaViewType;
import awaisomereport.LogCollector;
public final class ResponseBodyUtils {
private static final String TAG = "ResponseBodyUtils";
// isI: true if the content was requested from i.instagram.com instead of graphql
@Nullable
public static String getHighQualityPost(final JSONArray resources, final boolean isVideo, final boolean isI, final boolean low) {
@ -103,37 +104,38 @@ public final class ResponseBodyUtils {
return src;
}
public static String getItemThumbnail(@NonNull final JSONArray jsonArray) {
String thumbnail = null;
public static ThumbnailDetails getItemThumbnail(@NonNull final JSONArray jsonArray) {
final ThumbnailDetails thumbnailDetails = new ThumbnailDetails();
final int imageResLen = jsonArray.length();
for (int i = 0; i < imageResLen; ++i) {
final JSONObject imageResource = jsonArray.optJSONObject(i);
try {
final int width = imageResource.getInt("width");
final int height = imageResource.getInt("height");
final float ratio = Float.parseFloat(String.format(Locale.ENGLISH, "%.2f", (float) height / width));
if (ratio >= 0.95f && ratio <= 1.0f) {
thumbnail = imageResource.getString("url");
// final float ratio = (float) height / width;
// if (ratio >= 0.95f && ratio <= 1.0f) {
thumbnailDetails.height = imageResource.getInt("height");
thumbnailDetails.width = imageResource.getInt("width");
thumbnailDetails.url = imageResource.getString("url");
break;
}
// }
} catch (final Exception e) {
if (Utils.logCollector != null)
Utils.logCollector.appendException(e, LogCollector.LogFile.UTILS, "getItemThumbnail");
if (BuildConfig.DEBUG) Log.e("AWAISKING_APP", "", e);
thumbnail = null;
if (BuildConfig.DEBUG) Log.e(TAG, "", e);
}
}
// if (TextUtils.isEmpty(thumbnail)) thumbnail = jsonArray.optJSONObject(0).optString("url");
return thumbnailDetails;
}
if (TextUtils.isEmpty(thumbnail)) thumbnail = jsonArray.optJSONObject(0).optString("url");
return thumbnail;
public static class ThumbnailDetails {
int width;
int height;
public String url;
}
@Nullable
public static String getThumbnailUrl(@NonNull final JSONObject mediaObj, final MediaItemType mediaType) throws Exception {
String thumbnail = null;
public static ThumbnailDetails getThumbnailUrl(@NonNull final JSONObject mediaObj, final MediaItemType mediaType) throws Exception {
ThumbnailDetails thumbnail = null;
if (mediaType == MediaItemType.MEDIA_TYPE_IMAGE || mediaType == MediaItemType.MEDIA_TYPE_VIDEO) {
final JSONObject imageVersions = mediaObj.optJSONObject("image_versions2");
if (imageVersions != null)
@ -143,19 +145,18 @@ public final class ResponseBodyUtils {
final JSONArray carouselMedia = mediaObj.optJSONArray("carousel_media");
if (carouselMedia != null)
thumbnail = getItemThumbnail(carouselMedia.getJSONObject(0)
.getJSONObject("image_versions2").getJSONArray("candidates"));
.getJSONObject("image_versions2")
.getJSONArray("candidates"));
}
return thumbnail;
}
public static String getVideoUrl(@NonNull final JSONObject mediaObj) throws Exception {
public static String getVideoUrl(@NonNull final JSONObject mediaObj) {
String thumbnail = null;
final JSONArray imageVersions = mediaObj.optJSONArray("video_versions");
if (imageVersions != null)
thumbnail = getItemThumbnail(imageVersions);
if (imageVersions != null) {
thumbnail = getItemThumbnail(imageVersions).url;
}
return thumbnail;
}
@ -193,14 +194,18 @@ public final class ResponseBodyUtils {
String id = mediaObj.optString("id");
if (TextUtils.isEmpty(id)) id = null;
mediaModel = new DirectItemModel.DirectItemMediaModel(mediaType,
final ThumbnailDetails thumbnailDetails = getThumbnailUrl(mediaObj, mediaType);
mediaModel = new DirectItemModel.DirectItemMediaModel(
mediaType,
mediaObj.optLong("expiring_at"),
mediaObj.optLong("pk"),
id,
getThumbnailUrl(mediaObj, mediaType),
thumbnailDetails != null ? thumbnailDetails.url : null,
mediaType == MediaItemType.MEDIA_TYPE_VIDEO ? getVideoUrl(mediaObj) : null,
user,
mediaObj.optString("code"));
mediaObj.optString("code"),
thumbnailDetails != null ? thumbnailDetails.height : 0,
thumbnailDetails != null ? thumbnailDetails.width : 0);
}
return mediaModel;
}
@ -314,7 +319,8 @@ public final class ResponseBodyUtils {
final JSONObject animatedMedia = itemObject.getJSONObject("animated_media");
final JSONObject stickerImage = animatedMedia.getJSONObject("images").getJSONObject("fixed_height");
animatedMediaModel = new DirectItemModel.DirectItemAnimatedMediaModel(animatedMedia.getBoolean("is_random"),
animatedMediaModel = new DirectItemModel.DirectItemAnimatedMediaModel(
animatedMedia.getBoolean("is_random"),
animatedMedia.getBoolean("is_sticker"),
animatedMedia.getString("id"),
stickerImage.getString("url"),
@ -340,8 +346,10 @@ public final class ResponseBodyUtils {
}
}
voiceMediaModel = new DirectItemModel.DirectItemVoiceMediaModel(voiceMedia.getString("id"),
audio.getString("audio_src"), audio.getLong("duration"),
voiceMediaModel = new DirectItemModel.DirectItemVoiceMediaModel(
voiceMedia.getString("id"),
audio.getString("audio_src"),
audio.getLong("duration"),
waveformData);
}
break;
@ -360,7 +368,8 @@ public final class ResponseBodyUtils {
);
}
linkModel = new DirectItemModel.DirectItemLinkModel(linkObj.getString("text"),
linkModel = new DirectItemModel.DirectItemLinkModel(
linkObj.getString("text"),
linkObj.getString("client_context"),
linkObj.optString("mutation_token"),
itemLinkContext);

View File

@ -1,22 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:layout_marginTop="?actionBarSize"
android:orientation="vertical">
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipeRefreshLayout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/messageList"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:listitem="@layout/layout_dm_base"/>
tools:listitem="@layout/layout_dm_base" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
<LinearLayout

View File

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<com.facebook.drawee.view.SimpleDraweeView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ivAnimatedMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxHeight="@dimen/dm_media_img_max_height" />
android:layout_width="match_parent"
android:layout_height="@dimen/dm_media_img_max_height" />

View File

@ -7,9 +7,7 @@
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/ivMediaPreview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:maxHeight="@dimen/dm_media_img_max_height" />
android:layout_height="wrap_content" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/typeIcon"

View File

@ -13,7 +13,7 @@
<argument
android:name="username"
app:argType="string"
app:nullable="false" />
app:nullable="true" />
</action>
<include app:graph="@navigation/location_nav_graph" />