add tgs stickers preview in settings

This commit is contained in:
Vologhat
2022-12-30 17:32:14 +03:00
parent a6c4c376c3
commit f17c57bac2
8 changed files with 228 additions and 921 deletions
@@ -0,0 +1,179 @@
package com.vk.stickers.details;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.vk.core.ui.themes.VKThemeHelper;
import com.vk.core.util.Screen;
import com.vk.dto.stickers.StickerItem;
import com.vk.dto.stickers.StickerStockItem;
import com.vk.extensions.ViewExtKt;
import com.vk.imageloader.view.VKImageView;
import com.vk.stickers.views.VKStickerImageView;
import com.vtosters.lite.R;
import java.util.List;
public final class StickerDetailsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private final List<StickerItem> mItems;
private final StickerStockItem mItem;
private boolean mIsTelegramPack = false;
public StickerDetailsAdapter(StickerStockItem stickerStockItem) {
this.mItem = stickerStockItem;
this.mItems = this.mItem.T1();
}
public void setTelegramPack(boolean state) {
mIsTelegramPack = state;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
switch (i) {
case 0:
return new c(viewGroup);
case 1:
return new d(viewGroup);
case 2:
return new b(viewGroup);
default:
throw new IllegalArgumentException("Unknown viewType: " + i);
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
switch(getItemViewType(i)) {
case 0:
((c) viewHolder).a(this.mItem);
break;
case 1:
((d) viewHolder).a(this.mItems.get(H(i)));
break;
}
}
@Override
public int getItemCount() {
return mIsTelegramPack ? mItems.size() : this.mItems.size() + 2;
}
@Override
public int getItemViewType(int i) {
if (mIsTelegramPack) return 1;
if (i == 0) {
return 0;
}
return i == k() ? 2 : 1;
}
public int H(int i) {
return mIsTelegramPack ? i : i - j();
}
public boolean I(int i) {
return getItemViewType(i) == 1;
}
public int j() {
return 1;
}
public int k() {
return l() + 1;
}
public int l() {
return (this.mItems.size() + j()) - 1;
}
public int m() {
return 0;
}
public List<StickerItem> n() {
return this.mItems;
}
public boolean v() {
return false;
}
private static final class b extends RecyclerView.ViewHolder {
public b(ViewGroup viewGroup) {
super(ViewExtKt.a(viewGroup, R.layout.sticker_details_hold_to_view_item, false));
}
}
private final class c extends RecyclerView.ViewHolder {
private final VKImageView mImageBg;
private final VKImageView mPackImage;
private final ImageView mAnimPack;
private final TextView mPackTitle;
private final TextView mPackAuthor;
private final TextView mPackSubtitle;
private final TextView mDescription;
public c(ViewGroup viewGroup) {
super(LayoutInflater.from(VKThemeHelper.u()).inflate(R.layout.sticker_details_info_item, viewGroup, false));
this.mImageBg = this.itemView.findViewById(R.id.pack_image_bg);
this.mPackImage = this.itemView.findViewById(R.id.pack_image);
this.mAnimPack = this.itemView.findViewById(R.id.anim_pack);
this.mPackTitle = this.itemView.findViewById(R.id.pack_title);
this.mPackAuthor = this.itemView.findViewById(R.id.pack_author);
this.mPackSubtitle = this.itemView.findViewById(R.id.pack_subtitle);
this.mDescription = this.itemView.findViewById(R.id.description);
}
public void a(StickerStockItem stickerStockItem) {
this.mImageBg.a(stickerStockItem.R1());
this.mImageBg.getHierarchy().a().setVisible(true, true);
this.mImageBg.getHierarchy().a(0);
this.mImageBg.getHierarchy().e(new ColorDrawable(VKThemeHelper.d(R.attr.placeholder_icon_background)));
this.mPackImage.a(stickerStockItem.h(Screen.a(68)));
this.mPackImage.getHierarchy().a().setVisible(true, true);
this.mPackImage.getHierarchy().a(0);
if (stickerStockItem.E1()) {
ViewExtKt.r(this.mAnimPack);
} else {
ViewExtKt.p(this.mAnimPack);
}
this.mPackTitle.setText(stickerStockItem.getTitle());
this.mPackAuthor.setText(stickerStockItem.v1());
ViewExtKt.p(this.mPackSubtitle);
this.mDescription.setText(stickerStockItem.C1());
}
}
private static final class d extends RecyclerView.ViewHolder {
private final VKStickerImageView mImage;
public d(ViewGroup viewGroup) {
super(new VKStickerImageView(viewGroup.getContext()));
this.mImage = (VKStickerImageView) itemView;
this.mImage.setAspectRatio(1.0f);
this.mImage.setClickable(true);
this.mImage.getHierarchy().a().setVisible(true, true);
this.mImage.getHierarchy().a(0);
this.mImage.setContentDescription(this.mImage.getContext().getString(R.string.stickers_accessibility_sticker));
}
public void a(StickerItem stickerItem) {
this.mImage.a(stickerItem.h(Screen.a(80)));
this.mImage.setTag(R.id.id, stickerItem.getId());
}
}
}
@@ -1,10 +1,7 @@
package ru.vtosters.lite.tgs;
import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import com.aefyr.tsg.g2.TelegramStickersPack;
import com.aefyr.tsg.g2.TelegramStickersService;
import com.vk.dto.common.Attachment;
@@ -15,15 +12,15 @@ import com.vtosters.lite.R;
import com.vtosters.lite.attachments.PendingGraffitiAttachment;
import com.vtosters.lite.im.AppAttachToImAttachConverter;
import com.vtosters.lite.upload.Upload;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import ru.vtosters.lite.utils.AndroidUtils;
import java.util.List;
import java.util.Stack;
import ru.vtosters.lite.utils.AndroidUtils;
import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext;
public class TGRoot {
public static final int N = 76820000;
@@ -101,7 +98,7 @@ public class TGRoot {
}
}
private static StickerStockItem toStickerPack(TelegramStickersPack p) throws JSONException {
public static StickerStockItem toStickerPack(TelegramStickersPack p) throws JSONException {
JSONArray arr = new JSONArray();
for (int j = 0; j < p.stickersCount; j++)
@@ -13,11 +13,23 @@ import androidx.appcompat.widget.SwitchCompat;
import androidx.recyclerview.widget.RecyclerView;
import com.aefyr.tsg.g2.TelegramStickersPack;
import com.aefyr.tsg.g2.TelegramStickersService;
import com.vk.core.dialogs.bottomsheet.ContentSnapStrategy1;
import com.vk.core.dialogs.bottomsheet.ModalBottomSheet;
import com.vk.core.util.ContextExtKt;
import com.vk.core.util.DrawableUtils;
import com.vk.sharing.Sharing;
import com.vk.stickers.LongtapRecyclerView;
import com.vk.stickers.bridge.GiftData;
import com.vk.stickers.details.StickerDetailsAdapter;
import com.vk.stickers.details.StickerDetailsView;
import com.vtosters.lite.R;
import org.json.JSONException;
import ru.vtosters.lite.tgs.TGPref;
import ru.vtosters.lite.tgs.TGRoot;
import ru.vtosters.lite.ui.components.IItemMovingListener;
import java.io.File;
import java.util.ArrayList;
import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext;
import static ru.vtosters.lite.utils.AndroidUtils.getResources;
@@ -103,10 +115,11 @@ public class StickerPackAdapter extends RecyclerView.Adapter<StickerPackAdapter.
final TelegramStickersPack pack = sService.getPacksListReference().get(position);
if (pack.state != TelegramStickersPack.DOWNLOADED) return;
File f = new File(pack.folder, "001.png");
var uri = Uri.parse("file://" + f.getAbsolutePath());
try {
File f = new File(pack.folder, "001.png");
if (f.exists()) {
mStickerPreview.setImageURI(Uri.parse("file://" + f.getAbsolutePath()));
mStickerPreview.setImageURI(uri);
}
} catch (Exception e) {
e.printStackTrace();
@@ -133,6 +146,37 @@ public class StickerPackAdapter extends RecyclerView.Adapter<StickerPackAdapter.
mName.setTextColor(color);
mStickersCount.setTextColor(secondary);
if (pack.state == TelegramStickersPack.DOWNLOADED)
mContainer.setOnClickListener(v -> {
try {
ViewGroup root = (ViewGroup) ContextExtKt.c(v.getContext()).inflate(R.layout.sticker_details_bottom_container, null);
StickerDetailsView stickersDetailsView = new StickerDetailsView(v.getContext());
stickersDetailsView.setLayoutParams(new ViewGroup.LayoutParams(-1, -1));
stickersDetailsView.a(TGRoot.toStickerPack(pack), new GiftData(new ArrayList<>(), false), root);
var recycler = (LongtapRecyclerView) stickersDetailsView.findViewById(R.id.recycler);
((StickerDetailsAdapter) recycler.getAdapter()).setTelegramPack(true);
var builder = new ModalBottomSheet.a(v.getContext());
builder.d(pack.title);
builder.d(stickersDetailsView);
builder.a(DrawableUtils.a(v.getContext(), R.drawable.share_outline_28, R.color.accent_blue));
builder.c(R.attr.content_tint_background);
builder.b(view -> {
Sharing.a(view.getContext(), "https://t.me/addstickers/" + pack.id);
return null;
});
builder.a(new ContentSnapStrategy1(false));
builder.a("stickers_preview");
} catch(JSONException e) {
throw new RuntimeException(e);
}
});
}
}
}