close #1014; Make message text selectable

This commit is contained in:
dalvesrever
2023-01-15 18:30:15 +03:00
parent eac9b2f83a
commit 923586cc33
21 changed files with 1812 additions and 7380 deletions
@@ -0,0 +1,72 @@
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package com.vk.im.ui.components.viewcontrollers.msg_list.adapter;
import android.util.SparseIntArray;
import androidx.annotation.ColorInt;
import androidx.annotation.MainThread;
import androidx.annotation.Nullable;
import com.vk.im.engine.j.StickersAnimationLoader;
import com.vk.im.engine.models.ImExperimentsProvider;
import com.vk.im.engine.models.Member;
import com.vk.im.engine.models.ProfilesSimpleInfo;
import com.vk.im.engine.models.attaches.Attach;
import com.vk.im.engine.models.messages.Msg;
import com.vk.im.engine.models.messages.NestedMsg;
import com.vk.im.ui.media.audio.AudioTrack;
import com.vk.im.ui.q.h.VideoAutoPlayer;
import com.vk.im.ui.views.span.OnSpanClickListener;
import com.vk.im.ui.views.span.OnSpanLongPressListener;
import com.vk.im.ui.views.sticker.StickerAnimationState;
import java.util.List;
@MainThread
public class MsgPartHolderBindArgs {
public SparseIntArray A;
public AudioTrack B;
public AudioMsgInfo C;
public StickerAnimationState D;
public StickersAnimationLoader E;
@Nullable
public OnSpanClickListener F;
@Nullable
public OnSpanLongPressListener G;
@Nullable
public MsgListAdapterCallback H;
@Nullable
public VideoAutoPlayer I;
public Msg a;
public NestedMsg b;
public CharSequence c;
public Attach d;
public List<Attach> e;
public boolean f;
public int g;
public int h;
public int i;
public int j;
public int k;
@ColorInt
public int l;
public Member m;
public ProfilesSimpleInfo n;
public ImExperimentsProvider o;
public int p;
public int q;
public int r;
public boolean s;
public boolean t;
public boolean u;
public boolean v;
public boolean w;
public boolean x;
public boolean y;
public boolean isSelected;
public SparseIntArray z;
public MsgPartHolderBindArgs() {
}
}
@@ -0,0 +1,552 @@
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package com.vk.im.ui.components.viewcontrollers.msg_list.adapter;
import android.util.SparseIntArray;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.vk.core.network.TimeProvider;
import com.vk.im.engine.j.StickersAnimationLoader;
import com.vk.im.engine.models.ImBgSyncState;
import com.vk.im.engine.models.ImExperimentsProvider;
import com.vk.im.engine.models.Member;
import com.vk.im.engine.models.ProfilesSimpleInfo;
import com.vk.im.engine.models.attaches.AttachAudioMsg;
import com.vk.im.engine.models.dialogs.Dialog;
import com.vk.im.engine.models.dialogs.DialogTheme;
import com.vk.im.engine.models.messages.Msg;
import com.vk.im.engine.models.messages.MsgFromUser;
import com.vk.im.engine.models.messages.MsgIdType;
import com.vk.im.engine.models.messages.MsgSyncState;
import com.vk.im.engine.models.messages.WithUserContent;
import com.vk.im.engine.utils.collection.IntSet;
import com.vk.im.ui.components.viewcontrollers.msg_list.entry.AdapterEntry;
import com.vk.im.ui.media.audio.AudioTrack;
import com.vk.im.ui.q.h.VideoAutoPlayer;
import com.vk.im.ui.views.span.OnSpanClickListener;
import com.vk.im.ui.views.span.OnSpanLongPressListener;
import com.vk.im.ui.views.sticker.StickerAnimationState;
public class VhBindArgs {
public MsgListAdapterCallback A;
@Nullable
public VideoAutoPlayer B = null;
@Nullable
public MsgIdType C = null;
public int D = -1;
public AdapterEntry a;
public AdapterEntry b;
public AdapterEntry c;
public int d;
@Nullable
public Dialog e;
@NonNull
public DialogTheme f;
public Member g;
public ProfilesSimpleInfo h;
public int i;
public boolean j;
public boolean k;
public boolean l;
public long m;
public ImExperimentsProvider n;
public ImBgSyncState o;
public int p;
public boolean q;
public IntSet r;
public SparseIntArray s;
public SparseIntArray t;
public AudioTrack u;
public AudioMsgInfo v;
public StickerAnimationState w;
public StickersAnimationLoader x;
@Nullable
public OnSpanClickListener y;
@Nullable
public OnSpanLongPressListener z;
public VhBindArgs() {
}
private long K() {
Msg var1 = this.b.c;
return var1 == null ? Long.MAX_VALUE : TimeProvider.f.b() - var1.getTime();
}
private boolean L() {
boolean var1;
if (this.K() <= this.m && !TimeProvider.f.c()) {
var1 = false;
} else {
var1 = true;
}
return var1;
}
public boolean A() {
AdapterEntry var1 = this.a;
boolean var2 = false;
boolean var3 = var2;
if (var1 != null) {
if (var1.d()) {
var3 = var2;
} else {
Msg var4 = this.a.c;
Msg var5 = this.b.c;
var3 = var2;
if (var4.W() == var5.W()) {
var3 = var2;
if (var4.e0() == var5.e0()) {
var3 = true;
}
}
}
}
return var3;
}
public boolean B() {
AdapterEntry var1 = this.a;
boolean var2;
if (var1 != null && var1.c()) {
var2 = true;
} else {
var2 = false;
}
return var2;
}
public boolean C() {
AdapterEntry var1 = this.a;
boolean var2;
if (var1 != null && var1.c() && this.a.c.getLocalId() == this.b.c.getLocalId()) {
var2 = true;
} else {
var2 = false;
}
return var2;
}
public boolean D() {
AdapterEntry var1 = this.a;
boolean var2;
if (var1 != null && var1.a == 83) {
var2 = true;
} else {
var2 = false;
}
return var2;
}
public boolean E() {
Msg var1 = this.b.c;
boolean var2;
if (var1 instanceof MsgFromUser && ((MsgFromUser)var1).i2()) {
var2 = true;
} else {
var2 = false;
}
return var2;
}
public boolean F() {
Msg var1 = this.b.c;
boolean var2;
if (var1 instanceof MsgFromUser && ((MsgFromUser)var1).F0()) {
var2 = true;
} else {
var2 = false;
}
return var2;
}
public boolean G() {
AdapterEntry var1 = this.b;
boolean var2;
if (var1 != null && var1.a == 51) {
var2 = true;
} else {
var2 = false;
}
return var2;
}
public int H() {
return this.b.i;
}
public boolean I() {
long var1 = this.K();
long var3 = this.m;
boolean var5;
if (var1 > var3 && var1 < var3 * 2L) {
var5 = true;
} else {
var5 = false;
}
return var5;
}
public boolean J() {
Msg var1 = this.b.c;
boolean var2 = false;
if (var1 == null) {
return false;
} else if (!(var1 instanceof MsgFromUser)) {
return false;
} else {
MsgFromUser var7 = (MsgFromUser)var1;
Msg var3 = this.a.c;
boolean var4;
if (var3 != null && var3.d() == MsgSyncState.DONE) {
var4 = true;
} else {
var4 = false;
}
boolean var5;
if (this.o == ImBgSyncState.CONNECTED) {
var5 = true;
} else {
var5 = false;
}
boolean var6 = var2;
if (!var7.H0()) {
var6 = var2;
if (var5) {
var6 = var2;
if (!this.L()) {
var6 = var2;
if (var4) {
var6 = true;
}
}
}
}
return var6;
}
}
public int a() {
boolean var1 = this.h();
byte var2 = 0;
int var3 = var2;
if (var1) {
AttachAudioMsg var4 = (AttachAudioMsg)((MsgFromUser)this.b.c).c(AttachAudioMsg.class, false);
var3 = var2;
if (var4 != null) {
var3 = var4.f();
}
}
return var3;
}
public int b() {
Msg var1 = this.b.c;
int var2;
if (var1 != null) {
var2 = var1.B1();
} else {
var2 = 0;
}
return var2;
}
public boolean c() {
Msg var1 = this.b.c;
boolean var2;
if (var1 instanceof MsgFromUser && ((MsgFromUser)var1).I0()) {
var2 = true;
} else {
var2 = false;
}
return var2;
}
public boolean d() {
Msg var1 = this.b.c;
boolean var2;
if (var1 instanceof WithUserContent && ((WithUserContent)var1).D0() != null) {
var2 = true;
} else {
var2 = false;
}
return var2;
}
public boolean e() {
boolean var1;
if (this.b.i > 0) {
var1 = true;
} else {
var1 = false;
}
return var1;
}
public boolean f() {
AdapterEntry var1 = this.b;
boolean var2;
if (var1 != null) {
Msg var3 = var1.c;
if (var3 != null && var3.P1()) {
var2 = true;
return var2;
}
}
var2 = false;
return var2;
}
public boolean g() {
Msg var1 = this.b.c;
boolean var2;
if (var1 instanceof MsgFromUser && ((MsgFromUser)var1).G0()) {
var2 = true;
} else {
var2 = false;
}
return var2;
}
public boolean h() {
Msg var1 = this.b.c;
boolean var2;
if (var1 instanceof MsgFromUser && ((MsgFromUser)var1).Z1()) {
var2 = true;
} else {
var2 = false;
}
return var2;
}
public boolean i() {
boolean var1;
if (this.j && !this.u() && !this.l()) {
var1 = true;
} else {
var1 = false;
}
return var1;
}
public boolean j() {
boolean var1;
if (!this.j || this.u() || this.B() && this.A() && !this.a.c.H1()) {
var1 = false;
} else {
var1 = true;
}
return var1;
}
public boolean k() {
Dialog var1 = this.e;
boolean var2;
if (var1 != null && var1.U1()) {
var2 = true;
} else {
var2 = false;
}
return var2;
}
public boolean l() {
Dialog var1 = this.e;
boolean var2;
if (var1 != null && var1.V1()) {
var2 = true;
} else {
var2 = false;
}
return var2;
}
public boolean m() {
Dialog var1 = this.e;
boolean var2;
if (var1 != null && var1.W1()) {
var2 = true;
} else {
var2 = false;
}
return var2;
}
public boolean n() {
int var1 = this.b.a;
return var1 == 52 || var1 == 53 || var1 == 56 || var1 == 57 || var1 == 70 || var1 == 77 || var1 == 85 || var1 == 94 || var1 == 95;
}
public boolean o() {
AdapterEntry var1 = this.b;
boolean var2;
if (var1 != null && var1.a == 101) {
var2 = true;
} else {
var2 = false;
}
return var2;
}
public boolean p() {
Msg var1 = this.b.c;
boolean var2;
if (var1 != null && var1.G1()) {
var2 = true;
} else {
var2 = false;
}
return var2;
}
public boolean q() {
AdapterEntry var1 = this.b;
boolean var3;
if (var1 != null) {
int var2 = var1.a;
if (var2 == 59 || var2 == 58 || var2 == 61 || var2 == 60) {
var3 = true;
return var3;
}
}
var3 = false;
return var3;
}
public boolean r() {
Msg var1 = this.b.c;
boolean var2;
if (var1 instanceof MsgFromUser && ((MsgFromUser)var1).e2()) {
var2 = true;
} else {
var2 = false;
}
return var2;
}
public boolean s() {
if(this.C != null)
switch (this.C)
{
case LOCAL_ID:
return this.D == this.b.c.getLocalId();
case VK_ID:
return this.D == this.b.c.C1();
default:
return false;
}
return false;
}
public boolean t() {
AdapterEntry var1 = this.b;
boolean var2;
if (var1 != null) {
Msg var3 = var1.c;
if (var3 != null && !var3.b(this.g)) {
var2 = true;
return var2;
}
}
var2 = false;
return var2;
}
public boolean u() {
Msg var1 = this.b.c;
if (var1 != null) {
return var1.b(this.g);
} else {
throw new RuntimeException();
}
}
public boolean v() {
IntSet var1 = this.r;
boolean var2;
if (var1 != null && var1.a(this.b.c.getLocalId())) {
var2 = true;
} else {
var2 = false;
}
return var2;
}
public boolean w() {
return this.z() ^ true;
}
public boolean x() {
AdapterEntry var1 = this.c;
boolean var2;
if (var1 != null && var1.a == 100) {
var2 = true;
} else {
var2 = false;
}
return var2;
}
public boolean y() {
AdapterEntry var1 = this.c;
boolean var2;
if (var1 != null && var1.a == 96) {
var2 = true;
} else {
var2 = false;
}
return var2;
}
public boolean z() {
AdapterEntry var1 = this.c;
boolean var2;
if (var1 != null && var1.c() && this.c.c.getLocalId() == this.b.c.getLocalId()) {
var2 = true;
} else {
var2 = false;
}
return var2;
}
public boolean isSelected() {
return this.b != null && this.b.c != null && this.r.a(this.b.c.getLocalId());
}
}
@@ -0,0 +1,48 @@
package com.vk.im.ui.components.viewcontrollers.msg_list.adapter.msgparts;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import com.vk.im.engine.models.attaches.Attach;
import com.vk.im.engine.models.dialogs.BubbleColors;
import com.vk.im.ui.components.viewcontrollers.msg_list.adapter.MsgPartHolderBase;
import com.vk.im.ui.components.viewcontrollers.msg_list.adapter.MsgPartHolderBindArgs;
import com.vk.im.ui.views.msg.MsgPartTextView;
import com.vk.im.ui.views.msg.WithTime;
import com.vtosters.lite.R;
public class MsgPartTextHolder extends MsgPartHolderBase<Attach> {
private FrameLayout mContainer;
private MsgPartTextView mTextPart;
@Override
protected View b(LayoutInflater inflater, ViewGroup parent) {
mTextPart = (MsgPartTextView) inflater.inflate(R.layout.vkim_msg_part_text, parent, false);
mTextPart.setOnClickListener(view -> {
MsgPartTextHolder.this.f.a(MsgPartTextHolder.this.g.getLocalId());
});
mTextPart.setOnLongClickListener(view -> {
if(!mTextPart.isTextSelectable()) MsgPartTextHolder.this.f.b(MsgPartTextHolder.this.g.getLocalId());
return false;
});
return mTextPart;
}
@Override
protected void b(BubbleColors colors) {
mTextPart.setTimeTextColor(colors.h);
mTextPart.setLinkTextColor(colors.d);
mTextPart.setTextColor(colors.f);
}
@Override
protected void b(MsgPartHolderBindArgs bindArgs) {
mTextPart.setOnSpanClickListener(bindArgs.F);
mTextPart.setOnSpanLongPressListener(bindArgs.G);
mTextPart.setText(bindArgs.c);
mTextPart.setTextIsSelectable(bindArgs.isSelected);
a(bindArgs, (WithTime) mTextPart);
}
}