huping пре 1 година
родитељ
комит
f6e3560452

+ 70 - 0
TMessagesProj/src/main/java/org/telegram/cricdit/utils/StringUtils.java

@@ -1,6 +1,14 @@
 package org.telegram.cricdit.utils;
 
+import android.text.SpannableString;
+import android.text.Spanned;
 import android.text.TextUtils;
+import android.text.style.ForegroundColorSpan;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 public class StringUtils {
 
@@ -20,4 +28,66 @@ public class StringUtils {
         }
         return nickname;
     }
+
+    /**
+     * 多个关键字高亮变色
+     *
+     * @param color   变化的色值
+     * @param text    文字
+     * @param keyword 文字中的关键字
+     * @return
+     */
+    public static SpannableString matcherSearchTitle(int color, String text,
+                                                     String keyword) {
+        List<String> strings = new ArrayList();
+        SpannableString s = new SpannableString(text);
+        if (keyword.length() == 1) {
+
+            Pattern p = Pattern.compile(escapeExprSpecialWord(keyword));
+            Matcher m = p.matcher(s);
+            while (m.find()) {
+                int start = m.start();
+                int end = m.end();
+                s.setSpan(new ForegroundColorSpan(color), start, end,
+                        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+            }
+        } else {
+            for (int i = 0; i < keyword.length(); i++) {
+                if (i == keyword.length()) {
+                    String substring = keyword.substring(i);
+                    strings.add(substring);
+                } else {
+                    String substring = keyword.substring(i, i + 1);
+                    strings.add(substring);
+                }
+            }
+            for (int i = 0; i < keyword.length(); i++) {
+                Pattern p = Pattern.compile(escapeExprSpecialWord(strings.get(i)));
+                Matcher m = p.matcher(s);
+                while (m.find()) {
+                    int start = m.start();
+                    int end = m.end();
+                    s.setSpan(new ForegroundColorSpan(color), start, end,
+                            Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+                }
+            }
+        }
+        return s;
+    }
+
+    /**
+     * 转义正则特殊字符 ($()*+.[]?\^{},|)
+     *
+     * @param keyword
+     * @return
+     */
+    private static String escapeExprSpecialWord(String keyword) {
+        String[] fbsArr = {"\\", "$", "(", ")", "*", "+", ".", "[", "]", "?", "^", "{", "}", "|"};
+        for (String key : fbsArr) {
+            if (keyword.contains(key)) {
+                keyword = keyword.replace(key, "\\" + key);
+            }
+        }
+        return keyword;
+    }
 }

+ 106 - 0
TMessagesProj/src/main/java/org/telegram/cricdit/view/popup/PrivacyPolicyPopup.java

@@ -0,0 +1,106 @@
+package org.telegram.cricdit.view.popup;
+
+import android.content.Context;
+import android.graphics.Color;
+import android.text.SpannableString;
+import android.text.Spanned;
+import android.text.style.ForegroundColorSpan;
+import android.view.View;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.lxj.xpopup.core.BottomPopupView;
+
+import org.telegram.cricdit.adapter.ReportAdapter;
+import org.telegram.cricdit.bean.ReportBean;
+import org.telegram.cricdit.utils.SPUtils;
+import org.telegram.cricdit.utils.ToastUtil;
+import org.telegram.messenger.AndroidUtilities;
+import org.telegram.messenger.R;
+import org.telegram.ui.ActionBar.AlertDialog;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class PrivacyPolicyPopup extends BottomPopupView {
+
+    private RecyclerView mRecyclerView;
+    private TextView mConfirm;
+    private TextView mContent;
+    private TextView mDecline;
+
+    public PrivacyPolicyPopup(@NonNull Context context, OnContentClickListener onContentClickListener) {
+        super(context);
+        mOnContentClickListener = onContentClickListener;
+    }
+
+    @Override
+    protected int getImplLayoutId() {
+        return R.layout.layout_privacy_policy;
+    }
+
+
+    @Override
+    protected void onCreate() {
+        super.onCreate();
+
+        mConfirm = findViewById(R.id.privacy_policy_confirm);
+        mDecline = findViewById(R.id.privacy_policy_decline);
+        mContent = findViewById(R.id.privacy_policy_content);
+
+        String srcStr = "Read our Privacy Policy. Tap 'Agree and continue' to use";
+        String keyStr = "Privacy Policy";
+        hightStr(mContent, srcStr, keyStr);
+
+        mContent.setOnClickListener(v -> {
+            if (mOnContentClickListener != null) {
+                dismiss();
+                mOnContentClickListener.clickContent();
+            }
+        });
+
+        mConfirm.setOnClickListener(v -> {
+            dismiss();
+            SPUtils.getInstance().save("privacy_policy", true);
+        });
+        mDecline.setOnClickListener(v -> {
+            if (mOnContentClickListener != null) {
+                dismiss();
+                mOnContentClickListener.decline();
+            }
+        });
+
+    }
+
+    private void hightStr(TextView titleText, String srcString, String hlStr) {
+        titleText.setText("");
+        String hlLower = hlStr.toLowerCase();
+        int lastEnd = 0;
+        SpannableString spannableString = new SpannableString(srcString);
+        for (int i = 0; i <= srcString.length() - hlStr.length(); i++) {
+            if (srcString.substring(i, i + hlStr.length()).toLowerCase().equals(hlLower)) {
+                spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#4c8eca")), i, i + hlStr.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+            }
+        }
+        titleText.append(spannableString);
+    }
+
+    private OnContentClickListener mOnContentClickListener;
+
+    public void setOnContentClickListener(OnContentClickListener onContentClickListener) {
+        mOnContentClickListener = onContentClickListener;
+    }
+
+    public interface OnContentClickListener {
+
+        void clickContent();
+
+        void decline();
+
+    }
+
+}

+ 46 - 3
TMessagesProj/src/main/java/org/telegram/onecric/ui/activity/MatchActivity.java

@@ -12,21 +12,29 @@ import androidx.viewpager.widget.ViewPager;
 
 import com.google.android.material.appbar.AppBarLayout;
 import com.google.android.material.tabs.TabLayout;
+import com.lxj.xpopup.XPopup;
+import com.lxj.xpopup.core.BasePopupView;
 
 import org.telegram.cricdit.adapter.NewsViewPagerAdapter;
 import org.telegram.cricdit.base.BaseTabActivity;
 import org.telegram.cricdit.base.IPresenter;
 import org.telegram.cricdit.bean.BaseViewFragment;
+import org.telegram.cricdit.config.Constants;
+import org.telegram.cricdit.utils.SPUtils;
+import org.telegram.cricdit.view.popup.PrivacyPolicyPopup;
 import org.telegram.messenger.LocaleController;
 import org.telegram.messenger.R;
 import org.telegram.ui.ActionBar.ActionBar;
 import org.telegram.ui.ActionBar.Theme;
+import org.telegram.ui.WebviewActivity;
 
 import java.util.ArrayList;
 import java.util.List;
 
 public class MatchActivity extends BaseTabActivity {
 
+    private PrivacyPolicyPopup mPopupView;
+
     @Override
     protected int getLayoutResId() {
         return R.layout.activity_match;
@@ -63,9 +71,9 @@ public class MatchActivity extends BaseTabActivity {
 
         List<BaseViewFragment> fragmentList = new ArrayList<>();
 
-        fragmentList.add(new MatchFragment(this,MatchFragment.MATCH_TYPE_RESULTS));
-        fragmentList.add(new MatchFragment(this,MatchFragment.MATCH_TYPE_TODAY));
-        fragmentList.add(new MatchFragment(this,MatchFragment.MATCH_TYPE_UPCOMING));
+        fragmentList.add(new MatchFragment(this, MatchFragment.MATCH_TYPE_RESULTS));
+        fragmentList.add(new MatchFragment(this, MatchFragment.MATCH_TYPE_TODAY));
+        fragmentList.add(new MatchFragment(this, MatchFragment.MATCH_TYPE_UPCOMING));
 
         NewsViewPagerAdapter adapter = new NewsViewPagerAdapter(fragmentList, tabTitles);
         viewPager.setAdapter(adapter);
@@ -127,4 +135,39 @@ public class MatchActivity extends BaseTabActivity {
         return ColorUtils.calculateLuminance(color) > 0.7f;
     }
 
+    @Override
+    public void onStart() {
+        super.onStart();
+        showPrivacy();
+    }
+
+    private void showPrivacy() {
+        boolean privacyPolicy = SPUtils.getInstance().get("privacy_policy", false);
+        if (!privacyPolicy) {
+            if (mPopupView == null) {
+                mPopupView = new PrivacyPolicyPopup(getContext(), new PrivacyPolicyPopup.OnContentClickListener() {
+
+                    @Override
+                    public void clickContent() {
+                        mPopupView.dismiss();
+                        presentFragment(new WebviewActivity(Constants.WEB_URL_PRIVACY_POLICY + System.currentTimeMillis(), ""));
+                    }
+
+                    @Override
+                    public void decline() {
+//                        finishFragment();
+                        getParentActivity().finish();
+                        System.exit(0);
+                    }
+                });
+            }
+            new XPopup.Builder(getContext())
+                    .moveUpToKeyboard(false) //如果不加这个,评论弹窗会移动到软键盘上面
+                    .dismissOnTouchOutside(false)
+                    .dismissOnBackPressed(false)
+                    .isDestroyOnDismiss(true) //对于只使用一次的弹窗,推荐设置这个
+                    .asCustom(mPopupView)
+                    .show();
+        }
+    }
 }

+ 12 - 2
TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java

@@ -18,6 +18,7 @@ import android.animation.ValueAnimator;
 import android.annotation.SuppressLint;
 import android.app.Activity;
 import android.app.ActivityManager;
+import android.app.Dialog;
 import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
@@ -26,6 +27,7 @@ import android.content.res.Configuration;
 import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
+import android.graphics.Color;
 import android.graphics.LinearGradient;
 import android.graphics.Matrix;
 import android.graphics.Paint;
@@ -42,7 +44,10 @@ import android.os.StrictMode;
 import android.os.SystemClock;
 import android.provider.ContactsContract;
 import android.provider.Settings;
+import android.text.SpannableString;
+import android.text.Spanned;
 import android.text.TextUtils;
+import android.text.style.ForegroundColorSpan;
 import android.util.Base64;
 import android.util.SparseIntArray;
 import android.util.TypedValue;
@@ -79,6 +84,7 @@ import com.google.android.gms.common.api.Status;
 import com.google.firebase.appindexing.Action;
 import com.google.firebase.appindexing.FirebaseUserActions;
 import com.google.firebase.appindexing.builders.AssistActionBuilder;
+import com.lxj.xpopup.XPopup;
 
 import org.telegram.PhoneFormat.PhoneFormat;
 import org.telegram.cricdit.bean.UpdateBean;
@@ -89,11 +95,16 @@ import org.telegram.cricdit.net.RetrofitClient;
 import org.telegram.cricdit.service.SyncDataService;
 import org.telegram.cricdit.ui.NewsDetailCommentFragment;
 import org.telegram.cricdit.utils.AppInfoUtils;
+import org.telegram.cricdit.utils.DialogUtils;
 import org.telegram.cricdit.utils.GsonHel;
+import org.telegram.cricdit.utils.SPUtils;
+import org.telegram.cricdit.utils.StringUtils;
 import org.telegram.cricdit.utils.update.CustomUpdateParser;
 import org.telegram.cricdit.ui.NewsActivity;
 import org.telegram.cricdit.ui.RankListActivity;
 import org.telegram.cricdit.utils.update.CustomUpdatePrompter;
+import org.telegram.cricdit.view.popup.PrivacyPolicyPopup;
+import org.telegram.cricdit.view.popup.ReportBottomPopup;
 import org.telegram.messenger.AccountInstance;
 import org.telegram.messenger.AndroidUtilities;
 import org.telegram.messenger.ApplicationLoader;
@@ -2452,7 +2463,7 @@ public class LaunchActivity extends BasePermissionsActivity implements ActionBar
                                                 bundle.putInt("news_id", Integer.parseInt(url.split("cricdit://resolve\\?newsid=")[1]));
                                                 presentFragment(new NewsDetailCommentFragment(bundle));
                                             }
-                                        },500);
+                                        }, 500);
 
                                     }
                                 }
