Browse Source

群组More,界面实现

huping 1 year ago
parent
commit
b64ad871d3
20 changed files with 699 additions and 54 deletions
  1. 63 0
      TMessagesProj/src/main/java/org/telegram/cricdit/adapter/MoreGroupAdapter.java
  2. 89 26
      TMessagesProj/src/main/java/org/telegram/cricdit/adapter/NewsGroupAdapter.java
  3. 7 0
      TMessagesProj/src/main/java/org/telegram/cricdit/bean/MoreGroupBean.java
  4. 31 0
      TMessagesProj/src/main/java/org/telegram/cricdit/mvp/MoreGroupPresenter.java
  5. 10 0
      TMessagesProj/src/main/java/org/telegram/cricdit/mvp/MoreGroupView.java
  6. 4 0
      TMessagesProj/src/main/java/org/telegram/cricdit/net/ApiService.java
  7. 63 0
      TMessagesProj/src/main/java/org/telegram/cricdit/ui/MoreGroupFragment.java
  8. 8 8
      TMessagesProj/src/main/java/org/telegram/cricdit/ui/NewsActivity.java
  9. 17 14
      TMessagesProj/src/main/java/org/telegram/cricdit/ui/NewsGroupFragment.java
  10. 147 0
      TMessagesProj/src/main/java/org/telegram/cricdit/utils/CornerTransform.java
  11. 90 0
      TMessagesProj/src/main/java/org/telegram/cricdit/view/TagTextView.java
  12. 8 0
      TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java
  13. 6 0
      TMessagesProj/src/main/res/drawable/bg_red_6.xml
  14. 6 0
      TMessagesProj/src/main/res/drawable/shape_more_group_bg.xml
  15. 7 6
      TMessagesProj/src/main/res/layout/activity_news2.xml
  16. 35 0
      TMessagesProj/src/main/res/layout/fragment_more_group.xml
  17. 85 0
      TMessagesProj/src/main/res/layout/item_more_group.xml
  18. 21 0
      TMessagesProj/src/main/res/layout/layout_tag_textview.xml
  19. 1 0
      TMessagesProj/src/main/res/values/colors.xml
  20. 1 0
      TMessagesProj/src/main/res/values/string-cricdit.xml

+ 63 - 0
TMessagesProj/src/main/java/org/telegram/cricdit/adapter/MoreGroupAdapter.java

@@ -0,0 +1,63 @@
+package org.telegram.cricdit.adapter;
+
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.ImageView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.resource.bitmap.CircleCrop;
+import com.bumptech.glide.request.RequestOptions;
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.BaseViewHolder;
+import com.luck.picture.lib.utils.DensityUtil;
+
+import org.telegram.cricdit.bean.MoreGroupBean;
+import org.telegram.cricdit.config.Constants;
+import org.telegram.cricdit.utils.AvatarImageUtils;
+import org.telegram.cricdit.utils.Base64Utils;
+import org.telegram.cricdit.utils.CornerTransform;
+import org.telegram.cricdit.utils.GlideUtils;
+import org.telegram.cricdit.view.TagTextView;
+import org.telegram.messenger.AndroidUtilities;
+import org.telegram.messenger.ChatObject;
+import org.telegram.messenger.MessagesController;
+import org.telegram.messenger.MessagesStorage;
+import org.telegram.messenger.R;
+import org.telegram.onecric.utils.GlideUtil;
+import org.telegram.tgnet.ConnectionsManager;
+import org.telegram.tgnet.TLObject;
+import org.telegram.tgnet.TLRPC;
+import org.telegram.ui.ChatActivity;
+import org.telegram.ui.Components.LayoutHelper;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class MoreGroupAdapter extends BaseQuickAdapter<MoreGroupBean, BaseViewHolder> {
+    private final List<String> tagList;
+
+    public MoreGroupAdapter(int layoutResId, @Nullable List<MoreGroupBean> data) {
+        super(layoutResId, data);
+        tagList = new ArrayList<>();
+        tagList.add("Hot");
+    }
+
+
+    @Override
+    protected void convert(@NonNull BaseViewHolder helper, MoreGroupBean item) {
+        ImageView avartarImg = helper.getView(R.id.more_group_item_avatar);
+        TagTextView titleTv = helper.getView(R.id.more_group_item_title);
+
+        titleTv.setTypeface(AndroidUtilities.getNormalTypefaceMedium());
+        titleTv.setContentAndTag("India Cricket India Cricket", tagList);
+
+        Glide.with(mContext)
+                .load(Base64Utils.base64ToBitmap(item.avatar))
+                .into(avartarImg);
+    }
+
+}

+ 89 - 26
TMessagesProj/src/main/java/org/telegram/cricdit/adapter/NewsGroupAdapter.java

@@ -26,6 +26,7 @@ import org.telegram.cricdit.net.RetrofitClient;
 import org.telegram.cricdit.utils.AvatarImageUtils;
 import org.telegram.cricdit.utils.Base64Utils;
 import org.telegram.cricdit.utils.ColorUtil;
