From a3d26981fb0ff2049a55d08c447c73e114a45384 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期五, 29 十二月 2023 15:09:20 +0800
Subject: [PATCH] 加入极光推送SDK

---
 app/src/main/res/layout/net_loding.xml                                           |   17 +
 app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java                         |  155 +++++++++++
 app/src/main/res/values/styles.xml                                               |   19 +
 app/src/main/java/com/dayu/pipirrapp/service/PushService.java                    |   19 +
 app/src/main/AndroidManifest.xml                                                 |   27 +
 app/src/main/java/com/dayu/pipirrapp/net/subscribers/ProgressSubscriber.java     |  131 ++++++++++
 app/src/main/java/com/dayu/pipirrapp/MyApplication.java                          |    4 
 app/src/main/java/com/dayu/pipirrapp/net/progress/ProgressCancelListener.java    |    9 
 app/src/main/res/values/colors.xml                                               |    1 
 app/src/main/java/com/dayu/pipirrapp/net/progress/NetLoadingDialog.java          |   68 +++++
 app/src/main/java/com/dayu/pipirrapp/net/BaseResponse.java                       |   11 
 app/src/main/java/com/dayu/pipirrapp/net/subscribers/SubscriberListener.java     |   24 +
 build.gradle                                                                     |    3 
 app/src/main/res/layout/activity_main.xml                                        |   24 
 app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java                  |   18 +
 app/src/main/java/com/dayu/pipirrapp/adapter/TabAdapter.java                     |   23 +
 app/src/main/java/com/dayu/pipirrapp/net/progress/ProgressDialogHandler.java     |   84 ++++++
 app/src/main/java/com/dayu/pipirrapp/net/subscribers/BaseProgressSubscriber.java |   65 +++++
 app/build.gradle                                                                 |   33 ++
 19 files changed, 710 insertions(+), 25 deletions(-)

diff --git a/app/build.gradle b/app/build.gradle
index 450820a..f970e16 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -80,4 +80,37 @@
     implementation 'com.pnikosis:materialish-progress:1.7'
 
 
+
+
+
+    //鎺ㄩ�佺浉鍏�
+    // 姝ゅ浠Push 5.0.0 鐗堟湰涓轰緥锛�5.0.0 鐗堟湰寮�濮嬪彲浠ヨ嚜鍔ㄦ媺鍙� JCore 鍖咃紝鏃犻渶鍙﹀閰嶇疆
+    implementation 'cn.jiguang.sdk:jpush:5.2.2'
+    //鑻ヤ笉闆嗘垚鍘傚晢閫氶亾锛屽彲鐩存帴璺宠繃浠ヤ笅渚濊禆
+    // 鏋佸厜鍘傚晢鎻掍欢鐗堟湰涓庢帴鍏� JPush 鐗堟湰淇濇寔涓�鑷达紝涓嬪悓
+    // 鎺ュ叆鍗庝负鍘傚晢
+    implementation 'com.huawei.hms:push:6.5.0.300'
+    implementation 'cn.jiguang.sdk.plugin:huawei:5.2.2'
+    // 鎺ュ叆 FCM 鍘傚晢
+    implementation 'com.google.firebase:firebase-messaging:23.0.5'
+    implementation 'cn.jiguang.sdk.plugin:fcm:5.2.2'
+    // 鎺ュ叆榄呮棌鍘傚晢
+    implementation 'cn.jiguang.sdk.plugin:meizu:5.2.2'
+    // 鎺ュ叆 VIVO 鍘傚晢
+    implementation 'cn.jiguang.sdk.plugin:vivo:5.2.2'
+    // 鎺ュ叆灏忕背鍘傚晢
+    implementation 'cn.jiguang.sdk.plugin:xiaomi:5.2.2'
+    // 鎺ュ叆 OPPO 鍘傚晢
+    implementation 'cn.jiguang.sdk.plugin:oppo:5.2.2'
+    // JPush Android SDK v4.6.0 寮�濮嬶紝闇�瑕佸崟鐙紩鍏� oppo 鍘傚晢 aar 锛岃涓嬭浇瀹樼綉 SDK 鍖呭苟鎶� jpush-android-xxx-release/third-push/oppo/libs 涓嬬殑 aar 鏂囦欢鍗曠嫭鎷疯礉涓�浠藉埌搴旂敤 module/libs 涓�
+    implementation(name: 'com.heytap.msp-push-3.1.0', ext: 'aar')
+    //浠ヤ笅涓� OPPO 3.1.0 aar闇�瑕佷緷璧�
+    implementation 'com.google.code.gson:gson:2.6.2'
+    implementation 'commons-codec:commons-codec:1.6'
+    implementation 'androidx.annotation:annotation:1.1.0'
+    // 鎺ュ叆鑽h��鍘傚晢
+    implementation 'cn.jiguang.sdk.plugin:honor:5.2.2'
+
+//    apply plugin: 'com.google.gms.google-services'
+    apply plugin: 'com.huawei.agconnect'
 }
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 713fc0e..417fc70 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -26,8 +26,31 @@
             </intent-filter>
         </activity>
         <!--        <activity android:name=".activity.MainActivity" />-->