@@ -5192,7 +5203,6 @@ public class LaunchActivity extends BasePermissionsActivity implements ActionBar
             VoIPFragment.onResume();
         }
         invalidateTabletMode();
-
     }
 
     private void invalidateTabletMode() {

+ 5 - 0
TMessagesProj/src/main/res/drawable/dialog_top_bg.xml

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

+ 7 - 0
TMessagesProj/src/main/res/drawable/shape_common_btn_confirm_blue_bg.xml

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

+ 71 - 0
TMessagesProj/src/main/res/layout/layout_privacy_policy.xml

@@ -0,0 +1,71 @@
+<?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:background="@drawable/dialog_top_bg"
+    android:padding="16dp">
+
+    <TextView
+        android:id="@+id/privacy_policy_title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/privacy_policy"
+        android:textColor="@color/colorBlack"
+        android:textSize="16sp"
+        android:textStyle="bold"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+
+    <TextView
+        android:id="@+id/privacy_policy_content"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="32dp"
+        android:paddingStart="10dp"
+        android:paddingEnd="10dp"
+        android:gravity="center"
+        android:textColor="@color/colorBlack"
+        android:textSize="14sp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/privacy_policy_title" />
+
+
+    <TextView
+        android:id="@+id/privacy_policy_confirm"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="32dp"
+        android:layout_marginStart="22dp"
+        android:layout_marginEnd="22dp"
+        android:gravity="center"
+        android:padding="10dp"
+        android:background="@drawable/shape_common_btn_confirm_blue_bg"
+        android:text="@string/agree_upper"
+        android:textColor="@color/colorWhite"
+        android:textSize="14sp"
+        android:textStyle="bold"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/privacy_policy_content" />
+
+    <TextView
+        android:id="@+id/privacy_policy_decline"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:gravity="center"
+        android:padding="10dp"
+        android:layout_marginTop="5dp"
+        android:text="@string/decline_upper"
+        android:textColor="@color/colorGray2"
+        android:textSize="13sp"
+        android:textStyle="bold"
+        app:layout_constraintTop_toBottomOf="@id/privacy_policy_confirm"
+        app:layout_constraintStart_toStartOf="@id/privacy_policy_confirm"
+        app:layout_constraintEnd_toEndOf="@id/privacy_policy_confirm"
+        />
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 2 - 0
TMessagesProj/src/main/res/values/strings.xml

@@ -291,6 +291,8 @@
     <string name="save">Save</string>
     <string name="confirm">Confirm</string>
     <string name="confirm_upper">CONFIRM</string>
+    <string name="agree_upper">AGREE AND CONTINUE</string>
+    <string name="decline_upper">DECLINE AND EXIT</string>
     <string name="please_login">Please login</string>
     <string name="please_join_writer">requires creator to publish</string>
     <string name="empty_data">No data yet</string>