+import org.telegram.cricdit.utils.ThreadPoolUtil;
 import org.telegram.cricdit.utils.TimeUtils;
 import org.telegram.cricdit.utils.ToastUtil;
 import org.telegram.messenger.AndroidUtilities;
@@ -37,6 +38,7 @@ import org.telegram.messenger.ImageLocation;
 import org.telegram.messenger.LocaleController;
 import org.telegram.messenger.MessagesController;
 import org.telegram.messenger.MessagesStorage;
+import org.telegram.messenger.NotificationCenter;
 import org.telegram.messenger.R;
 import org.telegram.messenger.UserConfig;
 import org.telegram.tgnet.ConnectionsManager;
@@ -110,39 +112,89 @@ public class NewsGroupAdapter extends RecyclerView.Adapter {
 
             }
         }
+        System.out.println("wqerqwerqwr    " + groupData.group_name  + "  :  " + groupData.group_image);
+//        if (!TextUtils.isEmpty(groupData.public_link)) {
+//            TLObject request;
+//
+//            TLRPC.TL_messages_getFullChat req2 = new TLRPC.TL_messages_getFullChat();
+//            req2.chat_id = Long.parseLong(groupData.group_id);
+//            request = req2;
+//            ConnectionsManager.getInstance(0).sendRequest(request, ((response, error) -> AndroidUtilities.runOnUIThread(() -> {
+//                if (error!=null) {
+//                    TLRPC.TL_messages_chatFull res2 = (TLRPC.TL_messages_chatFull) response;
+//
+////                    res2.full_chat
+//
+//                    if (res2.full_chat!=null) {
+//                        TLRPC.ChatFull chatFull =res2.full_chat;
+//                        System.out.println("qwerqwer   " + chatFull.about + "  :  " + chatFull.participants_count);
+//                    }
+//
+//
+//                }
+//
+//            })));
+//        }
 
 //        TLObject req;
 //        if (!TextUtils.isEmpty(groupData.public_link)) {
-//            TLRPC.Chat chatStor = MessagesController.getInstance(0).getChat(Long.parseLong(groupData.group_id));
-//            if (chatStor == null) {
-//                String publickLink = "";
-//                if (groupData.public_link.startsWith(Constants.TEL_NORMAL_URL_PREFIX)) {
-//                    publickLink = groupData.public_link.split(Constants.TEL_NORMAL_URL_PREFIX)[1];
-//                } else {
-//                    publickLink = groupData.public_link;
-//                }
+////            TLRPC.Chat chatStor = MessagesController.getInstance(0).getChat(Long.parseLong(groupData.group_id));
+////            if (chatStor == null) {
+//            String publickLink = "";
+//            if (groupData.public_link.startsWith(Constants.TEL_NORMAL_URL_PREFIX)) {
+//                publickLink = groupData.public_link.split(Constants.TEL_NORMAL_URL_PREFIX)[1];
+//            } else {
+//                publickLink = groupData.public_link;
+//            }
 //
-//                TLRPC.TL_contacts_resolveUsername resolveUsername = new TLRPC.TL_contacts_resolveUsername();
-//                resolveUsername.username = publickLink;
-//                req = resolveUsername;
+//            TLRPC.TL_contacts_resolveUsername resolveUsername = new TLRPC.TL_contacts_resolveUsername();
+//            resolveUsername.username = publickLink;
+//            req = resolveUsername;
 //
-//                ConnectionsManager.getInstance(0).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
-//                    TLRPC.TL_contacts_resolvedPeer res = (TLRPC.TL_contacts_resolvedPeer) response;
-//                    if (error == null && res != null && res.users != null) {
-//                        MessagesController.getInstance(0).putUsers(res.users, false);
-//                        MessagesController.getInstance(0).putChats(res.chats, false);
-//                        MessagesStorage.getInstance(0).putUsersAndChats(res.users, res.chats, false, true);
+//            ConnectionsManager.getInstance(0).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
+//                TLRPC.TL_contacts_resolvedPeer res = (TLRPC.TL_contacts_resolvedPeer) response;
+//                if (error == null && res != null && res.chats != null) {
+//                    MessagesController.getInstance(0).putUsers(res.users, false);
+//                    MessagesController.getInstance(0).putChats(res.chats, false);
+//                    MessagesStorage.getInstance(0).putUsersAndChats(res.users, res.chats, false, true);
+////
+//                    TLRPC.Chat chat = res.chats.get(0);
 //
-//                        TLRPC.Chat chat = res.chats.get(0);
-//                        if (chat != null) {
-//                            viewHolder.avatar.addView(AvatarImageUtils.loadAvatarImg(chat, mContext), LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
-//                        }
+//                    TLObject request;
+//                    if (ChatObject.isChannel(chat)) {
+//                        TLRPC.TL_channels_getFullChannel req2 = new TLRPC.TL_channels_getFullChannel();
+//                        req2.channel = getInputChannel(chat);
+//                        request = req2;
+//                    } else {
+//                        TLRPC.TL_messages_getFullChat req2 = new TLRPC.TL_messages_getFullChat();
+//                        req2.chat_id = chat.id;
+//                        request = req2;
 //                    }
