Kaynağa Gözat

[+] 区分区号和手机号,分开请求

clark 10 ay önce
ebeveyn
işleme
4b4a5ec23f
26 değiştirilmiş dosya ile 330 ekleme ve 297 silme
  1. 17 9
      app/build.gradle
  2. 30 19
      app/src/main/AndroidManifest.xml
  3. 11 16
      app/src/main/java/com/bogo/android/BogoApplication.java
  4. 4 4
      app/src/main/java/com/bogo/android/account/api/LoginServiceManager.java
  5. 8 5
      app/src/main/java/com/bogo/android/account/api/MessageCodeServiceManager.java
  6. 9 0
      app/src/main/java/com/bogo/android/account/api/request/RegisterRequest.java
  7. 9 0
      app/src/main/java/com/bogo/android/account/api/request/ResetPasswordRequest.java
  8. 3 3
      app/src/main/java/com/bogo/android/account/api/service/LoginService.java
  9. 6 5
      app/src/main/java/com/bogo/android/account/api/service/MessageCodeService.java
  10. 17 22
      app/src/main/java/com/bogo/android/account/ui/ForgotPasswordActivity.java
  11. 21 17
      app/src/main/java/com/bogo/android/account/ui/LoginActivity.java
  12. 10 10
      app/src/main/java/com/bogo/android/account/ui/RegisterActivity.java
  13. 1 1
      app/src/main/java/com/bogo/android/common/api/OkHttpFactory.java
  14. 6 6
      app/src/main/java/com/bogo/android/friend/ui/FindFriendActivity.java
  15. 3 0
      app/src/main/java/com/bogo/android/home/fragment/ConversationFragment.java
  16. 0 18
      app/src/main/java/com/bogo/android/push/DemoPushService.java
  17. 7 0
      app/src/main/java/com/bogo/android/push/JPushReceiver.java
  18. 6 0
      app/src/main/java/com/bogo/android/push/JPushService.java
  19. 5 1
      app/src/main/java/com/bogo/messaging/PushManager.java
  20. BIN
      app/src/main/res/drawable-hdpi/push_small.png
  21. BIN
      app/src/main/res/drawable-xhdpi/push_small.png
  22. BIN
      app/src/main/res/drawable-xxhdpi/push_small.png
  23. 72 69
      app/src/main/res/layout/activity_livekit_meet_home.xml
  24. 37 35
      app/src/main/res/layout/activity_note_list.xml
  25. 1 1
      app/src/main/res/layout/activity_register.xml
  26. 47 56
      app/src/main/res/layout/activity_setting.xml

+ 17 - 9
app/build.gradle

@@ -19,7 +19,7 @@ android {
          老的端口号
          47.239.183.4
          */
-        buildConfigField("String", "API_SERVER_URL", '"http://8.210.208.207:8080"')
+        buildConfigField("String", "API_SERVER_URL", '"http://192.168.3.135:8080"')
 
         /*
          最新端口号
@@ -27,7 +27,7 @@ android {
          老的端口号
          47.239.183.4
         */
-        buildConfigField("String", "MESSAGING_SERVER_HOST", '"8.210.208.207"')
+        buildConfigField("String", "MESSAGING_SERVER_HOST", '"192.168.3.135"')
         buildConfigField("Integer", "MESSAGING_SERVER_PORT", '8090')
 
 
@@ -56,9 +56,18 @@ android {
         }
 
         manifestPlaceholders = [
-                //从 3.1.2.0 版本开始,APPID 占位符从 GETUI_APP_ID 切换为 GETUI_APPID
-                //后续所有产品的 APPID 均统一配置为 GETUI_APPID 占位符
-                GETUI_APPID       : "SK7a7rtfYlAaLPjMcfyAa3",
+                JPUSH_PKGNAME : applicationId,
+                JPUSH_APPKEY  : "346f4779e638cf3f455c6697",//值来自开发者平台取得的AppKey
+                JPUSH_CHANNEL : "default_developer",
+                MEIZU_APPKEY : "MZ-魅族的APPKEY",
+                MEIZU_APPID : "MZ-魅族的APPID",
+                XIAOMI_APPID : "小米的APPID",//JPush5.5.3开始,可以不添加MI-前缀.
+                XIAOMI_APPKEY : "小米的APPKEY",//JPush5.5.3开始,可以不添加MI-前缀.
+                OPPO_APPKEY : "OP-oppo的APPKEY",
+                OPPO_APPID : "OP-oppo的APPID",
+                OPPO_APPSECRET : "OP-oppo的APPSECRET",
+                VIVO_APPKEY : "vivo的APPKEY",
+                VIVO_APPID : "vivo的APPID"
         ]
     }
 
@@ -91,8 +100,8 @@ android {
         debug {
             applicationIdSuffix = '.debug'
             signingConfig signingConfigs.release
-            shrinkResources false
-            minifyEnabled false
+            shrinkResources true
+            minifyEnabled true
             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
         }
     }
@@ -178,6 +187,5 @@ dependencies {
     implementation 'com.github.youlookwhat:ByRecyclerView:1.4.1'
     implementation 'androidx.lifecycle:lifecycle-process:2.8.7'
 
-    implementation 'com.getui:gtsdk:3.3.11.0'  //个推SDK
-    implementation 'com.getui:gtc:3.2.18.0'  //个推核心组件
+    implementation 'cn.jiguang.sdk:jpush:5.5.3'  // 此处以JPush 5.5.3 版本为例, 基础库JCore SDK将自动引用最新
 }

+ 30 - 19
app/src/main/AndroidManifest.xml

@@ -65,13 +65,8 @@
         android:persistent="true"
         android:supportsRtl="true"
         android:theme="@style/AppTheme"
-        android:usesCleartextTraffic="true"
         tools:ignore="GoogleAppIndexingWarning">
 
-        <meta-data
-            android:name="PUSH_APPID"
-            android:value="个推SDK的appid" />
-
         <meta-data
             android:name="com.baidu.lbsapi.API_KEY"
             android:value="hovMKFljIraAh1XkjFQLLtSbrF0LxWo2" />
@@ -611,17 +606,39 @@
 
 
         <!-- ****************************************推送配置 begin*************************************** -->
-        <meta-data
-            android:name="GETUI_APPID"
-            android:value="${GETUI_APPID}" />
 
+        <!-- 极光推送 -->
+        <provider
+            android:name="cn.jpush.android.service.InitProvider"
+            android:authorities="${applicationId}.jiguang.InitProvider"
+            android:exported="false"
+            tools:node="remove" />
 
-        <!-- 请根据您当前自定义的 PushService 名称路径进行配置-->
-        <service
-            android:name=".push.DemoPushService"
+        <!-- Since JCore2.0.0 Required SDK核心功能-->
+        <!-- 可配置android:process参数将Service放在其他进程中;android:enabled属性不能是false -->
+        <!-- 这个是自定义Service,要继承极光JCommonService,可以在更多手机平台上使得推送通道保持的更稳定 -->
+        <service android:name=".push.JPushService"
+            android:enabled="true"
             android:exported="false"