-
-
+        <!-- Required since 5.2.0 -->
+        <!-- 鏂扮殑 tag/alias 鎺ュ彛缁撴灉杩斿洖闇�瑕佸紑鍙戣�呴厤缃竴涓嚜瀹氫箟鐨凷ervice -->
+        <!-- 3.3.0寮�濮嬫墍鏈変簨浠跺皢閫氳繃璇ョ被鍥炶皟 -->
+        <!-- 5.2.0寮�濮嬫墍鏈変簨浠跺皢閫氳繃璇ョ被鍥炶皟 -->
+        <!-- 璇ュ箍鎾渶瑕佺户鎵� JPush 鎻愪緵鐨� JPushMessageService 绫�, 骞跺涓嬫柊澧炰竴涓� Intent-Filter -->
+        <service
+            android:name=".service.PushService"
+            android:enabled="true"
+            android:exported="false">
+            <intent-filter>
+                <action android:name="cn.jpush.android.intent.SERVICE_MESSAGE" />
+                <category android:name="com.dayu.pipirrapp" />
+            </intent-filter>
+        </service>
+        <!-- Since JCore2.0.0 Required SDK鏍稿績鍔熻兘-->
+        <!-- 鍙厤缃產ndroid:process鍙傛暟灏哠ervice鏀惧湪鍏朵粬杩涚▼涓紱android:enabled灞炴�т笉鑳芥槸false -->
+        <!-- 杩欎釜鏄嚜瀹氫箟Service锛岃缁ф壙鏋佸厜JCommonService锛屽彲浠ュ湪鏇村鎵嬫満骞冲彴涓婁娇寰楁帹閫侀�氶亾淇濇寔鐨勬洿绋冲畾 -->
+        <service android:name="xx.xx.XService"
+            android:enabled="true"
+            android:exported="false"
+            android:process=":pushcore">
+            <intent-filter>
+                <action android:name="cn.jiguang.user.service.action" />
+            </intent-filter>
+        </service>
     </application>
 
 </manifest>
\ No newline at end of file
diff --git a/app/src/main/java/com/dayu/pipirrapp/MyApplication.java b/app/src/main/java/com/dayu/pipirrapp/MyApplication.java
index fe96f6a..9966b8d 100644
--- a/app/src/main/java/com/dayu/pipirrapp/MyApplication.java
+++ b/app/src/main/java/com/dayu/pipirrapp/MyApplication.java
@@ -2,6 +2,8 @@
 
 import android.app.Application;
 