-//                }));
+//
+//                    ConnectionsManager.getInstance(0).sendRequest(request, (response2, error2) -> {
+//                        if (error2 == null) {
+//                            TLRPC.TL_messages_chatFull res2 = (TLRPC.TL_messages_chatFull) response2;
+//
+//
+//                            MessagesStorage.getInstance(0).putUsersAndChats(res2.users, res2.chats, true, true);
+//                            MessagesStorage.getInstance(0).updateChatInfo(res2.full_chat, false);
+//
+//                            TLRPC.ChatFull chatFull =res2.full_chat;
+//                            if (chatFull != null) {
+//                                System.out.println("qwerqwer   " + chat.title + "  :  " + chatFull.participants_count);
+//                            } else {
+//                                System.out.println("qwerqwer   ");
+//                            }
+//                        }
+//                    });
+//                }
+//            }));
+
 //            } else {
 //                viewHolder.avatar.addView(AvatarImageUtils.loadAvatarImg(chatStor, mContext), LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
 //            }
-//        } else {
+//        }
+//        else {
 //            if (!TextUtils.isEmpty(groupData.private_link)) {
 //                System.out.println("wqerqwerq   " + groupData.private_link);
 //                TLRPC.Chat chatStor = MessagesController.getInstance(0).getChat(Long.parseLong(groupData.group_id));
@@ -294,8 +346,6 @@ public class NewsGroupAdapter extends RecyclerView.Adapter {
                     group = null;
                 }
             }
-            final int[] requestId = new int[]{0};
-            final int[] intentAccount = new int[]{UserConfig.selectedAccount};
             if (TextUtils.isEmpty(group)) {
                 if (gName != null) {
                     TLObject req;
@@ -309,7 +359,7 @@ public class NewsGroupAdapter extends RecyclerView.Adapter {
                         req = resolveUsername;
                     }
 
-                    requestId[0] = ConnectionsManager.getInstance(intentAccount[0]).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
+                    ConnectionsManager.getInstance(0).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
                         if (alertDialog != null) {
                             alertDialog.dismiss();
                         }
@@ -406,4 +456,17 @@ public class NewsGroupAdapter extends RecyclerView.Adapter {
         }, 1000);
 
     }
+
+
+    public static TLRPC.InputChannel getInputChannel(TLRPC.Chat chat) {
+        if (chat instanceof TLRPC.TL_channel || chat instanceof TLRPC.TL_channelForbidden) {
+            TLRPC.InputChannel inputChat = new TLRPC.TL_inputChannel();
+            inputChat.channel_id = chat.id;
+            inputChat.access_hash = chat.access_hash;
+            return inputChat;
+        } else {
+            return new TLRPC.TL_inputChannelEmpty();
+        }
+    }
+
 }

+ 7 - 0
TMessagesProj/src/main/java/org/telegram/cricdit/bean/MoreGroupBean.java

@@ -0,0 +1,7 @@
+package org.telegram.cricdit.bean;
+
+public class MoreGroupBean {
+
+    public String avatar;
+
+}

+ 31 - 0
TMessagesProj/src/main/java/org/telegram/cricdit/mvp/MoreGroupPresenter.java

@@ -0,0 +1,31 @@
+package org.telegram.cricdit.mvp;
+
+
+import org.telegram.cricdit.base.BaseObserver;
+import org.telegram.cricdit.base.BasePresenter;
+import org.telegram.cricdit.bean.NewsGroupBean;
+import org.telegram.cricdit.net.ApiService;
+import org.telegram.cricdit.net.Parameter;
+
+public class MoreGroupPresenter extends BasePresenter<MoreGroupView> {
+
+    public void getMoreGroupData() {
+        Parameter parameter = new Parameter();
+        addSubscribe(create(ApiService.class).getMoreGroup(parameter.buildJsonBody()), new BaseObserver<NewsGroupBean>() {
+            @Override
+            protected void onSuccess(NewsGroupBean data) {
+                if (data != null && getView() != null) {
+                    getView().showList(data);
+                }
+            }
+
+            @Override
+            public void onError(Throwable e) {
+                if (getView() != null) {
+                    getView().showError(e);
+                }
+                super.onError(e);
+            }
+        });
+    }
+}

+ 10 - 0
TMessagesProj/src/main/java/org/telegram/cricdit/mvp/MoreGroupView.java

@@ -0,0 +1,10 @@
+package org.telegram.cricdit.mvp;
+
+
+import org.telegram.cricdit.base.IView;
+import org.telegram.cricdit.bean.NewsGroupBean;
+
+public interface MoreGroupView extends IView {
+    void showList(NewsGroupBean bean);
+    void showError(Throwable e);
+}

+ 4 - 0
TMessagesProj/src/main/java/org/telegram/cricdit/net/ApiService.java