-            android:label="PushService"
-            android:process=":pushservice"/>
+            android:process=":pushcore">
+            <intent-filter>
+                <action android:name="cn.jiguang.user.service.action" />
+            </intent-filter>
+        </service>
+
+        <!-- Required since 3.0.7 -->
+        <!-- 新的 tag/alias 接口结果返回需要开发者配置一个自定的广播 -->
+        <!-- 3.3.0开始所有事件将通过该类回调 -->
+        <!-- 该广播需要继承 JPush 提供的 JPushMessageReceiver 类, 并如下新增一个 Intent-Filter -->
+        <receiver
+            android:name=".push.JPushReceiver"
+            android:enabled="true"
+            android:exported="false" >
+            <intent-filter>
+                <action android:name="cn.jpush.android.intent.RECEIVER_MESSAGE" />
+                <category android:name="com.manliao.imchat.debug" />
+            </intent-filter>
+        </receiver>
 
 
         <service
@@ -700,10 +717,4 @@
 
     </application>
 
-    <!-- 个推适配android 11及以上,强烈建议加上 -->
-    <queries>
-        <intent>
-            <action android:name="com.getui.sdk.action" />
-        </intent>
-    </queries>
 </manifest>

+ 11 - 16
app/src/main/java/com/bogo/android/BogoApplication.java

@@ -2,6 +2,7 @@
 package com.bogo.android;
 
 import android.Manifest;
+import android.annotation.SuppressLint;
 import android.app.Activity;
 import android.app.ActivityOptions;
 import android.app.Application;
@@ -17,11 +18,8 @@ import android.graphics.Color;
 import android.media.AudioAttributes;
 import android.media.RingtoneManager;
 import android.os.Bundle;
-import android.os.Handler;
-import android.os.Looper;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
-import android.util.Log;
 import android.view.View;
 
 import androidx.annotation.NonNull;
@@ -31,7 +29,6 @@ import androidx.core.app.ActivityCompat;
 import androidx.core.app.ActivityOptionsCompat;
 import androidx.core.content.ContextCompat;
 import androidx.core.util.Pair;
-import androidx.lifecycle.ProcessLifecycleOwner;
 import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 
 import com.baidu.location.LocationClient;
@@ -55,7 +52,6 @@ import com.bogo.android.common.util.CloudImageLoaderFactory;
 import com.bogo.android.common.util.DebugLogger;
 import com.bogo.android.common.util.FileManager;
 import com.bogo.android.home.service.ApkDownloaderService;
-import com.bogo.android.message.database.BurnAfterReadMessageManager;
 import com.bogo.android.message.entity.ChatSession;
 import com.bogo.android.webrtc.model.LivekitRoom;
 import com.bogo.android.webrtc.ui.LivekitMeetingCalleeActivity;
@@ -66,7 +62,6 @@ import com.bogo.android.webrtc.ui.VoiceCallingActivity;
 import com.bogo.android.webrtc.ui.VoiceIncomingCallActivity;
 import com.bogo.messaging.PushManager;
 import com.google.android.material.color.DynamicColors;
-import com.igexin.sdk.IUserLoggerInterface;
 import com.tencent.bugly.crashreport.CrashReport;
 
 import org.apache.commons.io.IOUtils;
@@ -79,6 +74,9 @@ import java.util.List;
 import java.util.Stack;
 import java.util.concurrent.atomic.AtomicInteger;
 
+import cn.jiguang.api.utils.JCollectionAuth;
+import cn.jpush.android.api.JPushInterface;
+
 public class BogoApplication extends Application implements Application.ActivityLifecycleCallbacks {
 
     private static BogoApplication context;
@@ -91,8 +89,10 @@ public class BogoApplication extends Application implements Application.Activity
 
     private final AtomicInteger activeCounter = new AtomicInteger();
 
+    @SuppressLint("UnsafeOptInUsageError")
     private GlobalVideoCache globalVideoCache;
 
+    @SuppressLint("UnsafeOptInUsageError")
     @Override
     public void onCreate() {
 
@@ -125,17 +125,12 @@ public class BogoApplication extends Application implements Application.Activity
         }
 
         if (isMainProcess){
-            com.igexin.sdk.PushManager.getInstance().initialize(this);
-            com.igexin.sdk.PushManager.getInstance().setDebugLogger(this, new IUserLoggerInterface()
-            {
-                @Override
-                public void log(String s)
-                {
-                    Log.d("PushManager",s);
-                }
-            });
-        }
+            JPushInterface.setDebugMode(true);
+            JPushInterface.init(this);
+            // 调整点二:App用户同意了隐私政策授权,并且开发者确定要开启推送服务后调用
+            JCollectionAuth.setAuth(context, true); //如初始化被拦截过,将重试初始化过程
 
+        }
         globalVideoCache = new GlobalVideoCache(this);
     }
 

+ 4 - 4
app/src/main/java/com/bogo/android/account/api/LoginServiceManager.java

