mirror of
https://github.com/oxen-io/session-android.git
synced 2025-04-25 10:44:24 +00:00
ViewStub for AudioView in ConversationItems
// FREEBIE
This commit is contained in:
parent
7286fd9b06
commit
e270e8d429
@ -60,14 +60,11 @@
|
|||||||
tools:src="@drawable/ic_video_light"
|
tools:src="@drawable/ic_video_light"
|
||||||
tools:visibility="gone" />
|
tools:visibility="gone" />
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.AudioView
|
<ViewStub
|
||||||
android:id="@+id/audio_view"
|
android:id="@+id/audio_view_stub"
|
||||||
|
android:layout="@layout/conversation_item_received_audio"
|
||||||
android:layout_width="210dp"
|
android:layout_width="210dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"/>
|
||||||
android:visibility="gone"
|
|
||||||
app:foregroundTintColor="@color/white"
|
|
||||||
app:backgroundTintColor="@color/blue_500"
|
|
||||||
tools:visibility="visible"/>
|
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.emoji.EmojiTextView
|
<org.thoughtcrime.securesms.components.emoji.EmojiTextView
|
||||||
android:id="@+id/conversation_item_body"
|
android:id="@+id/conversation_item_body"
|
||||||
|
12
res/layout/conversation_item_received_audio.xml
Normal file
12
res/layout/conversation_item_received_audio.xml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<org.thoughtcrime.securesms.components.AudioView
|
||||||
|
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:id="@+id/audio_view"
|
||||||
|
android:layout_width="210dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:foregroundTintColor="@color/white"
|
||||||
|
app:backgroundTintColor="@color/blue_500"
|
||||||
|
tools:visibility="visible"/>
|
@ -51,13 +51,11 @@
|
|||||||
tools:src="@drawable/ic_video_light"
|
tools:src="@drawable/ic_video_light"
|
||||||
tools:visibility="visible" />
|
tools:visibility="visible" />
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.AudioView
|
<ViewStub
|
||||||
android:id="@+id/audio_view"
|
android:id="@+id/audio_view_stub"
|
||||||
|
android:layout="@layout/conversation_item_sent_audio"
|
||||||
android:layout_width="210dp"
|
android:layout_width="210dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"/>
|
||||||
app:foregroundTintColor="@color/grey_500"
|
|
||||||
app:backgroundTintColor="@color/white"
|
|
||||||
android:visibility="gone"/>
|
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.emoji.EmojiTextView
|
<org.thoughtcrime.securesms.components.emoji.EmojiTextView
|
||||||
android:id="@+id/conversation_item_body"
|
android:id="@+id/conversation_item_body"
|
||||||
|
10
res/layout/conversation_item_sent_audio.xml
Normal file
10
res/layout/conversation_item_sent_audio.xml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<org.thoughtcrime.securesms.components.AudioView
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:id="@+id/audio_view"
|
||||||
|
android:layout_width="210dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:foregroundTintColor="@color/grey_500"
|
||||||
|
app:backgroundTintColor="@color/white"
|
||||||
|
android:visibility="gone"/>
|
@ -35,6 +35,7 @@ import org.thoughtcrime.securesms.database.DatabaseFactory;
|
|||||||
import org.thoughtcrime.securesms.database.MmsSmsColumns;
|
import org.thoughtcrime.securesms.database.MmsSmsColumns;
|
||||||
import org.thoughtcrime.securesms.database.MmsSmsDatabase;
|
import org.thoughtcrime.securesms.database.MmsSmsDatabase;
|
||||||
import org.thoughtcrime.securesms.database.SmsDatabase;
|
import org.thoughtcrime.securesms.database.SmsDatabase;
|
||||||
|
import org.thoughtcrime.securesms.database.model.MediaMmsMessageRecord;
|
||||||
import org.thoughtcrime.securesms.database.model.MessageRecord;
|
import org.thoughtcrime.securesms.database.model.MessageRecord;
|
||||||
import org.thoughtcrime.securesms.recipients.Recipients;
|
import org.thoughtcrime.securesms.recipients.Recipients;
|
||||||
import org.thoughtcrime.securesms.util.LRUCache;
|
import org.thoughtcrime.securesms.util.LRUCache;
|
||||||
@ -63,9 +64,11 @@ public class ConversationAdapter <V extends View & BindableConversationItem>
|
|||||||
private final Map<String,SoftReference<MessageRecord>> messageRecordCache =
|
private final Map<String,SoftReference<MessageRecord>> messageRecordCache =
|
||||||
Collections.synchronizedMap(new LRUCache<String, SoftReference<MessageRecord>>(MAX_CACHE_SIZE));
|
Collections.synchronizedMap(new LRUCache<String, SoftReference<MessageRecord>>(MAX_CACHE_SIZE));
|
||||||
|
|
||||||
public static final int MESSAGE_TYPE_OUTGOING = 0;
|
private static final int MESSAGE_TYPE_OUTGOING = 0;
|
||||||
public static final int MESSAGE_TYPE_INCOMING = 1;
|
private static final int MESSAGE_TYPE_INCOMING = 1;
|
||||||
public static final int MESSAGE_TYPE_UPDATE = 2;
|
private static final int MESSAGE_TYPE_UPDATE = 2;
|
||||||
|
private static final int MESSAGE_TYPE_AUDIO_OUTGOING = 3;
|
||||||
|
private static final int MESSAGE_TYPE_AUDIO_INCOMING = 4;
|
||||||
|
|
||||||
private final Set<MessageRecord> batchSelected = Collections.synchronizedSet(new HashSet<MessageRecord>());
|
private final Set<MessageRecord> batchSelected = Collections.synchronizedSet(new HashSet<MessageRecord>());
|
||||||
|
|
||||||
@ -168,9 +171,11 @@ public class ConversationAdapter <V extends View & BindableConversationItem>
|
|||||||
|
|
||||||
private @LayoutRes int getLayoutForViewType(int viewType) {
|
private @LayoutRes int getLayoutForViewType(int viewType) {
|
||||||
switch (viewType) {
|
switch (viewType) {
|
||||||
case ConversationAdapter.MESSAGE_TYPE_OUTGOING: return R.layout.conversation_item_sent;
|
case MESSAGE_TYPE_AUDIO_OUTGOING:
|
||||||
case ConversationAdapter.MESSAGE_TYPE_INCOMING: return R.layout.conversation_item_received;
|
case MESSAGE_TYPE_OUTGOING: return R.layout.conversation_item_sent;
|
||||||
case ConversationAdapter.MESSAGE_TYPE_UPDATE: return R.layout.conversation_item_update;
|
case MESSAGE_TYPE_AUDIO_INCOMING:
|
||||||
|
case MESSAGE_TYPE_INCOMING: return R.layout.conversation_item_received;
|
||||||
|
case MESSAGE_TYPE_UPDATE: return R.layout.conversation_item_update;
|
||||||
default: throw new IllegalArgumentException("unsupported item view type given to ConversationAdapter");
|
default: throw new IllegalArgumentException("unsupported item view type given to ConversationAdapter");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -182,9 +187,11 @@ public class ConversationAdapter <V extends View & BindableConversationItem>
|
|||||||
MessageRecord messageRecord = getMessageRecord(id, cursor, type);
|
MessageRecord messageRecord = getMessageRecord(id, cursor, type);
|
||||||
|
|
||||||
if (messageRecord.isGroupAction() || messageRecord.isCallLog() || messageRecord.isJoined() ||
|
if (messageRecord.isGroupAction() || messageRecord.isCallLog() || messageRecord.isJoined() ||
|
||||||
messageRecord.isExpirationTimerUpdate() || messageRecord.isEndSession() || messageRecord.isIdentityUpdate())
|
messageRecord.isExpirationTimerUpdate() || messageRecord.isEndSession() || messageRecord.isIdentityUpdate()) {
|
||||||
{
|
|
||||||
return MESSAGE_TYPE_UPDATE;
|
return MESSAGE_TYPE_UPDATE;
|
||||||
|
} else if (hasAudio(messageRecord)) {
|
||||||
|
if (messageRecord.isOutgoing()) return MESSAGE_TYPE_AUDIO_OUTGOING;
|
||||||
|
else return MESSAGE_TYPE_AUDIO_INCOMING;
|
||||||
} else if (messageRecord.isOutgoing()) {
|
} else if (messageRecord.isOutgoing()) {
|
||||||
return MESSAGE_TYPE_OUTGOING;
|
return MESSAGE_TYPE_OUTGOING;
|
||||||
} else {
|
} else {
|
||||||
@ -227,4 +234,10 @@ public class ConversationAdapter <V extends View & BindableConversationItem>
|
|||||||
public Set<MessageRecord> getSelectedItems() {
|
public Set<MessageRecord> getSelectedItems() {
|
||||||
return Collections.unmodifiableSet(new HashSet<>(batchSelected));
|
return Collections.unmodifiableSet(new HashSet<>(batchSelected));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean hasAudio(MessageRecord messageRecord) {
|
||||||
|
return messageRecord.isMms() &&
|
||||||
|
!messageRecord.isMmsNotification() &&
|
||||||
|
((MediaMmsMessageRecord)messageRecord).getSlideDeck().getAudioSlide() != null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,7 @@ import android.util.AttributeSet;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.view.ViewStub;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
@ -70,6 +71,7 @@ import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
|||||||
import org.thoughtcrime.securesms.util.Util;
|
import org.thoughtcrime.securesms.util.Util;
|
||||||
import org.thoughtcrime.securesms.util.dualsim.SubscriptionInfoCompat;
|
import org.thoughtcrime.securesms.util.dualsim.SubscriptionInfoCompat;
|
||||||
import org.thoughtcrime.securesms.util.dualsim.SubscriptionManagerCompat;
|
import org.thoughtcrime.securesms.util.dualsim.SubscriptionManagerCompat;
|
||||||
|
import org.thoughtcrime.securesms.util.views.Stub;
|
||||||
import org.whispersystems.libsignal.util.guava.Optional;
|
import org.whispersystems.libsignal.util.guava.Optional;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
@ -96,7 +98,7 @@ public class ConversationItem extends LinearLayout
|
|||||||
private boolean groupThread;
|
private boolean groupThread;
|
||||||
private Recipient recipient;
|
private Recipient recipient;
|
||||||
|
|
||||||
private View bodyBubble;
|
protected View bodyBubble;
|
||||||
private TextView bodyText;
|
private TextView bodyText;
|
||||||
private TextView dateText;
|
private TextView dateText;
|
||||||
private TextView simInfoText;
|
private TextView simInfoText;
|
||||||
@ -110,7 +112,7 @@ public class ConversationItem extends LinearLayout
|
|||||||
private @NonNull Set<MessageRecord> batchSelected = new HashSet<>();
|
private @NonNull Set<MessageRecord> batchSelected = new HashSet<>();
|
||||||
private @Nullable Recipients conversationRecipients;
|
private @Nullable Recipients conversationRecipients;
|
||||||
private @NonNull ThumbnailView mediaThumbnail;
|
private @NonNull ThumbnailView mediaThumbnail;
|
||||||
private @NonNull AudioView audioView;
|
private @NonNull Stub<AudioView> audioViewStub;
|
||||||
private @NonNull Button mmsDownloadButton;
|
private @NonNull Button mmsDownloadButton;
|
||||||
private @NonNull TextView mmsDownloadingLabel;
|
private @NonNull TextView mmsDownloadingLabel;
|
||||||
private @NonNull ExpirationTimerView expirationTimer;
|
private @NonNull ExpirationTimerView expirationTimer;
|
||||||
@ -119,6 +121,9 @@ public class ConversationItem extends LinearLayout
|
|||||||
|
|
||||||
private final MmsDownloadClickListener mmsDownloadClickListener = new MmsDownloadClickListener();
|
private final MmsDownloadClickListener mmsDownloadClickListener = new MmsDownloadClickListener();
|
||||||
private final MmsPreferencesClickListener mmsPreferencesClickListener = new MmsPreferencesClickListener();
|
private final MmsPreferencesClickListener mmsPreferencesClickListener = new MmsPreferencesClickListener();
|
||||||
|
private final PassthroughClickListener passthroughClickListener = new PassthroughClickListener();
|
||||||
|
private final AttachmentDownloadClickListener downloadClickListener = new AttachmentDownloadClickListener();
|
||||||
|
|
||||||
private final Context context;
|
private final Context context;
|
||||||
|
|
||||||
public ConversationItem(Context context) {
|
public ConversationItem(Context context) {
|
||||||
@ -154,20 +159,17 @@ public class ConversationItem extends LinearLayout
|
|||||||
this.contactPhoto = (AvatarImageView) findViewById(R.id.contact_photo);
|
this.contactPhoto = (AvatarImageView) findViewById(R.id.contact_photo);
|
||||||
this.bodyBubble = findViewById(R.id.body_bubble);
|
this.bodyBubble = findViewById(R.id.body_bubble);
|
||||||
this.mediaThumbnail = (ThumbnailView) findViewById(R.id.image_view);
|
this.mediaThumbnail = (ThumbnailView) findViewById(R.id.image_view);
|
||||||
this.audioView = (AudioView) findViewById(R.id.audio_view);
|
this.audioViewStub = new Stub<>((ViewStub) findViewById(R.id.audio_view_stub));
|
||||||
this.expirationTimer = (ExpirationTimerView) findViewById(R.id.expiration_indicator);
|
this.expirationTimer = (ExpirationTimerView) findViewById(R.id.expiration_indicator);
|
||||||
|
|
||||||
|
|
||||||
setOnClickListener(new ClickListener(null));
|
setOnClickListener(new ClickListener(null));
|
||||||
PassthroughClickListener passthroughClickListener = new PassthroughClickListener();
|
|
||||||
AttachmentDownloadClickListener downloadClickListener = new AttachmentDownloadClickListener();
|
|
||||||
|
|
||||||
mmsDownloadButton.setOnClickListener(mmsDownloadClickListener);
|
mmsDownloadButton.setOnClickListener(mmsDownloadClickListener);
|
||||||
mediaThumbnail.setThumbnailClickListener(new ThumbnailClickListener());
|
mediaThumbnail.setThumbnailClickListener(new ThumbnailClickListener());
|
||||||
mediaThumbnail.setDownloadClickListener(downloadClickListener);
|
mediaThumbnail.setDownloadClickListener(downloadClickListener);
|
||||||
mediaThumbnail.setOnLongClickListener(passthroughClickListener);
|
mediaThumbnail.setOnLongClickListener(passthroughClickListener);
|
||||||
mediaThumbnail.setOnClickListener(passthroughClickListener);
|
mediaThumbnail.setOnClickListener(passthroughClickListener);
|
||||||
audioView.setDownloadClickListener(downloadClickListener);
|
|
||||||
audioView.setOnLongClickListener(passthroughClickListener);
|
|
||||||
bodyText.setOnLongClickListener(passthroughClickListener);
|
bodyText.setOnLongClickListener(passthroughClickListener);
|
||||||
bodyText.setOnClickListener(passthroughClickListener);
|
bodyText.setOnClickListener(passthroughClickListener);
|
||||||
}
|
}
|
||||||
@ -192,12 +194,12 @@ public class ConversationItem extends LinearLayout
|
|||||||
|
|
||||||
setInteractionState(messageRecord);
|
setInteractionState(messageRecord);
|
||||||
setBodyText(messageRecord);
|
setBodyText(messageRecord);
|
||||||
|
setMediaAttributes(messageRecord);
|
||||||
setBubbleState(messageRecord, recipient);
|
setBubbleState(messageRecord, recipient);
|
||||||
setStatusIcons(messageRecord);
|
setStatusIcons(messageRecord);
|
||||||
setContactPhoto(recipient);
|
setContactPhoto(recipient);
|
||||||
setGroupMessageStatus(messageRecord, recipient);
|
setGroupMessageStatus(messageRecord, recipient);
|
||||||
setMinimumWidth();
|
setMinimumWidth();
|
||||||
setMediaAttributes(messageRecord);
|
|
||||||
setSimInfo(messageRecord);
|
setSimInfo(messageRecord);
|
||||||
setExpiration(messageRecord);
|
setExpiration(messageRecord);
|
||||||
}
|
}
|
||||||
@ -237,18 +239,20 @@ public class ConversationItem extends LinearLayout
|
|||||||
mediaThumbnail.setBackgroundColorHint(color);
|
mediaThumbnail.setBackgroundColorHint(color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (audioViewStub.resolved()) {
|
||||||
setAudioViewTint(messageRecord, conversationRecipients);
|
setAudioViewTint(messageRecord, conversationRecipients);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void setAudioViewTint(MessageRecord messageRecord, Recipients recipients) {
|
private void setAudioViewTint(MessageRecord messageRecord, Recipients recipients) {
|
||||||
if (messageRecord.isOutgoing()) {
|
if (messageRecord.isOutgoing()) {
|
||||||
if (DynamicTheme.LIGHT.equals(TextSecurePreferences.getTheme(context))) {
|
if (DynamicTheme.LIGHT.equals(TextSecurePreferences.getTheme(context))) {
|
||||||
audioView.setTint(recipients.getColor().toConversationColor(context), defaultBubbleColor);
|
audioViewStub.get().setTint(recipients.getColor().toConversationColor(context), defaultBubbleColor);
|
||||||
} else {
|
} else {
|
||||||
audioView.setTint(Color.WHITE, defaultBubbleColor);
|
audioViewStub.get().setTint(Color.WHITE, defaultBubbleColor);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
audioView.setTint(Color.WHITE, recipients.getColor().toConversationColor(context));
|
audioViewStub.get().setTint(Color.WHITE, recipients.getColor().toConversationColor(context));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -293,20 +297,23 @@ public class ConversationItem extends LinearLayout
|
|||||||
|
|
||||||
if (messageRecord.isMmsNotification()) {
|
if (messageRecord.isMmsNotification()) {
|
||||||
mediaThumbnail.setVisibility(View.GONE);
|
mediaThumbnail.setVisibility(View.GONE);
|
||||||
audioView.setVisibility(View.GONE);
|
if (audioViewStub.resolved()) audioViewStub.get().setVisibility(View.GONE);
|
||||||
|
|
||||||
bodyText.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
|
bodyText.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
|
||||||
setNotificationMmsAttributes((NotificationMmsMessageRecord) messageRecord);
|
setNotificationMmsAttributes((NotificationMmsMessageRecord) messageRecord);
|
||||||
} else if (hasAudio(messageRecord)) {
|
} else if (hasAudio(messageRecord)) {
|
||||||
audioView.setVisibility(View.VISIBLE);
|
audioViewStub.get().setVisibility(View.VISIBLE);
|
||||||
mediaThumbnail.setVisibility(View.GONE);
|
mediaThumbnail.setVisibility(View.GONE);
|
||||||
|
|
||||||
//noinspection ConstantConditions
|
//noinspection ConstantConditions
|
||||||
audioView.setAudio(masterSecret, ((MediaMmsMessageRecord) messageRecord).getSlideDeck().getAudioSlide(), showControls);
|
audioViewStub.get().setAudio(masterSecret, ((MediaMmsMessageRecord) messageRecord).getSlideDeck().getAudioSlide(), showControls);
|
||||||
|
audioViewStub.get().setDownloadClickListener(downloadClickListener);
|
||||||
|
audioViewStub.get().setOnLongClickListener(passthroughClickListener);
|
||||||
|
|
||||||
bodyText.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
|
bodyText.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
|
||||||
} else if (hasThumbnail(messageRecord)) {
|
} else if (hasThumbnail(messageRecord)) {
|
||||||
mediaThumbnail.setVisibility(View.VISIBLE);
|
mediaThumbnail.setVisibility(View.VISIBLE);
|
||||||
audioView.setVisibility(View.GONE);
|
if (audioViewStub.resolved()) audioViewStub.get().setVisibility(View.GONE);
|
||||||
|
|
||||||
//noinspection ConstantConditions
|
//noinspection ConstantConditions
|
||||||
mediaThumbnail.setImageResource(masterSecret,
|
mediaThumbnail.setImageResource(masterSecret,
|
||||||
@ -315,7 +322,7 @@ public class ConversationItem extends LinearLayout
|
|||||||
bodyText.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
|
bodyText.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
|
||||||
} else {
|
} else {
|
||||||
mediaThumbnail.setVisibility(View.GONE);
|
mediaThumbnail.setVisibility(View.GONE);
|
||||||
audioView.setVisibility(View.GONE);
|
if (audioViewStub.resolved()) audioViewStub.get().setVisibility(View.GONE);
|
||||||
bodyText.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
|
bodyText.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,20 +1,22 @@
|
|||||||
package org.thoughtcrime.securesms.util.views;
|
package org.thoughtcrime.securesms.util.views;
|
||||||
|
|
||||||
|
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
import android.view.ViewStub;
|
import android.view.ViewStub;
|
||||||
|
|
||||||
public class Stub<T> {
|
public class Stub<T> {
|
||||||
|
|
||||||
private final ViewStub viewStub;
|
private ViewStub viewStub;
|
||||||
private T view;
|
private T view;
|
||||||
|
|
||||||
public Stub(ViewStub viewStub) {
|
public Stub(@NonNull ViewStub viewStub) {
|
||||||
this.viewStub = viewStub;
|
this.viewStub = viewStub;
|
||||||
}
|
}
|
||||||
|
|
||||||
public T get() {
|
public T get() {
|
||||||
if (view == null) {
|
if (view == null) {
|
||||||
view = (T)viewStub.inflate();
|
view = (T)viewStub.inflate();
|
||||||
|
viewStub = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user