+import cn.jpush.android.api.JPushInterface;
+
 /**
  * author: zuo
  * Date: 2023/12/21
@@ -15,5 +17,7 @@
     public void onCreate() {
         super.onCreate();
         myApplication = this;
+        JPushInterface.setDebugMode(true);
+        JPushInterface.init(this);
     }
 }
diff --git a/app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java b/app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java
index 15b6c0e..5a8268d 100644
--- a/app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java
+++ b/app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java
@@ -1,9 +1,11 @@
 package com.dayu.pipirrapp.activity;
 
 import android.os.Bundle;
+import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.MotionEvent;
 import android.view.View;
+import android.widget.Toast;
 
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.fragment.app.Fragment;
@@ -49,5 +51,21 @@
         binding.tabLayout.setupWithViewPager(binding.viewPager);
     }
 
+    long mExitTime;
+
+    //鐐瑰嚮涓ゆ閫�鍑虹▼搴� 鏈夋椂闂撮棿闅� 闂撮殧鍐呯偣鍑诲垯閫�鍑虹▼搴� 鍚﹀垯 鍒欐彁绀�
+    @Override
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        if (keyCode == KeyEvent.KEYCODE_BACK) {
+            if ((System.currentTimeMillis() - mExitTime) > 2000) {
+                Toast.makeText(MainActivity.this, "鍐嶆寜涓�娆¢��鍑虹▼搴�", Toast.LENGTH_SHORT).show();
+                mExitTime = System.currentTimeMillis();
+            } else {
+                MainActivity.this.finish();
+            }
+            return true;
+        }
+        return super.onKeyDown(keyCode, event);
+    }
 
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/dayu/pipirrapp/adapter/TabAdapter.java b/app/src/main/java/com/dayu/pipirrapp/adapter/TabAdapter.java
index 347c4b8..6d5bd0e 100644
--- a/app/src/main/java/com/dayu/pipirrapp/adapter/TabAdapter.java
+++ b/app/src/main/java/com/dayu/pipirrapp/adapter/TabAdapter.java
@@ -35,9 +35,22 @@
         return 3; // 鍋囪鏈変笁涓爣绛�
     }
 
-//    @Override
-//    public CharSequence getPageTitle(int position) {
-//        // 杩斿洖鏍囩鐨勬爣棰�
-//        return "Tab " + (position + 1);
-//    }
+    @Override
+    public CharSequence getPageTitle(int position) {
+        String text = "";
+        switch (position) {
+            case 0:
+                text = "棣栭〉";
+                break;
+            case 1:
+                text = "鍦板浘";
+                break;
+            case 2:
+                text = "鎴戠殑";
+                break;
+        }
+
+        // 杩斿洖鏍囩鐨勬爣棰�
+        return text;
+    }
 }
diff --git a/app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java b/app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java
new file mode 100644
index 0000000..e1e46c2
--- /dev/null
+++ b/app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java
@@ -0,0 +1,155 @@
+package com.dayu.pipirrapp.net;
+
+import android.content.Context;
+
+
+import com.dayu.pipirrapp.net.subscribers.BaseProgressSubscriber;
+import com.dayu.pipirrapp.net.subscribers.ProgressSubscriber;
+import com.dayu.pipirrapp.net.subscribers.SubscriberListener;
+import com.dayu.pipirrapp.utils.MyJsonParser;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
+import io.reactivex.rxjava3.annotations.NonNull;
+import io.reactivex.rxjava3.core.Observable;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+import io.reactivex.rxjava3.functions.Function;
+import io.reactivex.rxjava3.schedulers.Schedulers;
+import okhttp3.MediaType;
+import okhttp3.MultipartBody;
+import okhttp3.RequestBody;
+import okhttp3.ResponseBody;
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Response;
+
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuot
+ * Date: 2023-04-12 9:11
+ * Description:
+ */
+public class ApiManager {
+
+    static ApiManager apiManager;
+    //鏂囦欢涓婁紶澶辫触閲嶅娆℃暟
+    int uplodFilerepeatSize = 3;
+
+    ApiService apiService;
+
+    public static void init() {
+        if (apiManager == null) {
+            apiManager = new ApiManager();
+        }
+    }
+
+    public ApiManager() {
+        apiService = RetrofitClient.getInstance().getApiService();
+    }
+
+    public static ApiManager getInstance() {
+        return apiManager;
+    }
+
+
+    public <T> void requestPostLoading(final Context context, final String path, final Class<T> tClass, final Map<String, Object> params, final SubscriberListener listener) {
+        request(context, false, path, false, tClass, params, listener);
+    }
+
+    public <T> void requestPostHideLoading(final Context context, final String path, final Class<T> tClass, final Map<String, Object> params, final SubscriberListener listener) {
+        request(context, true, path, false, tClass, params, listener);
+    }
+
+    public <T> void requestPost(final Context context, final String path, final Class<T> tClass, final Map<String, Object> params, final SubscriberListener listener) {
+        request(context, false, path, false, tClass, params, listener);
+    }
+
+    /**
+     * 鍙戦�佽姹�
+     *
+     * @param context
+     * @param hideLoading 鏄惁鏄剧ず鍔犺浇妗�  false锛氭樉绀�  true锛氶殣钘�
+     * @param path        璇锋眰璺緞锛屽湪UrlConfig涓畾涔�
+     * @param isGet       鏄惁鏄疓et璇锋眰 true锛歡et 璇锋眰
+     * @param tClass      瀵瑰簲鐨勬暟鎹被鍨�
+     * @param params      Post璇锋眰鏃讹紝瀵瑰簲鐨勫弬鏁�
+     * @param listener    鍥炶皟璇锋眰
+     * @param <T>
+     */
+    public <T> void request(final Context context, final boolean hideLoading, final String path, final boolean isGet, final Class<T> tClass, final Map<String, Object> params, final SubscriberListener listener) {
+        Observable observable;
+        BaseProgressSubscriber<?> mySubscriber;
+
+
+        if (isGet) {
+            if (params == null) {
+                observable = apiService.requestGet(path);
+            } else {
+
+                observable = apiService.requestGet(path, params);
+            }
+        } else {
+            observable = apiService.requestPost(path, params);
+        }
+
+        mySubscriber = new ProgressSubscriber(context, hideLoading, listener);
+        observable.subscribeOn(Schedulers.io()).
+                map(new Function<Object, BaseResponse<T>>() {
+                    @Override
+                    public BaseResponse<T> apply(Object o) {
+                        if (o instanceof BaseResponse) {
+                            BaseResponse tem = (BaseResponse) o;
+                            BaseResponse<T> response = new BaseResponse<>();
+                            response.setCode(tem.getCode());
+                            response.setMsg(tem.getMsg());
+
+                            if (tClass != null && tem.getContent() instanceof Map) {
+                                try {
+//                                    response.setData(MyJsonParser.getBeanFromMap((Map<String, Object>) tem.getData(), tClass));
+                                    String jsonData = MyJsonParser.getJsontoMap((Map) tem.getContent());
+                                    response.setContent(MyJsonParser.getBeanFromJson(jsonData, tClass));
+                                } catch (Exception e) {
+                                    e.printStackTrace();
+                                }
+                            } else if (tClass != null && tem.getContent() instanceof List) {
+                                try {
+                                    response.setContent((T) MyJsonParser.getListByJson(MyJsonParser.getJsonbyList((List) tem.getContent()), tClass));
+                                } catch (Exception e) {
+                                    e.printStackTrace();
+                                }
+                            } else if (tClass != null && tem.getContent() instanceof Integer) {
+                                response.setContent((T) tem.getContent());
+                            }
+                            if (tClass != null && tClass.getName() instanceof String && tem.getContent() instanceof String) {
+                                try {
+                                    response.setContent((T) tem.getContent());
+                                } catch (Exception e) {
+                                    e.printStackTrace();
+                                }
+                            }
+                            return response;
+
+
+                        }
+
+                        return null;
+                    }
+                })
+                .unsubscribeOn(Schedulers.newThread())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(mySubscriber);
+
+    }
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/dayu/pipirrapp/net/BaseResponse.java b/app/src/main/java/com/dayu/pipirrapp/net/BaseResponse.java
index 1e2552c..607843a 100644
--- a/app/src/main/java/com/dayu/pipirrapp/net/BaseResponse.java
+++ b/app/src/main/java/com/dayu/pipirrapp/net/BaseResponse.java
@@ -9,7 +9,7 @@
 public class BaseResponse<T> {
     private int code;
     private String msg;
-    private T data;
+    private T content;
     private String stackErrorInfo;//鍫嗘爤閿欒鎻忚堪
 
 
@@ -51,12 +51,11 @@
         this.stackErrorInfo = stackErrorInfo;
     }
 
-    public T getData() {
-        return data;
+    public T getContent() {
+        return content;
     }
 
-    public void setData(T data) {
-        this.data = data;
+    public void setContent(T content) {
+        this.content = content;
     }
-
 }
diff --git a/app/src/main/java/com/dayu/pipirrapp/net/progress/NetLoadingDialog.java b/app/src/main/java/com/dayu/pipirrapp/net/progress/NetLoadingDialog.java
new file mode 100644
index 0000000..5fe0cc2
--- /dev/null
+++ b/app/src/main/java/com/dayu/pipirrapp/net/progress/NetLoadingDialog.java
@@ -0,0 +1,68 @@
+package com.dayu.pipirrapp.net.progress;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.graphics.drawable.AnimationDrawable;
+import android.view.Gravity;
+
+
+import com.dayu.pipirrapp.R;
+import com.pnikosis.materialishprogress.ProgressWheel;
+
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-04-12 9:32
+ * Description:
+ */
+public class NetLoadingDialog extends Dialog {
+
+    //private TextView mMessage;
+    private AnimationDrawable mAnimationDrawable;
+
+
+    public NetLoadingDialog(Context context) {
+        super(context, R.style.Theme_PipIrrApp);
+        init();
+    }
+
+    private void init() {
+        try {
+            int ws_pay_net_loading, iv_net_loading_anim;
+
+            getWindow().setGravity(Gravity.CENTER);
+            setContentView(R.layout.net_loding);
+            setCanceledOnTouchOutside(false);
+            ProgressWheel wheel = findViewById(R.id.progress_wheel);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    public void startAnim() {
+        try {
+            this.show();
+//            mHandler.postDelayed(new Runnable() {
+//                @Override
+//                public void run() {
+//                    mAnimationDrawable.start();
+//                }
+//            }, 100);
+        } catch (Exception e) {
+
+        }
+    }
+
+    public void stopAnim() {
+        try {
+//            mAnimationDrawable.stop();
+            this.dismiss();
+        } catch (Exception e) {
+
+        }
+    }
+
+
+}
diff --git a/app/src/main/java/com/dayu/pipirrapp/net/progress/ProgressCancelListener.java b/app/src/main/java/com/dayu/pipirrapp/net/progress/ProgressCancelListener.java
new file mode 100644
index 0000000..19adb9a
--- /dev/null
+++ b/app/src/main/java/com/dayu/pipirrapp/net/progress/ProgressCancelListener.java
@@ -0,0 +1,9 @@
+package com.dayu.pipirrapp.net.progress;
+
+/**
+ * Created by qwy on 16/3/10.
+ * 鍙栨秷杩涘害妗嗙洃鍚�
+ */
+public interface ProgressCancelListener {
+    void onCancelProgress();
+}
diff --git a/app/src/main/java/com/dayu/pipirrapp/net/progress/ProgressDialogHandler.java b/app/src/main/java/com/dayu/pipirrapp/net/progress/ProgressDialogHandler.java
new file mode 100644
index 0000000..932d2d8
--- /dev/null
+++ b/app/src/main/java/com/dayu/pipirrapp/net/progress/ProgressDialogHandler.java
@@ -0,0 +1,84 @@
+package com.dayu.pipirrapp.net.progress;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.os.Handler;
+import android.os.Message;
+
+
+/**
+ * Created by qwy on 16/3/10.
+ * 灞曠ず杩涘害瀵硅瘽妗�
+ */
+public class ProgressDialogHandler extends Handler {
+
+    public static final int SHOW_PROGRESS_DIALOG = 1;
+    public static final int DISMISS_PROGRESS_DIALOG = 2;
+
+    private NetLoadingDialog pd;
+
+    private Context context;
+    private boolean cancelable;
+    private ProgressCancelListener mProgressCancelListener;
+
+
+    public ProgressDialogHandler(Context context, ProgressCancelListener mProgressCancelListener,
+                                 boolean cancelable) {
+        super();
+        this.context = context;
+        this.mProgressCancelListener = mProgressCancelListener;
+        this.cancelable = cancelable;
+    }
+
+    private void initProgressDialog() {
+        try {
+            if (pd == null) {
+                pd = new NetLoadingDialog(context);
+                pd.setCancelable(cancelable);
+
+                if (cancelable) {
+                    pd.setOnCancelListener(new DialogInterface.OnCancelListener() {
+                        @Override
+                        public void onCancel(DialogInterface dialogInterface) {
+                            if (mProgressCancelListener != null)
+                            mProgressCancelListener.onCancelProgress();
+                        }
+                    });
+                }
+
+                if (!pd.isShowing()) {
+                    pd.startAnim();
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private void dismissProgressDialog() {
+        if (pd != null) {
+            try {
+                if (pd.isShowing()) {
+                    pd.dismiss();
+                }
+                pd.stopAnim();
+                pd = null;
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    @Override
+    public void handleMessage(Message msg) {
+        switch (msg.what) {
+            case SHOW_PROGRESS_DIALOG:
+                initProgressDialog();
+                break;
+            case DISMISS_PROGRESS_DIALOG:
+                dismissProgressDialog();
+                break;
+        }
+    }
+
+}
diff --git a/app/src/main/java/com/dayu/pipirrapp/net/subscribers/BaseProgressSubscriber.java b/app/src/main/java/com/dayu/pipirrapp/net/subscribers/BaseProgressSubscriber.java
new file mode 100644
index 0000000..58df211
--- /dev/null
+++ b/app/src/main/java/com/dayu/pipirrapp/net/subscribers/BaseProgressSubscriber.java
@@ -0,0 +1,65 @@
+package com.dayu.pipirrapp.net.subscribers;
+
+import android.content.Context;
+
+import androidx.annotation.NonNull;
+
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+
+
+/**
+ * Created by zuoxiao on 2017/8/11.
+ */
+
+public abstract class BaseProgressSubscriber<T> implements Observer<T> {
+
+
+    public BaseProgressSubscriber() {
+
+    }
+
+
+    @Override
+    public void onSubscribe(@NonNull Disposable d) {
+        onMyStart(d);
+    }
+
+//    @Override
+//    public void onSubscribe() {
+//
+//    }
+
+    @Override
+    public void onComplete() {
+        onMyCompleted();
+        onCloose();
+    }
+
+    @Override
+    public void onError(Throwable e) {
+        onMyError(e);
+        onCloose();
+    }
+
+    @Override
+    public void onNext(T t) {
+        onMyNext(t);
+    }
+
+    public abstract void onMyCompleted();
+
+    public abstract void onMyError(Throwable e);
+
+    public abstract void onMyNext(T t);
+
+    public abstract void onMyStart(Disposable d);
+
+    public abstract void onCloose();
+
+    public abstract BaseProgressSubscriber iniData(Context context, boolean hideLoading, SubscriberListener<T> mSubscriberListener);
+
+    public BaseProgressSubscriber initProgressSubscriber(Context context, boolean hideLoading, SubscriberListener<T> mSubscriberListener) {
+        return iniData(context, hideLoading, mSubscriberListener);
+    }
+}
diff --git a/app/src/main/java/com/dayu/pipirrapp/net/subscribers/ProgressSubscriber.java b/app/src/main/java/com/dayu/pipirrapp/net/subscribers/ProgressSubscriber.java
new file mode 100644
index 0000000..b092e96
--- /dev/null
+++ b/app/src/main/java/com/dayu/pipirrapp/net/subscribers/ProgressSubscriber.java
@@ -0,0 +1,131 @@
+package com.dayu.pipirrapp.net.subscribers;
+
+import android.content.Context;
+
+
+import com.dayu.pipirrapp.net.progress.ProgressCancelListener;
+import com.dayu.pipirrapp.net.progress.ProgressDialogHandler;
+
+import io.reactivex.rxjava3.disposables.Disposable;
+
+
+/**
+ * Created by qwy on 16/3/10.
+ * 鐢ㄤ簬鍦℉ttp璇锋眰寮�濮嬫椂锛岃嚜鍔ㄦ樉绀轰竴涓狿rogressDialog
+ * 鍦℉ttp璇锋眰缁撴潫鏄紝鍏抽棴ProgressDialog
+ * 璋冪敤鑰呰嚜宸卞璇锋眰鏁版嵁杩涜澶勭悊
+ */
+public class ProgressSubscriber<T> extends BaseProgressSubscriber<T> implements ProgressCancelListener {
+
+    private SubscriberListener mSubscriberListener;
+    private ProgressDialogHandler mProgressDialogHandler;
+    private boolean hideLoading = false;// 鏄惁闅愯棌鍔犺浇妗嗭紝榛樿灞曠ず
+    Disposable disposable;
+    private Context context;
+
+    public ProgressSubscriber() {
+    }
+
+    public ProgressSubscriber(Context context, SubscriberListener<T> mSubscriberListener) {
+        this.mSubscriberListener = mSubscriberListener;
+        this.context = context;
+        try {
+            mProgressDialogHandler = new ProgressDialogHandler(context, this, true);
+        } catch (Exception e) {
+        }
+    }
+
+    public ProgressSubscriber(Context context, boolean hideLoading, SubscriberListener<T> mSubscriberListener) {
+        this(context, mSubscriberListener);
+        this.hideLoading = hideLoading;
+    }
+
+    @Override
+    public ProgressSubscriber iniData(Context context, boolean hideLoading, SubscriberListener<T> mSubscriberListener) {
+        return new ProgressSubscriber(context, hideLoading, mSubscriberListener);
+    }
+
+    private void showProgressDialog() {
+        if (mProgressDialogHandler != null && !hideLoading) {
+            mProgressDialogHandler.obtainMessage(ProgressDialogHandler.SHOW_PROGRESS_DIALOG).sendToTarget();
+        }
+    }
+
+    public void dismissProgressDialog() {
+        try {
+            if (mProgressDialogHandler != null) {
+                mProgressDialogHandler.obtainMessage(ProgressDialogHandler.DISMISS_PROGRESS_DIALOG).sendToTarget();
+                mProgressDialogHandler = null;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 璁㈤槄寮�濮嬫椂璋冪敤
+     * 鏄剧ずProgressDialog
+     */
+    @Override
+    public void onMyStart(Disposable d) {
+        if (mSubscriberListener != null) {
+            mSubscriberListener.onStart();
+        }
+        disposable=d;
+        showProgressDialog();
+    }
+
+
+    @Override
+    public void onCloose() {
+        mSubscriberListener.onCloose();
+    }
+
+    /**
+     * 瀹屾垚锛岄殣钘廝rogressDialog
+     */
+    @Override
+    public void onMyCompleted() {
+        if (mSubscriberListener != null) {
+            mSubscriberListener.onCompleted();
+        }
+        dismissProgressDialog();
+    }
+
+    /**
+     * 瀵归敊璇繘琛岀粺涓�澶勭悊
+     * 闅愯棌ProgressDialog
+     *
+     * @param e
+     */
+    @Override
+    public void onMyError(Throwable e) {
+        if (mSubscriberListener != null) {
+            mSubscriberListener.onError(e);
+        }
+        dismissProgressDialog();
+
+    }
+
+    /**
+     * 灏唎nNext鏂规硶涓殑杩斿洖缁撴灉浜ょ粰Activity鎴朏ragment鑷繁澶勭悊
+     *
+     * @param t 鍒涘缓Subscriber鏃剁殑娉涘瀷绫诲瀷
+     */
+    @Override
+    public void onMyNext(T t) {
+        if (mSubscriberListener != null) {
+            mSubscriberListener.onNext(t);
+        }
+    }
+
+    /**
+     * 鍙栨秷ProgressDialog鐨勬椂鍊欙紝鍙栨秷瀵筼bservable鐨勮闃咃紝鍚屾椂涔熷彇娑堜簡http璇锋眰
+     */
+    @Override
+    public void onCancelProgress() {
+        if (!disposable.isDisposed()) {
+            disposable.dispose();
+        }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/dayu/pipirrapp/net/subscribers/SubscriberListener.java b/app/src/main/java/com/dayu/pipirrapp/net/subscribers/SubscriberListener.java
new file mode 100644
index 0000000..33fc879
--- /dev/null
+++ b/app/src/main/java/com/dayu/pipirrapp/net/subscribers/SubscriberListener.java
@@ -0,0 +1,24 @@
+package com.dayu.pipirrapp.net.subscribers;
+
+/**
+ * Created by qwy on 16/3/10.
+ * 鐩戝惉鍣�
+ */
+public abstract class SubscriberListener<BaseResponse> {
+    public abstract void onNext(BaseResponse t);
+
+    public void onCompleted() {
+    }
+
+
+    public void onStart() {
+    }
+
+
+    public void onError(Throwable e) {
+    }
+
+    public void onCloose(){
+
+    }
+}
diff --git a/app/src/main/java/com/dayu/pipirrapp/service/PushService.java b/app/src/main/java/com/dayu/pipirrapp/service/PushService.java
new file mode 100644
index 0000000..0163877
--- /dev/null
+++ b/app/src/main/java/com/dayu/pipirrapp/service/PushService.java
@@ -0,0 +1,19 @@
+package com.dayu.pipirrapp.service;
+
+import android.app.Service;
+import android.content.Intent;
+import android.os.IBinder;
+
+import androidx.annotation.Nullable;
+
+import cn.jpush.android.service.JPushMessageService;
+
+/**
+ * author: zuo
+ * Date: 2023-12-28
+ * Time: 10:29
+ * 澶囨敞锛氭帹閫佺殑鏈嶅姟
+ */
+public class PushService extends JPushMessageService {
+
+}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 6dd2f9f..4f2f815 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -27,20 +27,20 @@
         app:tabSelectedTextColor="#FFC107"
         app:tabTextColor="#000000">
 
-        <com.google.android.material.tabs.TabItem
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:text="棣栭〉" />
+<!--        <com.google.android.material.tabs.TabItem-->
+<!--            android:layout_width="match_parent"-->
+<!--            android:layout_height="match_parent"-->
+<!--            android:text="棣栭〉" />-->
 
-        <com.google.android.material.tabs.TabItem
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:text="鍦板浘" />
+<!--        <com.google.android.material.tabs.TabItem-->
+<!--            android:layout_width="match_parent"-->
+<!--            android:layout_height="match_parent"-->
+<!--            android:text="鍦板浘" />-->
 
-        <com.google.android.material.tabs.TabItem
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:text="鎴戠殑" />
+<!--        <com.google.android.material.tabs.TabItem-->
+<!--            android:layout_width="match_parent"-->
+<!--            android:layout_height="match_parent"-->
+<!--            android:text="鎴戠殑" />-->
     </com.google.android.material.tabs.TabLayout>
 
 </RelativeLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/net_loding.xml b/app/src/main/res/layout/net_loding.xml
new file mode 100644
index 0000000..9799a0b
--- /dev/null
+++ b/app/src/main/res/layout/net_loding.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout 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:gravity="center"
+    android:orientation="vertical">
+
+    <com.pnikosis.materialishprogress.ProgressWheel
+        android:id="@+id/progress_wheel"
+        android:layout_width="80dp"
+        android:layout_height="80dp"
+        android:layout_centerHorizontal="true"
+        android:layout_centerVertical="true"
+        app:matProg_barColor="@color/title_color"
+        app:matProg_progressIndeterminate="true" />
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index a7b6385..0f6a9ed 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -4,4 +4,5 @@
     <color name="white">#FFFFFFFF</color>
     <color name="base_blue">#3C9CFF</color>
     <color name="down_blue">#0C2DEA</color>
+    <color name="ws_pay_alpha">#00000000</color>
 </resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000..8e7946e
--- /dev/null
+++ b/app/src/main/res/values/styles.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+
+
+
+    <style name="ws_pay_showSelfDialog" parent="@android:style/Theme.Dialog">
+        <item name="android:windowFrame">@null</item>
+        <item name="android:windowNoTitle">true</item>
+        <item name="android:windowIsFloating">true</item>
+        <item name="android:windowBackground">@color/ws_pay_alpha</item>
+        <item name="android:windowContentOverlay">@null</item>
+        <item name="android:windowSoftInputMode">adjustPan</item>
+    </style>
+
+
+
+
+</resources>
diff --git a/build.gradle b/build.gradle
index 9a844cb..7aad7f2 100644
--- a/build.gradle
+++ b/build.gradle
@@ -3,10 +3,12 @@
     repositories {
         google()
         mavenCentral()
+        maven { url 'https://developer.huawei.com/repo/' }
     }
     dependencies {
         classpath "com.android.tools.build:gradle:8.1.2"
         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.20"
+        classpath 'com.huawei.agconnect:agcp:1.6.0.300'
         // NOTE: Do not place your application dependencies here; they belong
         // in the individual module build.gradle files
     }
@@ -19,6 +21,7 @@
         mavenCentral()
         jcenter() // Warning: this repository is going to shut down soon
         maven {url 'https://www.jitpack.io'}
+        maven { url 'https://developer.huawei.com/repo/' }
     }
 }
 

--
Gitblit v1.8.0