@@ -16,8 +16,8 @@ public class LoginServiceManager extends BaseServiceManager {
 
     private static final LoginService loginService = createService(LoginService.class);
 
-    public static void findId(String telephone, HttpResponseListener<Long> responseListener) {
-        loginService.findId(telephone).enqueue(new MainThreadCallback<>(responseListener));
+    public static void findId(String phoneCountryCode,String telephone, HttpResponseListener<Long> responseListener) {
+        loginService.findId(phoneCountryCode,telephone).enqueue(new MainThreadCallback<>(responseListener));
     }
      
     /**
@@ -27,9 +27,9 @@ public class LoginServiceManager extends BaseServiceManager {
      * @param password
      * @param responseListener
      */
-    public static void login(String telephone, String password, HttpResponseListener<User> responseListener) {
+    public static void login(String phoneCountryCode,String telephone, String password, HttpResponseListener<User> responseListener) {
 
-        Call<ApiResponse<User>> call = loginService.login(telephone, MD5.digest(password));
+        Call<ApiResponse<User>> call = loginService.login(phoneCountryCode,telephone, MD5.digest(password));
 
         call.enqueue(new MainThreadCallback<>(responseListener));
 

+ 8 - 5
app/src/main/java/com/bogo/android/account/api/MessageCodeServiceManager.java

@@ -5,17 +5,20 @@ import com.bogo.android.account.api.service.MessageCodeService;
 import com.bogo.android.common.api.BaseServiceManager;
 import com.bogo.android.common.listener.HttpResponseListener;
 
-public class MessageCodeServiceManager extends BaseServiceManager {
+public class MessageCodeServiceManager extends BaseServiceManager
+{
 
     private static final MessageCodeService messageCodeService = createService(MessageCodeService.class);
 
-    public static void register(String telephone, HttpResponseListener<String> responseListener) {
-        messageCodeService.register(telephone).enqueue(new MainThreadCallback<>(responseListener));
+    public static void register(String phoneCountryCode, String telephone, HttpResponseListener<String> responseListener)
+    {
+        messageCodeService.register(phoneCountryCode, telephone).enqueue(new MainThreadCallback<>(responseListener));
 
     }
 
-    public static void forgot(String telephone, HttpResponseListener<String> responseListener) {
-        messageCodeService.forgot(telephone).enqueue(new MainThreadCallback<>(responseListener));
+    public static void forgot(String phoneCountryCode,String telephone, HttpResponseListener<String> responseListener)
+    {
+        messageCodeService.forgot(phoneCountryCode,telephone).enqueue(new MainThreadCallback<>(responseListener));
     }
 
 

+ 9 - 0
app/src/main/java/com/bogo/android/account/api/request/RegisterRequest.java

@@ -6,6 +6,7 @@ import java.io.Serializable;
 
 public class RegisterRequest implements Serializable {
     private String name;
+    private String phoneCountryCode;
     private String telephone;
     private String code;
     private String password;
@@ -19,6 +20,14 @@ public class RegisterRequest implements Serializable {
         this.name = name;
     }
 
+    public String getPhoneCountryCode() {
+        return phoneCountryCode;
+    }
+
+    public void setPhoneCountryCode(String phoneCountryCode) {
+        this.phoneCountryCode = phoneCountryCode;
+    }
+
     public String getTelephone() {
         return telephone;
     }

+ 9 - 0
app/src/main/java/com/bogo/android/account/api/request/ResetPasswordRequest.java

@@ -5,11 +5,20 @@ import java.io.Serializable;
 
 
 public class ResetPasswordRequest implements Serializable {
+    private String phoneCountryCode;
     private String telephone;
     private String code;
     private String password;
 
 
+    public String getPhoneCountryCode() {
+        return phoneCountryCode;
+    }
+
+    public void setPhoneCountryCode(String phoneCountryCode) {
+        this.phoneCountryCode = phoneCountryCode;
+    }
+
     public String getTelephone() {
         return telephone;
     }

+ 3 - 3
app/src/main/java/com/bogo/android/account/api/service/LoginService.java

@@ -16,12 +16,12 @@ import retrofit2.http.Path;
 
 public interface LoginService {
 
-    @GET("user/id/{telephone}")
-    Call<ApiResponse<Long>> findId(@Path("telephone") String telephone);
+    @GET("user/id/{phoneCountryCode}/{telephone}")
+    Call<ApiResponse<Long>> findId(@Path("phoneCountryCode") String phoneCountryCode,@Path("telephone") String telephone);
 
     @FormUrlEncoded
     @POST("user/login")
-    Call<ApiResponse<User>> login(@Field("telephone") String telephone, @Field("password") String password);
+    Call<ApiResponse<User>> login(@Field("phoneCountryCode")String phoneCountryCode,@Field("telephone") String telephone, @Field("password") String password);
 
     @POST("user/register")
     Call<ApiResponse<User>> register(@Body RegisterRequest request);

+ 6 - 5
app/src/main/java/com/bogo/android/account/api/service/MessageCodeService.java

@@ -7,11 +7,12 @@ import retrofit2.Call;
 import retrofit2.http.GET;
 import retrofit2.http.Path;
 
-public interface MessageCodeService {
+public interface MessageCodeService
+{
 
-    @GET("code/register/{telephone}")
-    Call<ApiResponse<String>> register(@Path("telephone") String telephone);
+    @GET("code/register/{phoneCountryCode}/{telephone}")
+    Call<ApiResponse<String>> register(@Path("phoneCountryCode") String phoneCountryCode, @Path("telephone") String telephone);
 
-    @GET("code/forgot/{telephone}")
-    Call<ApiResponse<String>> forgot(@Path("telephone") String telephone);
+    @GET("code/forgot/{phoneCountryCode}/{telephone}")
+    Call<ApiResponse<String>> forgot(@Path("phoneCountryCode") String phoneCountryCode, @Path("telephone") String telephone);
 }

+ 17 - 22
app/src/main/java/com/bogo/android/account/ui/ForgotPasswordActivity.java

@@ -72,29 +72,28 @@ public class ForgotPasswordActivity extends BaseActivity<ActivityForgotPasswordB
 
     public void onCodeButtonClicked(View view) {
 
-        String telephone = binding.telephone.getText().toString().trim();
 
-        if (telephone.isEmpty()){
+        if (TextUtils.isEmpty(binding.telephone.getText()))
+        {
             showToastView(R.string.tips_input_telephone);
             return;
         }
+        String telephone = binding.telephone.getText().toString().trim();
 
-        final String e164Number = PhoneNumberUtils.formatNumberToE164(telephone,country.id);
-        if (TextUtils.isEmpty(e164Number)){
-           showToastView(R.string.tips_telephone_format_error);
-           return;
-        }
-
-
-        LoginServiceManager.findId(e164Number,new SimpleHttpRequestListener<Long>(){
-            public void onHttpResponse(ApiResponse<Long> result) {
-                if (result.code == ResponseCode.CODE_404){
+        LoginServiceManager.findId(country.code, telephone, new SimpleHttpRequestListener<Long>()
+        {
+            public void onHttpResponse(ApiResponse<Long> result)
+            {
+                if (result.code == ResponseCode.CODE_404)
+                {
                     showToastView(getString(R.string.tips_telephone_not_registered));
                     return;
                 }
 
-                MessageCodeServiceManager.forgot(e164Number,new SimpleHttpRequestListener<String>(){
-                    public void onHttpResponse(ApiResponse<String> result) {
+                MessageCodeServiceManager.forgot(country.code, telephone, new SimpleHttpRequestListener<String>()
+                {
+                    public void onHttpResponse(ApiResponse<String> result)
+                    {
                         countDownTimer.start();
                         binding.codeButton.setEnabled(false);
                         binding.code.setText(result.data);
@@ -107,16 +106,11 @@ public class ForgotPasswordActivity extends BaseActivity<ActivityForgotPasswordB
 
     public void onResetButtonClicked(View view) {
 
-        if (TextUtils.isEmpty(binding.telephone.getText().toString().trim())){
+        if (TextUtils.isEmpty(binding.telephone.getText())){
             showToastView(R.string.tips_input_telephone);
             return;
         }
 
-        String e164Number = PhoneNumberUtils.formatNumberToE164(binding.telephone.getText().toString().trim(),country.id);
-        if (TextUtils.isEmpty(e164Number)){
-            showToastView(R.string.tips_telephone_format_error);
-            return;
-        }
 
         if (binding.code.getText().length() < 6){
             showToastView(R.string.tips_input_message_code);
@@ -128,10 +122,11 @@ public class ForgotPasswordActivity extends BaseActivity<ActivityForgotPasswordB
             return;
         }
 
-
+        String phoneNumber = binding.telephone.getText().toString().trim();
         ResetPasswordRequest request = new ResetPasswordRequest();
+        request.setPhoneCountryCode(country.code);
+        request.setTelephone(phoneNumber);
         request.setCode(binding.code.getText().toString().trim());
-        request.setTelephone(e164Number);
         request.setPassword(MD5.digest(binding.password.getText().toString().trim()));
 
         showProgressDialog(getString(R.string.tips_progress_reset_password));

+ 21 - 17
app/src/main/java/com/bogo/android/account/ui/LoginActivity.java

@@ -6,7 +6,6 @@ import android.content.Intent;
 import android.graphics.Color;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
-import android.telephony.PhoneNumberUtils;
 import android.text.Editable;
 import android.text.Html;
 import android.text.TextUtils;
@@ -15,7 +14,6 @@ import android.text.method.HideReturnsTransformationMethod;
 import android.text.method.PasswordTransformationMethod;
 import android.view.KeyEvent;
 import android.view.View;
-import android.view.animation.AnimationUtils;
 import android.widget.ImageView;
 import android.widget.TextView;
 
@@ -58,7 +56,7 @@ public class LoginActivity extends BaseActivity<ActivityLoginBinding> implements
         ActivityLoginBinding binding = ActivityLoginBinding.inflate(getLayoutInflater());
         return BindingCompat.of(binding,binding.getRoot());
     }
-    
+
     @Override
     public void initComponents() {
         super.setStatusBarColor(Color.TRANSPARENT);
@@ -98,16 +96,21 @@ public class LoginActivity extends BaseActivity<ActivityLoginBinding> implements
             return;
         }
 
-        String e164Number = PhoneNumberUtils.formatNumberToE164(binding.telephone.getText().toString().trim(),country.id);
-        if (TextUtils.isEmpty(e164Number)){
+        if (TextUtils.isEmpty(binding.telephone.getText())){
             showToastView(R.string.tips_telephone_format_error);
             return;
         }
 
-        showProgressDialog(R.string.tips_login_processing);
+        if (TextUtils.isEmpty(binding.password.getText())){
+            showToastView(R.string.tips_input_login_password);
+            return;
+        }
 
+        String phone = binding.telephone.getText().toString().trim();
         String password = binding.password.getText().toString().trim();
-        LoginServiceManager.login(e164Number,password,this);
+
+        showProgressDialog(R.string.tips_login_processing);
+        LoginServiceManager.login(country.code, phone, password, this);
     }
 
     public void onRegisterButtonClicked(View v) {
@@ -125,19 +128,20 @@ public class LoginActivity extends BaseActivity<ActivityLoginBinding> implements
     @Override
     public void onTextChanged(CharSequence s, int start, int before, int count) {
 
-        String telephone = binding.telephone.getText().toString().trim();
-
-        String e164Number = PhoneNumberUtils.formatNumberToE164(binding.telephone.getText().toString().trim(),country.id);
-
-        if (telephone.isEmpty() || TextUtils.isEmpty(e164Number)) {
-//            binding.icon.setImageResource(R.drawable.icon_def_head);
+        if (TextUtils.isEmpty(binding.telephone.getText()))
+        {
+            binding.icon.setImageResource(R.drawable.icon_def_head);
             return;
         }
+        String telephone = binding.telephone.getText().toString().trim();
 
-        LoginServiceManager.findId(e164Number,new SimpleHttpRequestListener<Long>(){
-            public void onHttpResponse(ApiResponse<Long> response) {
-                if (response.code == ResponseCode.CODE_200){
-//                    binding.icon.load(FileURLBuilder.getUserIconUrl(response.data),R.drawable.icon_def_head,LoginActivity.this);
+        LoginServiceManager.findId(country.code, telephone, new SimpleHttpRequestListener<Long>()
+        {
+            public void onHttpResponse(ApiResponse<Long> response)
+            {
+                if (response.code == ResponseCode.CODE_200)
+                {
+                    binding.icon.load(FileURLBuilder.getUserIconUrl(response.data), R.drawable.icon_def_head, LoginActivity.this);
                 }
             }
         });

+ 10 - 10
app/src/main/java/com/bogo/android/account/ui/RegisterActivity.java

@@ -5,7 +5,6 @@ import android.app.Activity;
 import android.content.Intent;
 import android.net.Uri;
 import android.os.CountDownTimer;
-import android.telephony.PhoneNumberUtils;
 import android.text.Html;
 import android.text.TextUtils;
 import android.text.method.HideReturnsTransformationMethod;
@@ -105,22 +104,21 @@ public class RegisterActivity extends BaseActivity<ActivityRegisterBinding> impl
     public void onCodeButtonClicked(View view)
     {
 
-        String telephone = binding.telephone.getText().toString().trim();
 
-        if (telephone.length() == 0)
+        if (TextUtils.isEmpty(binding.telephone.getText()))
         {
             showToastView(R.string.tips_input_telephone);
             return;
         }
+        String telephone = binding.telephone.getText().toString().trim();
 
-        String e164Number = PhoneNumberUtils.formatNumberToE164(telephone, country.id);
-        if (TextUtils.isEmpty(e164Number))
+        if (TextUtils.isEmpty(telephone))
         {
             showToastView(R.string.tips_telephone_format_error);
             return;
         }
 
-        MessageCodeServiceManager.register(e164Number, new SimpleHttpRequestListener<String>()
+        MessageCodeServiceManager.register(country.code, telephone, new SimpleHttpRequestListener<String>()
         {
             public void onHttpResponse(ApiResponse<String> result)
             {
@@ -140,14 +138,15 @@ public class RegisterActivity extends BaseActivity<ActivityRegisterBinding> impl
             return;
         }
 
-        if (TextUtils.isEmpty(binding.telephone.getText().toString().trim()))
+        if (TextUtils.isEmpty(binding.telephone.getText()))
         {
             showToastView(R.string.tips_input_telephone);
             return;
         }
 
-        String e164Number = PhoneNumberUtils.formatNumberToE164(binding.telephone.getText().toString().trim(), country.id);
-        if (TextUtils.isEmpty(e164Number))
+        String userPhone = binding.telephone.getText().toString().trim();
+
+        if (TextUtils.isEmpty(userPhone))
         {
             showToastView(R.string.tips_telephone_format_error);
             return;
@@ -169,7 +168,8 @@ public class RegisterActivity extends BaseActivity<ActivityRegisterBinding> impl
         RegisterRequest request = new RegisterRequest();
         request.setCode(binding.code.getText().toString().trim());
         request.setName(binding.name.getText().toString().trim());
-        request.setTelephone(e164Number);
+        request.setTelephone(userPhone);
+        request.setPhoneCountryCode(country.code);
         request.setPassword(MD5.digest(binding.password.getText().toString().trim()));
 
         showProgressDialog(getString(R.string.tips_progress_register_ing));

+ 1 - 1
app/src/main/java/com/bogo/android/common/api/OkHttpFactory.java

@@ -86,7 +86,7 @@ public class OkHttpFactory {
         @Override
         public Response intercept(Chain chain) throws IOException {
             Request request = chain.request().newBuilder()
-                    .addHeader(Constant.ATTR_APP_TYPE,String.valueOf(0))
+                    .addHeader(Constant.ATTR_APP_TYPE,String.valueOf(5))
                     .addHeader(Constant.ATTR_APP_VERSION,String.valueOf(BuildConfig.VERSION_CODE))
                     .addHeader(Constant.ATTR_APP_LANGUAGE, App.getLanguage())
                     .build();

+ 6 - 6
app/src/main/java/com/bogo/android/friend/ui/FindFriendActivity.java

@@ -69,7 +69,8 @@ public class FindFriendActivity extends BaseActivity<ActivityFindFriendBinding>
     @Override
     public void onHttpResponse(ApiResponse<UserDTO> response ) {
         hideProgressDialog();
-        if (response.data == null){
+        if (response.data == null)
+        {
             binding.userView.setVisibility(View.GONE);
             showToastView(R.string.tips_search_result_empty);
             return;
@@ -80,8 +81,8 @@ public class FindFriendActivity extends BaseActivity<ActivityFindFriendBinding>
 
         binding.userView.setVisibility(View.VISIBLE);
 
-       binding.name.setText(user.getName());
-       binding.icon.load(FileURLBuilder.getUserIconUrl(user.getId()),R.drawable.icon_def_head);
+        binding.name.setText(user.getName());
+        binding.icon.load(FileURLBuilder.getUserIconUrl(user.getId()), R.drawable.icon_def_head);
     }
 
 
@@ -109,15 +110,14 @@ public class FindFriendActivity extends BaseActivity<ActivityFindFriendBinding>
     }
 
     OnSearchActionListener telephoneSearchListener = keyword -> {
-        String e164Number = PhoneNumberUtils.formatNumberToE164(keyword,country.id);
-        if (TextUtils.isEmpty(e164Number)){
+        if (TextUtils.isEmpty(keyword)){
             showToastView(R.string.tips_telephone_format_error);
             return;
         }
 
         showProgressDialog(getString(R.string.tips_query_loading));
 
-        UserServiceManager.findOne(e164Number,FindFriendActivity.this);
+        UserServiceManager.findOne(keyword,FindFriendActivity.this);
     };
 
     OnSearchActionListener uidSearchListener = keyword -> {

+ 3 - 0
app/src/main/java/com/bogo/android/home/fragment/ConversationFragment.java

@@ -15,6 +15,7 @@ import androidx.annotation.NonNull;
 import androidx.lifecycle.ProcessLifecycleOwner;
 import androidx.recyclerview.widget.DefaultItemAnimator;
 
+import com.baidu.mapauto.auth.util.LogUtil;
 import com.bogo.android.BogoApplication;
 import com.bogo.android.R;
 import com.bogo.android.common.BindingCompat;
@@ -45,11 +46,13 @@ import com.bogo.android.message.ui.FriendChatActivity;
 import com.bogo.android.message.ui.GroupChatActivity;
 import com.bogo.android.message.ui.SystemMessageActivity;
 import com.bogo.android.micro.ui.MicroServerWindowActivity;
+import com.bogo.messaging.logger.Logger;
 import com.google.android.material.badge.BadgeDrawable;
 
 import java.util.Collections;
 import java.util.List;
 
+import cn.jpush.android.api.JPushInterface;
 import me.jingbin.library.decoration.SpacesItemDecoration;
 
 public class ConversationFragment extends MessagingFragment<FragmentHomeConversationBinding> implements OnSessionTouchListener, OnChatMenuClickedListener<ChatSession>, OnSessionDeleteListener

+ 0 - 18
app/src/main/java/com/bogo/android/push/DemoPushService.java

@@ -1,18 +0,0 @@
-package com.bogo.android.push;
-
-import android.content.Context;
-import android.util.Log;
-
-import com.igexin.sdk.message.GTTransmitMessage;
-
-public class DemoPushService extends com.igexin.sdk.GTIntentService {
-    @Override
-    public void onReceiveClientId(Context context, String cid) {
-        Log.d("GT", "ClientId: " + cid);  // 保存CID至服务端:cite[2]:cite[4]
-    }
-
-    @Override
-    public void onReceiveMessageData(Context context, GTTransmitMessage msg) {
-        String payload = new String(msg.getPayload());  // 处理透传消息:cite[2]:cite[7]
-    }
-}

+ 7 - 0
app/src/main/java/com/bogo/android/push/JPushReceiver.java

@@ -0,0 +1,7 @@
+package com.bogo.android.push;
+
+import cn.jpush.android.service.JPushMessageReceiver;
+
+public class JPushReceiver extends JPushMessageReceiver
+{
+}

+ 6 - 0
app/src/main/java/com/bogo/android/push/JPushService.java

@@ -0,0 +1,6 @@
+package com.bogo.android.push;
+
+import cn.jpush.android.service.JCommonService;
+
+public class JPushService extends JCommonService {
+}

+ 5 - 1
app/src/main/java/com/bogo/messaging/PushManager.java

@@ -22,6 +22,8 @@ import com.bogo.messaging.model.SentBody;
 
 import java.util.UUID;
 
+import cn.jpush.android.api.JPushInterface;
+
 /**
  * 推送接口
  */
@@ -168,13 +170,15 @@ public class PushManager {
         SentBody sent = new SentBody();
         sent.setKey(RequestKey.CLIENT_BIND);
         sent.put("uid", String.valueOf(uid));
-        sent.put("channel", "android");
+        sent.put("channel", "uni-android");
         sent.put("deviceId", getDeviceId(context));
         sent.put("deviceName", Build.MODEL);
         sent.put("appVersion", getVersionName(context));
         sent.put("osVersion", Build.VERSION.RELEASE);
         sent.put("packageName", context.getPackageName());
         sent.put("language", getLanguage());
+        // todo 增加推送信息
+        sent.put("clientId", JPushInterface.getRegistrationID(BogoApplication.getInstance()));
         sent.setTimestamp(System.currentTimeMillis());
         sendRequest(context, sent);
     }

BIN
app/src/main/res/drawable-hdpi/push_small.png


BIN
app/src/main/res/drawable-xhdpi/push_small.png


BIN
app/src/main/res/drawable-xxhdpi/push_small.png


+ 72 - 69
app/src/main/res/layout/activity_livekit_meet_home.xml

@@ -9,30 +9,33 @@
 
     <androidx.constraintlayout.widget.ConstraintLayout
         android:id="@+id/create_bar"
-        android:clipToPadding="false"
-        android:layout_below="@id/appbar"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
+        android:paddingVertical="5dp"
+        android:layout_below="@id/appbar"
+        android:clipToPadding="false"
         android:orientation="horizontal">
 
         <LinearLayout
-            app:layout_constraintEnd_toStartOf="@id/bolt_create_room"
-            app:layout_constraintHorizontal_chainStyle="spread"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintBottom_toBottomOf="parent"
-            android:background="@drawable/card_primary_background"
-            android:onClick="onJoinRoomClicked"
             android:id="@+id/join_meet_room"
-            android:gravity="center_horizontal"
             android:layout_width="0dp"
-            app:layout_constraintHorizontal_weight="1"
-            app:layout_constraintDimensionRatio="1:1"
-            android:paddingTop="15dp"
-            android:paddingBottom="15dp"
+            android:layout_height="wrap_content"
             android:layout_marginStart="16dp"
             android:layout_marginEnd="8dp"
+            android:background="@drawable/card_primary_background"
+            android:backgroundTint="@color/md_theme_surfaceContainerLow"
+            android:elevation="5dp"
+            android:gravity="center_horizontal"
+            android:onClick="onJoinRoomClicked"
             android:orientation="vertical"
-            android:layout_height="wrap_content">
+            android:paddingTop="15dp"
+            android:paddingBottom="15dp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintDimensionRatio="1:1"
+            app:layout_constraintEnd_toStartOf="@id/bolt_create_room"
+            app:layout_constraintHorizontal_chainStyle="spread"
+            app:layout_constraintHorizontal_weight="1"
+            app:layout_constraintStart_toStartOf="parent">
 
             <ImageView
                 android:layout_width="40dp"
@@ -40,34 +43,36 @@
                 app:srcCompat="@drawable/icon_livekit_meet_join" />
 
             <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
                 android:layout_gravity="center_horizontal"
-                android:textColor="?colorOnPrimaryContainer"
                 android:layout_marginTop="8dp"
-                android:layout_width="wrap_content"
                 android:text="@string/label_join_meet_room"
+                android:textColor="?colorOnPrimaryContainer"
                 android:textSize="14sp"
-                android:textStyle="bold"
-                android:layout_height="wrap_content" />
+                android:textStyle="bold" />
         </LinearLayout>
 
         <LinearLayout
-            app:layout_constraintHorizontal_weight="1"
-            app:layout_constraintDimensionRatio="1:1"
-            app:layout_constraintVertical_chainStyle="spread"
-            app:layout_constraintEnd_toStartOf="@id/due_create_room"
-            app:layout_constraintStart_toEndOf="@id/join_meet_room"
-            app:layout_constraintBottom_toBottomOf="parent"
-            android:background="@drawable/card_primary_background"
-            android:onClick="onCreateClicked"
             android:id="@+id/bolt_create_room"
-            android:gravity="center_horizontal"
             android:layout_width="0dp"
-            android:paddingTop="15dp"
-            android:paddingBottom="15dp"
+            android:layout_height="wrap_content"
             android:layout_marginStart="8dp"
             android:layout_marginEnd="8dp"
+            android:background="@drawable/card_primary_background"
+            android:backgroundTint="@color/md_theme_surfaceContainerLow"
+            android:elevation="5dp"
+            android:gravity="center_horizontal"
+            android:onClick="onCreateClicked"
             android:orientation="vertical"
-            android:layout_height="wrap_content">
+            android:paddingTop="15dp"
+            android:paddingBottom="15dp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintDimensionRatio="1:1"
+            app:layout_constraintEnd_toStartOf="@id/due_create_room"
+            app:layout_constraintHorizontal_weight="1"
+            app:layout_constraintStart_toEndOf="@id/join_meet_room"
+            app:layout_constraintVertical_chainStyle="spread">
 
             <ImageView
                 android:layout_width="40dp"
@@ -75,33 +80,34 @@
                 app:srcCompat="@drawable/icon_livekit_meet_bolt" />
 
             <TextView
-                android:textColor="?colorOnPrimaryContainer"
-                android:layout_marginTop="8dp"
                 android:layout_width="wrap_content"
-                android:textSize="14sp"
-                android:textStyle="bold"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="8dp"
                 android:text="@string/label_create_meet_room"
-                android:layout_height="wrap_content" />
+                android:textColor="?colorOnPrimaryContainer"
+                android:textSize="14sp"
+                android:textStyle="bold" />
         </LinearLayout>
 
         <LinearLayout
-            app:layout_constraintHorizontal_weight="1"
-            app:layout_constraintDimensionRatio="1:1"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toEndOf="@id/bolt_create_room"
-            app:layout_constraintBottom_toBottomOf="parent"
-            android:background="@drawable/card_primary_background"
-            android:onClick="onDueCreateClicked"
             android:id="@+id/due_create_room"
-            android:gravity="center_horizontal"
             android:layout_width="0dp"
-            android:orientation="vertical"
             android:layout_height="wrap_content"
-            android:paddingTop="15dp"
-            android:paddingBottom="15dp"
             android:layout_marginStart="8dp"
             android:layout_marginEnd="16dp"
-            >
+            android:background="@drawable/card_primary_background"
+            android:backgroundTint="@color/md_theme_surfaceContainerLow"
+            android:elevation="5dp"
+            android:gravity="center_horizontal"
+            android:onClick="onDueCreateClicked"
+            android:orientation="vertical"
+            android:paddingTop="15dp"
+            android:paddingBottom="15dp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintDimensionRatio="1:1"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintHorizontal_weight="1"
+            app:layout_constraintStart_toEndOf="@id/bolt_create_room">
 
             <ImageView
                 android:layout_width="40dp"
@@ -109,34 +115,33 @@
                 app:srcCompat="@drawable/icon_livekit_meet_due" />
 
             <TextView
-                android:textColor="?colorOnPrimaryContainer"
-                android:layout_marginTop="8dp"
                 android:layout_width="wrap_content"
-                android:textSize="14sp"
-                android:textStyle="bold"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="8dp"
                 android:text="@string/label_due_meet_room"
-                android:layout_height="wrap_content" />
+                android:textColor="?colorOnPrimaryContainer"
+                android:textSize="14sp"
+                android:textStyle="bold" />
         </LinearLayout>
 
     </androidx.constraintlayout.widget.ConstraintLayout>
 
     <com.google.android.material.button.MaterialButtonToggleGroup
-        android:layout_below="@id/create_bar"
-        android:layout_marginTop="24dp"
         android:id="@+id/recordToggleGroup"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
+        android:layout_below="@id/create_bar"
         android:layout_centerHorizontal="true"
-        >
+        android:layout_marginTop="10dp">
+
         <Button
             android:id="@+id/toggle_me_created"
             style="@style/Widget.App.Button.OutlinedButton.IconOnly"
-            android:text="@string/label_me_created"
-            android:paddingTop="8dp"
-            android:paddingBottom="8dp"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-        />
+            android:paddingTop="8dp"
+            android:paddingBottom="8dp"
+            android:text="@string/label_me_created" />
 
         <Button
             android:id="@+id/toggle_me_joined"
@@ -145,29 +150,27 @@
             android:layout_height="wrap_content"
             android:paddingTop="8dp"
             android:paddingBottom="8dp"
-            android:text="@string/label_me_joined"
-        />
+            android:text="@string/label_me_joined" />
 
     </com.google.android.material.button.MaterialButtonToggleGroup>
 
     <androidx.recyclerview.widget.RecyclerView
-        android:layout_marginTop="16dp"
         android:id="@+id/recyclerView"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
         android:layout_below="@id/recordToggleGroup"
+        android:layout_marginTop="10dp"
         android:overScrollMode="never"
-        android:scrollbars="none"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"/>
+        android:scrollbars="none" />
 
 
     <com.bogo.android.common.widget.GlobalEmptyView
         android:id="@+id/emptyView"
-        android:layout_below="@id/recordToggleGroup"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
+        android:layout_below="@id/recordToggleGroup"
         android:layout_centerHorizontal="true"
-        android:layout_marginTop="48dp"
         android:layout_gravity="center"
-        android:visibility="gone"
-        />
+        android:layout_marginTop="48dp"
+        android:visibility="gone" />
 </RelativeLayout>

+ 37 - 35
app/src/main/res/layout/activity_note_list.xml

@@ -14,89 +14,92 @@
         <com.google.android.material.appbar.MaterialToolbar
             android:id="@id/toolbar"
             android:layout_width="match_parent"
-            app:titleTextAppearance="@style/App.Widget.Toolbar.Title"
-            android:layout_height="?actionBarSize" />
+            android:layout_height="?actionBarSize"
+            app:titleCentered="true"
+            app:titleTextAppearance="@style/App.Widget.Toolbar.Title" />
 
-        <include layout="@layout/layout_search_view" android:id="@+id/header"/>
+        <include
+            android:id="@+id/header"
+            layout="@layout/layout_search_view" />
 
         <com.google.android.material.button.MaterialButtonToggleGroup
             android:id="@+id/toggleGroup"
-            android:layout_gravity="center_horizontal"
-            app:singleSelection="true"
-            app:selectionRequired="false"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
+            android:layout_gravity="center_horizontal"
             android:layout_marginStart="5dp"
+            android:layout_marginTop="5dp"
             android:layout_marginEnd="5dp"
             android:layout_marginBottom="5dp"
-            >
+            app:selectionRequired="false"
+            app:singleSelection="true">
 
             <Button
                 android:id="@+id/toggle_text"
-                android:layout_weight="1"
+                style="@style/Widget.App.Button.OutlinedButton.IconOnly"
                 android:layout_width="wrap_content"
                 android:layout_height="32dp"
-                style="@style/Widget.App.Button.OutlinedButton.IconOnly"
-                android:textAppearance="?attr/textAppearanceLabelMedium"
-                android:text="@string/tag_note_text" />
+                android:layout_weight="1"
+                android:text="@string/tag_note_text"
+                android:textAppearance="?attr/textAppearanceLabelMedium" />
 
 
             <Button
                 android:id="@+id/toggle_image"
-                android:layout_weight="1"
                 style="@style/Widget.App.Button.OutlinedButton.IconOnly"
                 android:layout_width="wrap_content"
                 android:layout_height="32dp"
-                android:textAppearance="?attr/textAppearanceLabelMedium"
-                android:text="@string/tag_note_image" />
+                android:layout_weight="1"
+                android:text="@string/tag_note_image"
+                android:textAppearance="?attr/textAppearanceLabelMedium" />
 
             <Button
                 android:id="@+id/toggle_video"
-                android:layout_weight="1"
                 style="@style/Widget.App.Button.OutlinedButton.IconOnly"
-                android:textAppearance="?attr/textAppearanceLabelMedium"
                 android:layout_width="wrap_content"
                 android:layout_height="32dp"
-                android:text="@string/tag_note_video" />
+                android:layout_weight="1"
+                android:text="@string/tag_note_video"
+                android:textAppearance="?attr/textAppearanceLabelMedium" />
 
 
             <Button
                 android:id="@+id/toggle_map"
-                android:layout_weight="1"
                 style="@style/Widget.App.Button.OutlinedButton.IconOnly"
                 android:layout_width="wrap_content"
                 android:layout_height="32dp"
-                android:textAppearance="?attr/textAppearanceLabelMedium"
-                android:text="@string/tag_note_map" />
+                android:layout_weight="1"
+                android:text="@string/tag_note_map"
+                android:textAppearance="?attr/textAppearanceLabelMedium" />
 
 
             <Button
 
                 android:id="@+id/toggle_file"
-                android:layout_weight="1"
                 style="@style/Widget.App.Button.OutlinedButton.IconOnly"
                 android:layout_width="wrap_content"
                 android:layout_height="32dp"
-                android:textAppearance="?attr/textAppearanceLabelMedium"
-                android:text="@string/tag_note_file" />
+                android:layout_weight="1"
+                android:text="@string/tag_note_file"
+                android:textAppearance="?attr/textAppearanceLabelMedium" />
 
             <Button
                 android:id="@+id/toggle_chat"
-                android:layout_weight="1"
                 style="@style/Widget.App.Button.OutlinedButton.IconOnly"
                 android:layout_width="wrap_content"
                 android:layout_height="32dp"
-                android:textAppearance="?attr/textAppearanceLabelMedium"
-                android:text="@string/tag_note_chat" />
+                android:layout_weight="1"
+                android:text="@string/tag_note_chat"
+                android:textAppearance="?attr/textAppearanceLabelMedium" />
 
             <Button
                 android:id="@+id/toggle_link"
-                android:layout_weight="1"
                 style="@style/Widget.App.Button.OutlinedButton.IconOnly"
                 android:layout_width="wrap_content"
                 android:layout_height="32dp"
-                android:textAppearance="?attr/textAppearanceLabelMedium"
-                android:text="@string/tag_note_link" />
+                android:layout_weight="1"
+                android:text="@string/tag_note_link"
+                android:textAppearance="?attr/textAppearanceLabelMedium" />
         </com.google.android.material.button.MaterialButtonToggleGroup>
 
     </com.google.android.material.appbar.AppBarLayout>
@@ -114,16 +117,15 @@
         android:layout_height="wrap_content"
         android:layout_centerInParent="true"
         android:layout_gravity="center"
-        android:visibility="gone"
-        />
+        android:visibility="gone" />
 
 
     <com.google.android.material.floatingactionbutton.FloatingActionButton
         android:id="@+id/addButton"
-        android:layout_alignParentBottom="true"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
         android:layout_alignParentEnd="true"
+        android:layout_alignParentBottom="true"
         android:layout_margin="20dp"
-        app:srcCompat="@drawable/icon_add_simple"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content" />
+        app:srcCompat="@drawable/icon_add_simple" />
 </RelativeLayout>

+ 1 - 1
app/src/main/res/layout/activity_register.xml

@@ -287,7 +287,7 @@
         android:layout_marginBottom="10dp"
         android:gravity="center"
         android:onClick="onRegisterButtonClicked"
-        android:text="@string/label_reset_password"
+        android:text="@string/label_register"
         android:textColor="@color/md_theme_onPrimary"
         android:textSize="16dp"
         app:background_normal="@color/md_theme_primary"

+ 47 - 56
app/src/main/res/layout/activity_setting.xml

@@ -5,43 +5,46 @@
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
+    xmlns:tools="http://schemas.android.com/tools"
     android:orientation="vertical">
 
 
     <include layout="@layout/layout_global_toolbar" />
 
     <androidx.core.widget.NestedScrollView
-        android:scrollbars="none"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content">
+        android:layout_height="wrap_content"
+        android:background="?colorSurfaceContainerHigh"
+        android:scrollbars="none">
 
         <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
+            android:layout_margin="10dp"
+            android:background="@drawable/item_background_single_corner"
+            android:backgroundTint="@color/md_theme_surface"
             android:orientation="vertical">
 
 
             <LinearLayout
-                android:layout_marginTop="10dp"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
                 android:layout_marginStart="5dp"
                 android:layout_marginEnd="5dp"
-                android:background="@drawable/item_background_single_corner"
-                android:orientation="vertical"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content">
+                android:orientation="vertical">
 
                 <RelativeLayout
                     android:layout_width="match_parent"
-                    android:layout_height="60dp"
+                    android:layout_height="50dp"
                     android:background="?selectableItemBackground"
                     android:onClick="onMessageConfigClicked">
 
                     <TextView
-                        android:drawablePadding="10dp"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:layout_centerVertical="true"
                         android:layout_marginStart="8dp"
+                        android:drawablePadding="10dp"
                         android:text="@string/label_setting_notify"
                         android:textColor="?colorOnSurfaceVariant"
                         android:textSize="16sp"
@@ -57,8 +60,7 @@
 
                 <RelativeLayout
                     android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:background="@drawable/item_background_single_corner">
+                    android:layout_height="wrap_content">
 
                     <TextView
                         android:layout_width="wrap_content"
@@ -86,10 +88,10 @@
                         android:layout_marginStart="10dp"
                         android:layout_marginEnd="10dp"
                         android:layout_marginBottom="10dp"
-                        android:textSize="14sp"
+                        android:alpha="0.75"
                         android:text="@string/hint_persist_notification"
                         android:textColor="?colorOnSurfaceVariant"
-                        android:alpha="0.75" />
+                        android:textSize="14sp" />
                 </RelativeLayout>
 
                 <RelativeLayout
@@ -116,42 +118,40 @@
                         android:layout_marginEnd="5dp" />
 
                     <TextView
-                        android:layout_below="@id/switch_window"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
-                        android:textSize="14sp"
+                        android:layout_below="@id/switch_window"
                         android:layout_marginStart="10dp"
                         android:layout_marginEnd="10dp"
                         android:layout_marginBottom="10dp"
+                        android:alpha="0.75"
                         android:text="@string/hint_setting_float_window"
                         android:textColor="?colorOnSurfaceVariant"
-                        android:alpha="0.75" />
+                        android:textSize="14sp" />
                 </RelativeLayout>
 
 
             </LinearLayout>
 
             <LinearLayout
-                android:layout_marginTop="10dp"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
                 android:layout_marginStart="5dp"
                 android:layout_marginEnd="5dp"
-                android:background="@drawable/item_background_single_corner"
-                android:orientation="vertical"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content">
+                android:backgroundTint="@color/md_theme_surface"
+                android:orientation="vertical">
 
                 <RelativeLayout
                     android:layout_width="match_parent"
-                    android:layout_height="60dp"
-                    android:background="?selectableItemBackground"
+                    android:layout_height="50dp"
                     android:onClick="onThemeModeClicked">
 
                     <TextView
-                        android:drawablePadding="10dp"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:layout_centerVertical="true"
                         android:layout_marginStart="8dp"
+                        android:drawablePadding="10dp"
                         android:text="@string/label_setting_day_night_mode"
                         android:textColor="?colorOnSurfaceVariant"
                         android:textSize="16sp"
@@ -176,11 +176,11 @@
                 </RelativeLayout>
 
                 <RelativeLayout
-                    android:visibility="gone"
                     android:id="@+id/item_dynamic_color"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:background="@drawable/item_background_single_corner">
+                    android:visibility="gone"
+                    tools:visibility="visible">
 
 
                     <TextView
@@ -210,25 +210,21 @@
                         android:layout_marginTop="10dp"
                         android:layout_marginEnd="10dp"
                         android:layout_marginBottom="10dp"
-                        android:textSize="14sp"
+                        android:alpha="0.75"
                         android:text="@string/hint_dynamic_color_mode"
                         android:textColor="?colorOnSurfaceVariant"
-                        android:alpha="0.75" />
+                        android:textSize="14sp" />
                 </RelativeLayout>
 
 
             </LinearLayout>
 
 
-
-
             <LinearLayout
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:layout_marginTop="10dp"
                 android:layout_marginStart="5dp"
                 android:layout_marginEnd="5dp"
-                android:background="@drawable/item_background_single_corner"
                 android:orientation="vertical">
 
                 <RelativeLayout
@@ -238,11 +234,11 @@
                     android:onClick="onKeepLiveClicked">
 
                     <TextView
-                        android:drawablePadding="10dp"
-                        android:layout_marginStart="8dp"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:layout_centerVertical="true"
+                        android:layout_marginStart="8dp"
+                        android:drawablePadding="10dp"
                         android:text="@string/label_setting_keeplive"
                         android:textColor="?colorOnSurfaceVariant"
                         android:textSize="16sp"
@@ -262,34 +258,32 @@
                     android:layout_marginStart="10dp"
                     android:layout_marginEnd="10dp"
                     android:layout_marginBottom="10dp"
+                    android:alpha="0.75"
                     android:text="@string/hint_persist_keep_live"
-                    android:textSize="14sp"
                     android:textColor="?colorOnSurfaceVariant"
-                    android:alpha="0.75" />
+                    android:textSize="14sp" />
             </LinearLayout>
 
 
             <LinearLayout
-                android:layout_marginTop="10dp"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
                 android:layout_marginStart="5dp"
                 android:layout_marginEnd="5dp"
                 android:layout_marginBottom="20dp"
-                android:background="@drawable/item_background_single_corner"
-                android:layout_width="match_parent"
-                android:orientation="vertical"
-                android:layout_height="wrap_content">
+                android:orientation="vertical">
+
                 <RelativeLayout
                     android:layout_width="match_parent"
-                    android:background="?android:selectableItemBackground"
-                    android:layout_height="60dp"
+                    android:layout_height="50dp"
                     android:onClick="onLanguageClicked">
 
                     <TextView
-                        android:drawablePadding="10dp"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:layout_centerVertical="true"
                         android:layout_marginStart="8dp"
+                        android:drawablePadding="10dp"
                         android:text="@string/label_setting_language"
                         android:textColor="?colorOnSurfaceVariant"
                         android:textSize="16sp"
@@ -306,25 +300,24 @@
 
                     <ImageView
                         android:id="@+id/language_icon"
-                        android:layout_marginEnd="5dp"
-                        android:layout_toStartOf="@id/language_arrow"
                         android:layout_width="24dp"
                         android:layout_height="wrap_content"
+                        android:layout_marginEnd="5dp"
+                        android:layout_toStartOf="@id/language_arrow"
                         app:srcCompat="@drawable/icon_country_china" />
                 </RelativeLayout>
 
                 <RelativeLayout
                     android:layout_width="match_parent"
-                    android:background="?android:selectableItemBackground"
-                    android:layout_height="60dp"
+                    android:layout_height="50dp"
                     android:onClick="onAccountSyncClicked">
 
                     <TextView
-                        android:drawablePadding="10dp"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:layout_centerVertical="true"
                         android:layout_marginStart="8dp"
+                        android:drawablePadding="10dp"
                         android:text="@string/label_setting_sync_data"
                         android:textColor="?colorOnSurfaceVariant"
                         android:textSize="16sp"
@@ -340,20 +333,19 @@
 
                 <RelativeLayout
                     android:layout_width="match_parent"
-                    android:layout_height="60dp"
-                    android:background="?android:selectableItemBackground"
+                    android:layout_height="50dp"
                     android:onClick="onAboutClicked">
 
                     <TextView
-                        app:drawableStartCompat="@drawable/icon_menu_about"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:layout_centerVertical="true"
-                        android:drawablePadding="10dp"
                         android:layout_marginStart="8dp"
+                        android:drawablePadding="10dp"
                         android:text="@string/label_setting_about"
                         android:textColor="?colorOnSurfaceVariant"
-                        android:textSize="16sp" />
+                        android:textSize="16sp"
+                        app:drawableStartCompat="@drawable/icon_menu_about" />
 
                     <ImageView
                         android:layout_width="wrap_content"
@@ -366,8 +358,7 @@
 
                 <RelativeLayout
                     android:layout_width="match_parent"
-                    android:layout_height="60dp"
-                    android:background="?android:selectableItemBackground"
+                    android:layout_height="50dp"
                     android:onClick="onCloseAppClicked">
 
                     <TextView