@@ -4,6 +4,7 @@ import org.telegram.cricdit.base.BaseResponse;
 import org.telegram.cricdit.bean.ChildCommendListBean;
 import org.telegram.cricdit.bean.GroupInfoBean;
 import org.telegram.cricdit.bean.MainCommendListBean;
+import org.telegram.cricdit.bean.MoreGroupBean;
 import org.telegram.cricdit.bean.NewsBean;
 import org.telegram.cricdit.bean.NewsGroupBean;
 import org.telegram.cricdit.bean.NewsSearchBean;
@@ -78,6 +79,9 @@ public interface ApiService {
     @POST(Constants.APP_AUTH_URL + "/demo/home_group")
     Observable<BaseResponse<NewsGroupBean>> getHomeData(@Body RequestBody requestBody);
 
+    @POST(Constants.APP_AUTH_URL + "/demo/home_group")
+    Observable<BaseResponse<MoreGroupBean>> getMoreGroup(@Body RequestBody requestBody);
+
     //News搜索
     @POST(Constants.APP_AUTH_URL + "/feed/search")
     Observable<BaseResponse<NewsSearchWordBean>> searchWordNewsList(@Body RequestBody requestBody);

File diff suppressed because it is too large
+ 63 - 0
TMessagesProj/src/main/java/org/telegram/cricdit/ui/MoreGroupFragment.java


+ 8 - 8
TMessagesProj/src/main/java/org/telegram/cricdit/ui/NewsActivity.java

@@ -76,6 +76,7 @@ public class NewsActivity extends BaseTabActivity<NewsPresenter> {
         tabTitles.add(getContext().getString(R.string.news_tab1));
         tabTitles.add(getContext().getString(R.string.news_tab2));
         tabTitles.add(getContext().getString(R.string.news_tab3));
+//        tabTitles.add(getContext().getString(R.string.news_tab4));
         for (String title : tabTitles) {
             tabLayout.addTab(tabLayout.newTab().setText(title));
         }
@@ -87,20 +88,13 @@ public class NewsActivity extends BaseTabActivity<NewsPresenter> {
         bundle.putString("news_type", "news");
         frameLayouts.add(new NewsFragment(this, bundle));
         frameLayouts.add(new NewsGroupFragment(this));
+//        frameLayouts.add(new MoreGroupFragment(this));
         NewsViewPagerAdapter adapter = new NewsViewPagerAdapter(frameLayouts, tabTitles);
         mViewPager.setAdapter(adapter);
 
         mViewPager.setOffscreenPageLimit(3);
         mViewPager.setCurrentItem(1);
 
-//        mViewPager.addOnPageChangeListener(new MyOnPageChangeListener() {
-//            @Override
-//            public void onPageSelected(int position) {
-//                //TODO  如果有数据了,则不去加载数据,让用户手动刷新
-//
-//            }
-//        });
-
         updateTabView(tabLayout.getTabAt(1), true);
         tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
             @Override
@@ -111,6 +105,12 @@ public class NewsActivity extends BaseTabActivity<NewsPresenter> {
                 mIvSearch.setVisibility(tabPosition == 2 ? View.GONE : View.VISIBLE);
                 mIvPost.setVisibility(tabPosition == 0 ? View.VISIBLE : View.GONE);
                 mGroupSearch.setVisibility(tabPosition == 2 ? View.VISIBLE : View.GONE);
+
+//                if (tabPosition == 3) {
+//                    mIvSearch.setVisibility(View.GONE );
+//                    mIvPost.setVisibility(View.GONE );
+//                    mGroupSearch.setVisibility(View.GONE );
+//                }
                 updateTabView(tab, true);
             }
 

+ 17 - 14
TMessagesProj/src/main/java/org/telegram/cricdit/ui/NewsGroupFragment.java

@@ -31,7 +31,7 @@ import org.telegram.ui.LoginActivity;
 import java.util.ArrayList;
 import java.util.List;
 
-public class NewsGroupFragment implements BaseViewFragment,NewsGroupView {
+public class NewsGroupFragment implements BaseViewFragment, NewsGroupView {
     private SmartRefreshLayout srfl;
     private NestedScrollView nested_scrollview;
     private RelativeLayout rl_create;
@@ -44,23 +44,23 @@ public class NewsGroupFragment implements BaseViewFragment,NewsGroupView {
     private RecyclerView fastest_recyclerView;
     private RecyclerView popular_recyclerView;
     private RecyclerView financial_recyclerView;
-    private NewsGroupAdapter fastestAdapter,mostPopularAdapter,financialAdapter;
+    private NewsGroupAdapter fastestAdapter, mostPopularAdapter, financialAdapter;
     private BaseFragment mFragment;
     private Context mContext;
     public View view;
     private NewsGroupPresenter presenter;
 
 
-    public NewsGroupFragment(BaseFragment fragment){
+    public NewsGroupFragment(BaseFragment fragment) {
         this.mFragment = fragment;
         mContext = fragment.getContext();
         presenter = new NewsGroupPresenter();
         presenter.attachView(this);
-        view = View.inflate(mContext, R.layout.fragment_news_group,null);
+        view = View.inflate(mContext, R.layout.fragment_news_group, null);
         initView(view);
     }
 
-    private void initView(View view){
+    private void initView(View view) {
         srfl = view.findViewById(R.id.srfl);
         nested_scrollview = view.findViewById(R.id.nested_scrollview);
         rl_create = view.findViewById(R.id.rl_create);
@@ -74,7 +74,7 @@ public class NewsGroupFragment implements BaseViewFragment,NewsGroupView {
         financial_recyclerView = view.findViewById(R.id.financial_recyclerView);
         statusView = view.findViewById(R.id.status_view);
 
-        GradientDrawable gd = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, new int[]{ColorUtil.COLOR_GRAY,ColorUtil.COLOR_GRAY});
+        GradientDrawable gd = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, new int[]{ColorUtil.COLOR_GRAY, ColorUtil.COLOR_GRAY});
         gd.setShape(GradientDrawable.RECTANGLE);
         gd.setCornerRadius(UIUtil.dip2px(mContext, 5));
         rl_create.setBackground(gd);
@@ -90,7 +90,7 @@ public class NewsGroupFragment implements BaseViewFragment,NewsGroupView {
         initData();
     }
 
-    private void initListener(){
+    private void initListener() {
         nested_scrollview.setOverScrollMode(View.OVER_SCROLL_NEVER);
         srfl.setOverScrollMode(View.OVER_SCROLL_NEVER);
         srfl.setEnableLoadMore(false);
@@ -99,15 +99,18 @@ public class NewsGroupFragment implements BaseViewFragment,NewsGroupView {
             presenter.getHomeData();
         });
 
-        fastestAdapter = new NewsGroupAdapter(mFragment, new ArrayList(){});
+        fastestAdapter = new NewsGroupAdapter(mFragment, new ArrayList() {
+        });
         fastest_recyclerView.setAdapter(fastestAdapter);
         fastest_recyclerView.setLayoutManager(new LinearLayoutManager(mContext));
 
-        mostPopularAdapter = new NewsGroupAdapter(mFragment, new ArrayList(){});
+        mostPopularAdapter = new NewsGroupAdapter(mFragment, new ArrayList() {
+        });
         popular_recyclerView.setAdapter(mostPopularAdapter);
         popular_recyclerView.setLayoutManager(new LinearLayoutManager(mContext));
 
-        financialAdapter = new NewsGroupAdapter(mFragment, new ArrayList(){});
+        financialAdapter = new NewsGroupAdapter(mFragment, new ArrayList() {
+        });
         financial_recyclerView.setAdapter(financialAdapter);
         financial_recyclerView.setLayoutManager(new LinearLayoutManager(mContext));
 
@@ -122,7 +125,7 @@ public class NewsGroupFragment implements BaseViewFragment,NewsGroupView {
 
     }
 
-    private void initData(){
+    private void initData() {
         presenter.getHomeData();
     }
 
@@ -131,10 +134,10 @@ public class NewsGroupFragment implements BaseViewFragment,NewsGroupView {
         srfl.setVisibility(View.VISIBLE);
         statusView.showContent();
         srfl.finishRefresh();
-        if(bean == null){
+        if (bean == null) {
             srfl.setVisibility(View.GONE);
             statusView.showEmpty();
-        }else{
+        } else {
             fastestAdapter.setData(bean.fastest_rising);
             mostPopularAdapter.setData(bean.most_popular);
             financialAdapter.setData(bean.credit_ranking);
@@ -147,7 +150,7 @@ public class NewsGroupFragment implements BaseViewFragment,NewsGroupView {
         srfl.setVisibility(View.GONE);
         if (!(e instanceof ApiException)) {
             statusView.showNoNetwork(LocaleController.getString(R.string.network_failed));
-        }else{
+        } else {
             statusView.showError(e.getMessage());
         }
     }

+ 147 - 0
TMessagesProj/src/main/java/org/telegram/cricdit/utils/CornerTransform.java

@@ -0,0 +1,147 @@
+package org.telegram.cricdit.utils;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapShader;
+import android.graphics.Canvas;
+import android.graphics.Matrix;
+import android.graphics.Paint;
+import android.graphics.RectF;
+import android.graphics.Shader;
+
+import androidx.annotation.NonNull;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.Transformation;
+import com.bumptech.glide.load.engine.Resource;
+import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
+import com.bumptech.glide.load.resource.bitmap.BitmapResource;
+
+import java.security.MessageDigest;
+
+public class CornerTransform implements Transformation<Bitmap> {
+
+    private BitmapPool mBitmapPool;
+
+    private float radius;
+
+    private boolean isLeftTop, isRightTop, isLeftBottom, isRightBotoom;
+
+    /**
+     * 需要设置圆角的部分
+     *
+     * @param leftTop     左上角
+     * @param rightTop    右上角
+     * @param leftBottom  左下角
+     * @param rightBottom 右下角
+     */
+    public void setNeedCorner(boolean leftTop, boolean rightTop, boolean leftBottom, boolean rightBottom) {
+        isLeftTop = leftTop;
+        isRightTop = rightTop;
+        isLeftBottom = leftBottom;
+        isRightBotoom = rightBottom;
+    }
+
+    /**
+     * @param context 上下文
+     * @param radius  圆角幅度
+     */
+    public CornerTransform(Context context, float radius) {
+        this.mBitmapPool = Glide.get(context).getBitmapPool();
+        this.radius = radius;
+    }
+
+    @NonNull
+    @Override
+    public Resource<Bitmap> transform(@NonNull Context context, @NonNull Resource<Bitmap> resource, int outWidth, int outHeight) {
+
+        Bitmap source = resource.get();
+        int finalWidth, finalHeight;
+        //输出目标的宽高或高宽比例
+        float scale;
+        if (outWidth > outHeight) {
+            //如果 输出宽度 > 输出高度 求高宽比
+
+            scale = (float) outHeight / (float) outWidth;
+            finalWidth = source.getWidth();
+            //固定原图宽度,求最终高度
+            finalHeight = (int) ((float) source.getWidth() * scale);
+            if (finalHeight > source.getHeight()) {
+                //如果 求出的最终高度 > 原图高度 求宽高比
+
+                scale = (float) outWidth / (float) outHeight;
+                finalHeight = source.getHeight();
+                //固定原图高度,求最终宽度
+                finalWidth = (int) ((float) source.getHeight() * scale);
+            }
+        } else if (outWidth < outHeight) {
+            //如果 输出宽度 < 输出高度 求宽高比
+
+            scale = (float) outWidth / (float) outHeight;
+            finalHeight = source.getHeight();
+            //固定原图高度,求最终宽度
+            finalWidth = (int) ((float) source.getHeight() * scale);
+            if (finalWidth > source.getWidth()) {
+                //如果 求出的最终宽度 > 原图宽度 求高宽比
+
+                scale = (float) outHeight / (float) outWidth;
+                finalWidth = source.getWidth();
+                finalHeight = (int) ((float) source.getWidth() * scale);
+            }
+        } else {
+            //如果 输出宽度=输出高度
+            finalHeight = source.getHeight();
+            finalWidth = finalHeight;
+        }
+
+        //修正圆角
+        this.radius *= (float) finalHeight / (float) outHeight;
+        Bitmap outBitmap = this.mBitmapPool.get(finalWidth, finalHeight, Bitmap.Config.ARGB_8888);
+        if (outBitmap == null) {
+            outBitmap = Bitmap.createBitmap(finalWidth, finalHeight, Bitmap.Config.ARGB_8888);
+        }
+
+        Canvas canvas = new Canvas(outBitmap);
+        Paint paint = new Paint();
+        //关联画笔绘制的原图bitmap
+        BitmapShader shader = new BitmapShader(source, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
+        //计算中心位置,进行偏移
+        int width = (source.getWidth() - finalWidth) / 2;
+        int height = (source.getHeight() - finalHeight) / 2;
+        if (width != 0 || height != 0) {
+            Matrix matrix = new Matrix();
+            matrix.setTranslate((float) (-width), (float) (-height));
+            shader.setLocalMatrix(matrix);
+        }
+
+        paint.setShader(shader);
+        paint.setAntiAlias(true);
+        RectF rectF = new RectF(0.0F, 0.0F, (float) canvas.getWidth(), (float) canvas.getHeight());
+        //先绘制圆角矩形
+        canvas.drawRoundRect(rectF, this.radius, this.radius, paint);
+
+        //左上角圆角
+        if (!isLeftTop) {
+            canvas.drawRect(0, 0, radius, radius, paint);
+        }
+        //右上角圆角
+        if (!isRightTop) {
+            canvas.drawRect(canvas.getWidth() - radius, 0, canvas.getWidth(), radius, paint);
+        }
+        //左下角圆角
+        if (!isLeftBottom) {
+            canvas.drawRect(0, canvas.getHeight() - radius, radius, canvas.getHeight(), paint);
+        }
+        //右下角圆角
+        if (!isRightBotoom) {
+            canvas.drawRect(canvas.getWidth() - radius, canvas.getHeight() - radius, canvas.getWidth(), canvas.getHeight(), paint);
+        }
+
+        return BitmapResource.obtain(outBitmap, this.mBitmapPool);
+    }
+
+
+    @Override
+    public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) {
+    }
+}

+ 90 - 0
TMessagesProj/src/main/java/org/telegram/cricdit/view/TagTextView.java

@@ -0,0 +1,90 @@
+package org.telegram.cricdit.view;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.text.Spannable;
+import android.text.SpannableString;
+import android.text.style.ImageSpan;
+import android.util.AttributeSet;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.TextView;
+
+import androidx.appcompat.widget.AppCompatTextView;
+
+import org.telegram.messenger.R;
+
+import java.util.List;
+
+public class TagTextView extends AppCompatTextView {
+    private StringBuffer content_buffer;
+
+    private TextView tv_tag;
+
+    private View view;//标签布局的最外层布局
+
+    private Context mContext;
+
+    //必须重写所有的构造器,否则可能会出现无法inflate布局的错误!
+    public TagTextView(Context context) {
+        super(context);
+        mContext = context;
+    }
+
+    public TagTextView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        mContext = context;
+    }
+
+    public TagTextView(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        mContext = context;
+    }
+
+    public void setContentAndTag(String content, List<String> tags) {
+        content_buffer = new StringBuffer();
+        for (String item : tags) {//将每个tag的内容添加到content后边,之后将用drawable替代这些tag所占的位置
+            content_buffer.append(item);
+        }
+        content_buffer.append(content);
+        SpannableString spannableString = new SpannableString(content_buffer);
+        for (int i = 0; i < tags.size(); i++) {
+            String item = tags.get(i);
+            View view = LayoutInflater.from(mContext).inflate(R.layout.layout_tag_textview, null);//R.layout.tag是每个标签的布局
+            tv_tag = view.findViewById(R.id.tv_tag);
+            tv_tag.setText(item);
+            Bitmap bitmap = convertViewToBitmap(view);
+            Drawable d = new BitmapDrawable(bitmap);
+            d.setBounds(0, 0, tv_tag.getWidth(), tv_tag.getHeight());//缺少这句的话,不会报错,但是图片不回显示
+            ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BOTTOM);//图片将对齐底部边线
+            int startIndex;
+            int endIndex;
+            startIndex = getLastLength(tags, i);
+            endIndex = startIndex + item.length();
+//            Log.e("tag", "the start is" + startIndex + "the end is" + endIndex);
+            spannableString.setSpan(span, startIndex, endIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+        }
+        setText(spannableString);
+        setGravity(Gravity.CENTER_VERTICAL);
+    }
+
+    private static Bitmap convertViewToBitmap(View view) {
+        view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
+        view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
+        view.buildDrawingCache();
+        Bitmap bitmap = view.getDrawingCache();
+        return bitmap;
+
+    }
+
+    private int getLastLength(List<String> list, int maxLength) {
+        int length = 0;
+        for (int i = 0; i < maxLength; i++) {
+            length += list.get(i).length();
+        }
+        return length;
+    }
+}

+ 8 - 0
TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java

@@ -9934,6 +9934,14 @@ public class MessagesController extends BaseController implements NotificationCe
                     return;
                 }
                 TLRPC.Updates updates = (TLRPC.Updates) response;
+
+                //TODO 同步
+                if (updates instanceof TLRPC.TL_updates) {
+                    if (updates.chats != null && updates.chats.size() > 0) {
+                        syncGroupDataToCricdit(updates);
+                    }
+                }
+
                 processUpdates(updates, false);
                 AndroidUtilities.runOnUIThread(() -> {
                     putUsers(updates.users, false);

+ 6 - 0
TMessagesProj/src/main/res/drawable/bg_red_6.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <solid android:color="#FF0813" />
+    <corners android:radius="3dp" />
+</shape>

+ 6 - 0
TMessagesProj/src/main/res/drawable/shape_more_group_bg.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <corners android:radius="6dp" />
+    <solid android:color="@color/colorWhite"/>
+</shape>

+ 7 - 6
TMessagesProj/src/main/res/layout/activity_news2.xml

@@ -38,8 +38,8 @@
                 <ImageView
                     android:id="@+id/news_post"
                     android:layout_width="40dp"
-                    android:padding="6dp"
-                    android:layout_marginEnd="10dp"
+                    android:padding="7dp"
+                    android:layout_marginEnd="9dp"
                     android:layout_height="40dp"
                     android:layout_gravity="end"
                     android:src="@drawable/msg_add" />
@@ -49,16 +49,16 @@
                     android:id="@+id/news_search"
                     android:layout_width="40dp"
                     android:layout_height="40dp"
-                    android:padding="6dp"
-                    android:layout_marginEnd="10dp"
+                    android:padding="7dp"
+                    android:layout_marginEnd="9dp"
                     android:layout_gravity="end"
                     android:src="@drawable/ic_ab_search" />
 
                 <ImageView
                     android:id="@+id/news_group_search"
                     android:layout_width="40dp"
-                    android:padding="6dp"
-                    android:layout_marginEnd="10dp"
+                    android:padding="7dp"
+                    android:layout_marginEnd="9dp"
                     android:layout_height="40dp"
                     android:layout_gravity="end"
                     android:src="@drawable/ic_ab_search" />
@@ -82,6 +82,7 @@
                 app:tabIndicatorColor="#fff"
                 app:tabIndicatorFullWidth="false"
                 app:tabIndicatorHeight="3dp"
+                app:tabMode="auto"
                 app:tabRippleColor="@android:color/transparent"
                 app:tabTextAppearance="@style/TabLayoutTextStyle"
                 app:tabTextColor="#fff"/>

+ 35 - 0
TMessagesProj/src/main/res/layout/fragment_more_group.xml

@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/colorNormalBg2"
+    android:orientation="vertical">
+
+    <com.scwang.smart.refresh.layout.SmartRefreshLayout
+        android:id="@+id/more_group_refresh_layout"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <include layout="@layout/base_head_refresh" />
+
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/more_group_recycler_view"
+            android:layout_width="match_parent"
+            android:layout_marginEnd="12dp"
+            android:layout_height="match_parent"
+            android:overScrollMode="never" />
+
+        <include layout="@layout/base_head_loadmore" />
+
+    </com.scwang.smart.refresh.layout.SmartRefreshLayout>
+
+    <com.classic.common.MultipleStatusView
+        android:id="@+id/more_group_status_view"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        app:emptyView="@layout/layout_no_data"
+        app:errorView="@layout/layout_no_data"
+        app:noNetworkView="@layout/layout_no_data" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 85 - 0
TMessagesProj/src/main/res/layout/item_more_group.xml

@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_marginStart="12dp"
+    android:layout_marginTop="12dp"
+    android:background="@drawable/shape_more_group_bg"
+    android:paddingBottom="12dp">
+
+
+    <FrameLayout
+        android:id="@+id/more_group_item_avatar_container"
+        android:layout_width="match_parent"
+        android:layout_height="120dp"
+        app:layout_constraintDimensionRatio="H,1:1"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <com.makeramen.roundedimageview.RoundedImageView
+        android:id="@+id/more_group_item_avatar"
+        android:layout_width="match_parent"
+        android:layout_height="120dp"
+        android:scaleType="centerCrop"
+        app:layout_constraintDimensionRatio="H,1:1"
+        app:layout_constraintTop_toTopOf="parent"
+        app:riv_corner_radius_top_left="6dp"
+        app:riv_corner_radius_top_right="6dp" />
+
+    <org.telegram.cricdit.view.TagTextView
+        android:id="@+id/more_group_item_title"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="12dp"
+        android:layout_marginTop="8dp"
+        android:layout_marginEnd="12dp"
+        android:ellipsize="end"
+        android:maxLines="2"
+        android:text="Cricket India"
+        android:textColor="@color/colorBlack"
+        android:textSize="14sp"
+        android:textStyle="bold"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/more_group_item_avatar_container" />
+
+
+    <TextView
+        android:id="@+id/more_group_item_type"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="3dp"
+        android:text="Type:"
+        android:textColor="@color/colorBlack"
+        android:textSize="13sp"
+        app:layout_constraintStart_toStartOf="@id/more_group_item_title"
+        app:layout_constraintTop_toBottomOf="@id/more_group_item_title" />
+
+    <TextView
+        android:id="@+id/more_group_item_type2"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="3dp"
+        android:text="Channel"
+        android:textColor="@color/colorBlue"
+        android:textSize="13sp"
+        app:layout_constraintBottom_toBottomOf="@id/more_group_item_type"
+        app:layout_constraintStart_toEndOf="@id/more_group_item_type"
+        app:layout_constraintTop_toTopOf="@id/more_group_item_type" />
+
+    <TextView
+        android:id="@+id/more_group_item_bio"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="5dp"
+        android:layout_marginEnd="12dp"
+        android:ellipsize="end"
+        android:maxLines="1"
+        android:text="This is a nice group, have 2000 people join to us.Come on,have 2000 people join to us.Come on"
+        android:textColor="#A0A4A7"
+        android:textSize="12sp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="@id/more_group_item_title"
+        app:layout_constraintTop_toBottomOf="@id/more_group_item_type" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 21 - 0
TMessagesProj/src/main/res/layout/layout_tag_textview.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+    <TextView
+        android:id="@+id/tv_tag"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_vertical"
+        android:layout_marginBottom="2dp"
+        android:layout_marginEnd="5dp"
+        android:background="@drawable/bg_red_6"
+        android:gravity="center_vertical"
+        android:paddingBottom="1dp"
+        android:paddingLeft="5dp"
+        android:paddingRight="5dp"
+        android:text="Hot"
+        android:textColor="@android:color/white"
+        android:textSize="10sp"/>
+</LinearLayout>

+ 1 - 0
TMessagesProj/src/main/res/values/colors.xml

@@ -14,6 +14,7 @@
     <color name="colorActionBarBlue">#527da3</color>
 
     <color name="colorNormalBg">#f5f5f5</color>
+    <color name="colorNormalBg2">#f1f1f1</color>
 
     <color name="divider">#dcdcdc</color>
     <color name="widget_name">#212121</color>

+ 1 - 0
TMessagesProj/src/main/res/values/string-cricdit.xml

@@ -110,6 +110,7 @@
     <string name="news_tab1">For you</string>
     <string name="news_tab2">Headlines</string>
     <string name="news_tab3">Group</string>
+    <string name="news_tab4">More</string>
 
     <string name="match_tab_results">Results</string>
     <string name="match_tab_today">Today</string>

Some files were not shown because too many files changed in this diff