Browse Source

添加闪屏动画,权限返回操作。

kaiweicai 3 years ago
parent
commit
e60f1f5ece
34 changed files with 971 additions and 155 deletions
  1. 21 20
      library_core/CMakeLists.txt
  2. 1 2
      library_core/src/main/cpp/aes_kit.cpp
  3. 21 0
      library_core/src/main/cpp/comm_map.cpp
  4. 10 5
      library_core/src/main/cpp/comm_map.h
  5. 1 1
      library_core/src/main/cpp/external/md5/md5.cpp
  6. 3 3
      library_core/src/main/cpp/external/md5/md5.h
  7. 5 7
      library_core/src/main/cpp/params_kit.cpp
  8. 4 6
      library_core/src/main/cpp/params_kit.h
  9. 228 0
      library_core/src/main/cpp/tool_kit.cpp
  10. 50 0
      library_core/src/main/cpp/tool_kit.h
  11. 5 5
      library_core/src/main/cpp/yylog.cpp
  12. 3 3
      library_core/src/main/cpp/yylog.h
  13. 101 3
      library_core/src/main/cpp/yyxxgame.cpp
  14. 35 1
      library_core/src/main/java/cn/yyxx/commsdk/core/NTest.java
  15. 4 0
      library_core/src/main/java/cn/yyxx/commsdk/core/SdkBridge.java
  16. 7 1
      library_core/src/main/java/cn/yyxx/commsdk/core/constants/Constants.java
  17. 15 1
      library_core/src/main/java/cn/yyxx/commsdk/core/impl/SdkBridgeImpl.java
  18. 29 1
      library_core/src/main/java/cn/yyxx/commsdk/core/network/Hosts.java
  19. 44 1
      library_core/src/main/java/cn/yyxx/commsdk/core/network/SdkRequest.java
  20. 50 68
      library_core/src/main/java/cn/yyxx/commsdk/core/network/VolleyRequest.java
  21. 149 1
      library_core/src/main/java/cn/yyxx/commsdk/core/permission/PermissionManager.java
  22. 127 1
      library_core/src/main/java/cn/yyxx/commsdk/core/ui/dialog/PrivacyPolicyDialog.java
  23. 1 1
      library_core/src/main/java/cn/yyxx/commsdk/core/utils/FileUtils.java
  24. 5 3
      library_core/src/main/java/cn/yyxx/commsdk/core/utils/ManifestUtils.java
  25. 1 1
      library_core/src/main/java/cn/yyxx/commsdk/core/utils/ResourceUtil.java
  26. 28 1
      library_core/src/main/java/cn/yyxx/commsdk/core/utils/SharedPreferencesUtils.java
  27. 1 1
      library_core/src/main/java/cn/yyxx/commsdk/core/utils/YYLog.java
  28. 1 1
      library_core/src/main/res/drawable/yyxx_btn_exit_bg.xml
  29. 4 1
      library_core/src/main/res/drawable/yyxx_comm_background.xml
  30. 1 1
      library_core/src/main/res/drawable/yyxx_comm_confirm_button_style.xml
  31. 8 15
      library_core/src/main/res/layout/yyxx_comm_privacy_dialog.xml
  32. 4 0
      library_core/src/main/res/values/yyxx_comm_colors.xml
  33. 4 0
      library_core/src/main/res/values/yyxx_comm_strings.xml
  34. BIN
      libs/yyxx_support_1.0.2.jar

+ 21 - 20
library_core/CMakeLists.txt

@@ -12,19 +12,20 @@ cmake_minimum_required(VERSION 3.4.1)
 
 
 #include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/main/cpp/includes)
-#include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/main/cpp/json)
+#include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/main/cpp/external.json)
 #include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/main/cpp/encrypt)
-#aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src/main/cpp/ DIR_SOURCE)
-#aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src/main/cpp/json JSON_SOURCE)
+aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src/main/cpp/ DIR_SOURCE)
+aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src/main/cpp/external/json JSON_SOURCE)
+aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src/main/cpp/external/md5 MD5_SOURCE)
 #aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src/main/cpp/encrypt ENCRYPT_SOURCE)
 
-#add_library(
-#        qsgamesdk
-#        SHARED
-#        ${DIR_SOURCE}
-#        ${JSON_SOURCE}
-#        ${ENCRYPT_SOURCE}
-#)
+add_library(
+        yyxxgame
+        SHARED
+        ${DIR_SOURCE}
+        ${JSON_SOURCE}
+        ${MD5_SOURCE}
+)
 
 # Searches for a specified prebuilt library and stores the path as a
 # variable. Because CMake includes system libraries in the search path by
@@ -32,18 +33,18 @@ cmake_minimum_required(VERSION 3.4.1)
 # you want to add. CMake verifies that the library exists before
 # completing its build.
 
-#find_library( # Sets the name of the path variable.
-#        log-lib
-#        # Specifies the name of the NDK library that
-#        # you want CMake to locate.
-#        log)
+find_library( # Sets the name of the path variable.
+        log-lib
+        # Specifies the name of the NDK library that
+        # you want CMake to locate.
+        log)
 
 # Specifies libraries CMake should link to your target library. You
 # can link multiple libraries, such as libraries you define in this
 # build script, prebuilt third-party libraries, or system libraries.
 
-#target_link_libraries( # Specifies the target library.
-#        qsgamesdk
-#        # Links the target library to the log library
-#        # included in the NDK.
-#        ${log-lib})
+target_link_libraries( # Specifies the target library.
+        yyxxgame
+        # Links the target library to the log library
+        # included in the NDK.
+        ${log-lib})

+ 1 - 2
library_core/src/main/cpp/aes_kit.cpp

@@ -2,8 +2,7 @@
 // Created by #Suyghur, on 2021/10/15.
 //
 
-#include <string>
-#include <jni.h>
+
 #include "yylog.h"
 #include "aes_kit.h"
 

+ 21 - 0
library_core/src/main/cpp/comm_map.cpp

@@ -3,3 +3,24 @@
 //
 
 #include "comm_map.h"
+#include "tool_kit.h"
+#include "params_kit.h"
+CommMap::CommMap() = default;
+CommMap::~CommMap() = default;
+
+CommMap *CommMap::GetInstance() {
+    static CommMap instance;
+    return &instance;
+}
+
+void CommMap::Init(JNIEnv *env, jobject context) {
+    comm_params["game_code"] = ToolKit::GetGameCode(env,context);
+    comm_params["gcp_code"] = ParamsKit::GetGcpCode(env,context);
+    comm_params["cs_ver"] = ToolKit::GetClientVersion(env,context);
+    comm_params["system"] = "android";
+    comm_params["device_ver"] = ToolKit::GetDeviceSoftwareVersion();
+    comm_params["sp_code"] = ToolKit::GetSpCode(env,context);
+    comm_params["device_model"] = ToolKit::GetDeviceModel();
+    comm_params["package_name"] = ToolKit::GetPackageName(env,context);
+    comm_params["android_id"] = ToolKit::GetAndroidDeviceId(env,context);
+}

+ 10 - 5
library_core/src/main/cpp/comm_map.h

@@ -5,12 +5,17 @@
 #ifndef YYXXCOMMSDK_COMM_MAP_H
 #define YYXXCOMMSDK_COMM_MAP_H
 
-
-
-class comm_map {
-
+#include <jni.h>
+#include "../cpp/external/json/json.h"
+class CommMap {
+public:
+    static CommMap *GetInstance();
+    void Init(JNIEnv *env,jobject context);
+    Json::Value comm_params;
+private:
+    CommMap();
+    ~CommMap();
 };
 
 
-
 #endif //YYXXCOMMSDK_COMM_MAP_H

+ 1 - 1
library_core/src/main/cpp/external/md5/md5.cpp

@@ -2,7 +2,7 @@
 // Created by #Suyghur, on 2021/05/25.
 //
 
-#include "external/md5/md5.h"
+#include "md5.h"
 
 /* system implementation headers */
 #include <stdio.h>

+ 3 - 3
library_core/src/main/cpp/external/md5/md5.h

@@ -2,8 +2,8 @@
 // Created by #Suyghur, on 2021/05/25.
 //
 
-#ifndef XINRUIGAMESDK_MD5_H
-#define XINRUIGAMESDK_MD5_H
+#ifndef YYXXCOMMSDK_MD5_H
+#define YYXXCOMMSDK_MD5_H
 
 
 #include <string>
@@ -91,4 +91,4 @@ std::string md5(const std::string &str);
 }
 #endif
 
-#endif //XINRUIGAMESDK_MD5_H
+#endif //YYXXCOMMSDK_MD5_H

+ 5 - 7
library_core/src/main/cpp/params_kit.cpp

@@ -2,20 +2,18 @@
 // Created by #Suyghur, on 2021/10/15.
 //
 
-#include "include/tool_kit.h"
-#include "include/yylog.h"
-#include "include/params_kit.h"
+#include "tool_kit.h"
+#include "yylog.h"
+#include "params_kit.h"
 
 std::string ParamsKit::GetGcpCode(JNIEnv *env, jobject context) {
     return GetCnfValue(env, context, GCP_CODE);
 }
 
-std::string ParamsKit::GetChannelTag(JNIEnv *env, jobject context) {
-    return GetCnfValue(env, context, CHANNEL_TAG);
-}
+
 
 std::string ParamsKit::GetCnfValue(JNIEnv *env, jobject context, const std::string &key) {
-    jclass clz = env->FindClass("com/yyrh/utils/FileUtils");
+    jclass clz = env->FindClass("cn/yyxx/commsdk/core/utils/FileUtils");
     if (clz == nullptr) {
         LOGE("FileUtils clz is null");
         return "";

+ 4 - 6
library_core/src/main/cpp/params_kit.h

@@ -2,15 +2,15 @@
 // Created by #Suyghur, on 2021/10/15.
 //
 
-#ifndef XINRUIGAMESDK_PARAMS_KIT_H
-#define XINRUIGAMESDK_PARAMS_KIT_H
+#ifndef YYXXCOMMSDK_PARAMS_KIT_H
+#define YYXXCOMMSDK_PARAMS_KIT_H
 
 #include <string>
 #include <jni.h>
 
 #define CONFIG_FILE "YyrhParam.cnf"
 #define GCP_CODE "GCP_CODE"
-#define CHANNEL_TAG "CHANNELTAG"
+
 
 #ifdef __cplusplus
 extern "C" {
@@ -20,8 +20,6 @@ class ParamsKit {
 public:
     static std::string GetGcpCode(JNIEnv *env, jobject context);
 
-    static std::string GetChannelTag(JNIEnv *env, jobject context);
-
 private:
     static std::string GetCnfValue(JNIEnv *env, jobject context, const std::string &key);
 };
@@ -30,4 +28,4 @@ private:
 }
 #endif
 
-#endif //XINRUIGAMESDK_PARAMS_KIT_H
+#endif //YYXXCOMMSDK_PARAMS_KIT_H

+ 228 - 0
library_core/src/main/cpp/tool_kit.cpp

@@ -0,0 +1,228 @@
+//
+// Created by #Suyghur, on 2021/10/15.
+//
+
+#include <random>
+#include "comm_map.h"
+#include "external/md5/md5.h"
+#include "yylog.h"
+#include "tool_kit.h"
+
+static const unsigned char CHAR_SET[62] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+                                           'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
+                                           'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
+                                           'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D',
+                                           'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
+                                           'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
+                                           'Y', 'Z'};
+
+#define RSA_PUBLIC_KEY "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3eXf1JxdFtx6c8AJTdlSverL8WqRE11yFB6Q+GbQeEVXjSCgQN48qePat7mXbH4LAtjaSEqXHruP4hJO8777wYtEKNKIN2VZgWQElrllAuAtaHyA+UGKwulOKmkR8k1Oxmfd46fnQBwzy+Giab4lqQRQAObCT0QtUrlrsU1U+zwIDAQAB"
+
+
+jbyteArray ToolKit::GetJbyteArray(JNIEnv *Env, const char *src) {
+    return nullptr;
+}
+
+jstring ToolKit::GetJString(JNIEnv *env, const char *src) {
+    jclass clz = env->FindClass("java/lang/String");
+    jmethodID methodID = env->GetMethodID(clz, "<init>", "([BLjava/lang/String;)V");
+    jstring encoding = env->NewStringUTF("utf-8");
+
+    auto length = static_cast<jsize>(strlen(src));
+    jbyteArray bytes = env->NewByteArray(length);
+    env->SetByteArrayRegion(bytes, 0, length, (jbyte *) src);
+    auto result = (jstring) env->NewObject(clz, methodID, bytes, encoding);
+
+    env->DeleteLocalRef(clz);
+    env->DeleteLocalRef(encoding);
+    env->DeleteLocalRef(bytes);
+
+    return result;
+}
+
+std::string ToolKit::JString2String(JNIEnv *env, jstring src) {
+    if (env == nullptr || src == nullptr) {
+        LOGE("jstring to string has some error");
+        return "";
+    }
+    char *tmp_ptr = nullptr;
+    jclass clz = env->FindClass("java/lang/String");
+    jstring encode_mode = env->NewStringUTF("UTF-8");
+    jmethodID mid = env->GetMethodID(clz, "getBytes", "(Ljava/lang/String;)[B");
+    auto byte_array = (jbyteArray) (env->CallObjectMethod(src, mid, encode_mode));
+    jsize len = env->GetArrayLength(byte_array);
+    if (len == 0) {
+        free(tmp_ptr);
+        return "";
+    }
+    jbyte *byte = env->GetByteArrayElements(byte_array, JNI_FALSE);
+    if (len > 0) {
+        tmp_ptr = (char *) malloc(len + 1);
+        memcpy(tmp_ptr, byte, len);
+        tmp_ptr[len] = 0;
+    }
+    env->ReleaseByteArrayElements(byte_array, byte, JNI_FALSE);
+    std::string result(tmp_ptr);
+    free(tmp_ptr);
+    env->DeleteLocalRef(clz);
+    env->DeleteLocalRef(encode_mode);
+    env->DeleteLocalRef(byte_array);
+    return result;
+}
+
+std::string ToolKit::GetGameCode(JNIEnv *env, jobject context) {
+    jclass clz = env->FindClass("cn/yyxx/commsdk/core/utils/ManifestUtils");
+    if (clz == nullptr) {
+        LOGE("ManifestUtils clz is nullptr !!!");
+        return "";
+    }
+    const char *method_name = "getMetaDataValue";
+    const char *sig = "(Landroid/content/Context;Ljava/lang/String;)Ljava/lang/String;";
+    jmethodID mid = env->GetStaticMethodID(clz, method_name, sig);
+    jstring key = env->NewStringUTF("yyrh_game_code");
+    auto result = (jstring) env->CallStaticObjectMethod(clz, mid, context, key);
+    env->DeleteLocalRef(clz);
+    env->DeleteLocalRef(key);
+    return JString2String(env, result);
+}
+
+
+
+std::string ToolKit::GetSpCode(JNIEnv *env, jobject context) {
+    jclass clz = env->FindClass("cn/yyxx/commsdk/core/utils/ManifestUtils");
+    if (clz == nullptr) {
+        LOGE("ManifestUtils clz is nullptr !!!");
+        return "";
+    }
+    const char *method_name = "getMetaDataValue";
+    const char *sig = "(Landroid/content/Context;Ljava/lang/String;)Ljava/lang/String;";
+    jmethodID mid = env->GetStaticMethodID(clz, method_name, sig);
+    jstring key = env->NewStringUTF("yyrh_sp_code");
+    auto result = (jstring) env->CallStaticObjectMethod(clz, mid, context, key);
+    env->DeleteLocalRef(clz);
+    env->DeleteLocalRef(key);
+    return JString2String(env, result);
+}
+
+std::string ToolKit::GetClientVersion(JNIEnv *env, jobject context) {
+    jclass clz = env->FindClass("cn/yyxx/commsdk/Version");
+    if (clz == nullptr) {
+        LOGE("Version clz is nullptr !!!");
+        return "";
+    }
+    const char *field_name = "VERSION_NAME";
+    const char *sig = "Ljava/lang/String;";
+    jfieldID fid = env->GetStaticFieldID(clz, field_name, sig);
+    auto result = (jstring) env->GetStaticObjectField(clz, fid);
+    env->DeleteLocalRef(clz);
+    return JString2String(env, result);
+}
+
+std::string ToolKit::GetPackageName(JNIEnv *env, jobject context) {
+    jclass clz = env->GetObjectClass(context);
+    if (clz == nullptr) {
+        LOGE("clz is nullptr !!!");
+        return "";
+    }
+    const char *method_name = "getPackageName";
+    const char *sig = "()Ljava/lang/String;";
+    jmethodID mid = env->GetMethodID(clz, method_name, sig);
+    auto result = (jstring) env->CallObjectMethod(context, mid);
+    env->DeleteLocalRef(clz);
+    return JString2String(env, result);
+}
+
+std::string ToolKit::GetDeviceSoftwareVersion() {
+    char *version = (char *) malloc(128 * sizeof(char));
+    __system_property_get("ro.build.version.release", version);
+    std::string result = version;
+    free(version);
+    return result;
+}
+
+std::string ToolKit::GetDeviceModel() {
+    char *model = (char *) malloc(128 * sizeof(char));
+    __system_property_get("ro.product.model", model);
+    std::string result = model;
+    free(model);
+    return result;
+}
+
+std::string ToolKit::GetAndroidDeviceId(JNIEnv *env, jobject context) {
+    jclass clz = env->FindClass("cn/yyxx/support/device/DeviceInfoUtils");
+    if (clz == nullptr) {
+        LOGE("DeviceInfoUtils is nullptr !!!");
+        return "";
+    }
+    const char *method_name = "getAndroidDeviceId";
+    const char *sig = "(Landroid/content/Context;)Ljava/lang/String;";
+    jmethodID mid = env->GetStaticMethodID(clz, method_name, sig);
+    auto result = (jstring) env->CallStaticObjectMethod(clz, mid, context);
+    env->DeleteLocalRef(clz);
+    return JString2String(env, result);
+}
+
+
+jstring ToolKit::RsaEncrypt(JNIEnv *env, const char *data) {
+    jclass clz = env->FindClass("cn/yyxx/support/encryption/rsa/RsaUtils");
+    if (clz == nullptr) {
+        LOGE("RsaUtils is nullptr !!!");
+        return nullptr;
+    }
+    const char *method_name = "encryptByPublicKey";
+    const char *sig = "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;";
+    jmethodID mid = env->GetStaticMethodID(clz, method_name, sig);
+    jstring raw = env->NewStringUTF(data);
+    jstring key = env->NewStringUTF(RSA_PUBLIC_KEY);
+    auto result = (jstring) env->CallStaticObjectMethod(clz, mid, raw, key);
+    env->DeleteLocalRef(clz);
+    env->DeleteLocalRef(raw);
+    env->DeleteLocalRef(key);
+    return result;
+}
+
+std::string ToolKit::ToJsonString(const Json::Value &root) {
+    Json::StreamWriterBuilder builder;
+    std::ostringstream oss;
+    //无格式输出
+    builder.settings_["indentation"] = "";
+    std::unique_ptr<Json::StreamWriter> json_writer(builder.newStreamWriter());
+    json_writer->write(root, &oss);
+    return oss.str();
+}
+
+Json::Value ToolKit::ToJsonObject(const std::string &json) {
+    Json::CharReaderBuilder builder;
+    Json::CharReader *reader_ptr(builder.newCharReader());
+    JSONCPP_STRING errs;
+    Json::Value root;
+    reader_ptr->parse(json.c_str(), json.c_str() + json.length(), &root, &errs);
+    return root;
+}
+
+
+std::string ToolKit::GetJsonSortSignature(const Json::Value &root) {
+    Json::Value::Members members = root.getMemberNames();
+    std::string signature;
+    for (auto &member : members) {
+        signature.append(member).append("=").append(root[member].asString()).append("&");
+    }
+    signature.erase(signature.length() - 1);
+    return signature;
+}
+
+std::string ToolKit::GenerateRandString(int len) {
+    srandom(time(nullptr));
+    std::string random_str;
+    for (int i = 0; i < len; ++i) {
+
+        random_str += CHAR_SET[random() % 62];
+    }
+    return random_str;
+}
+
+
+
+
+
+

+ 50 - 0
library_core/src/main/cpp/tool_kit.h

@@ -0,0 +1,50 @@
+#ifndef  YYXXCOMMSDK_TOOL_KIT_H
+#define YYXXCOMMSDK_TOOL_KIT_H
+
+#include <jni.h>
+#include <string>
+#include "external/json/json.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+    class ToolKit{
+    public:
+
+        static jbyteArray GetJbyteArray(JNIEnv *Env, const char *src);
+
+        static jstring GetJString(JNIEnv *env, const char *src);
+
+        static std::string JString2String(JNIEnv *env, jstring src);
+
+        static std::string GetGameCode(JNIEnv *env,jobject context);
+
+        static std::string  GetSpCode(JNIEnv *env, jobject context);
+
+        static std::string  GetClientVersion(JNIEnv *env, jobject context);
+
+        static std::string  GetPackageName(JNIEnv *env, jobject context);
+
+        static std::string  GetDeviceSoftwareVersion();
+
+        static std::string  GetDeviceModel();
+
+        static std::string  GetAndroidDeviceId(JNIEnv *env, jobject context);
+
+        static jstring RsaEncrypt(JNIEnv *env,const char *data);
+
+        static std::string ToJsonString(const Json::Value &root);
+
+        static Json::Value ToJsonObject(const std::string &json);
+
+        static std::string GetJsonSortSignature(const Json::Value &root);
+
+        static std::string GenerateRandString(int len);
+
+    };
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

+ 5 - 5
library_core/src/main/cpp/yylog.cpp

@@ -2,13 +2,13 @@
 // Created by #Suyghur, on 2021/10/15.
 //
 
-#include "include/yylog.h"
+#include "yylog.h"
 
 bool YYLog::is_debug = true;
 
 void YYLog::D(JNIEnv *env, const std::string &msg) {
     if (is_debug) {
-        jclass clz = env->FindClass("com/yyrh/utils/YYLog");
+        jclass clz = env->FindClass("cn/yyxx/commsdk/core/utils/YYLog");
         if (clz == nullptr) {
             LOGE("YYLog clz is null");
             return;
@@ -23,7 +23,7 @@ void YYLog::D(JNIEnv *env, const std::string &msg) {
 }
 
 void YYLog::I(JNIEnv *env, const std::string &msg) {
-    jclass clz = env->FindClass("com/yyrh/utils/YYLog");
+    jclass clz = env->FindClass("cn/yyxx/commsdk/core/utils/YYLog");
     if (clz == nullptr) {
         LOGE("YYLog clz is null");
         return;
@@ -37,7 +37,7 @@ void YYLog::I(JNIEnv *env, const std::string &msg) {
 }
 
 void YYLog::E(JNIEnv *env, const std::string &msg) {
-    jclass clz = env->FindClass("com/yyrh/utils/YYLog");
+    jclass clz = env->FindClass("cn/yyxx/commsdk/core/utils/YYLog");
     if (clz == nullptr) {
         LOGE("YYLog clz is null");
         return;
@@ -51,7 +51,7 @@ void YYLog::E(JNIEnv *env, const std::string &msg) {
 }
 
 void YYLog::LogHandler(JNIEnv *env, const std::string &msg) {
-    jclass clz = env->FindClass("com/yyrh/utils/YYLog");
+    jclass clz = env->FindClass("cn/yyxx/commsdk/core/utils/YYLog");
     if (clz == nullptr) {
         LOGE("YYLog clz is null");
         return;

+ 3 - 3
library_core/src/main/cpp/yylog.h

@@ -2,8 +2,8 @@
 // Created by #Suyghur, on 2021/10/15.
 //
 
-#ifndef XINRUIGAMESDK_YYLOG_H
-#define XINRUIGAMESDK_YYLOG_H
+#ifndef YYXXCOMMSDK_YYLOG_H
+#define YYXXCOMMSDK_YYLOG_H
 
 
 #include <string>
@@ -38,4 +38,4 @@ public:
 }
 #endif
 
-#endif //XINRUIGAMESDK_YYLOG_H
+#endif //YYXXCOMMSDK_YYLOG_H

+ 101 - 3
library_core/src/main/cpp/yyxxgame.cpp

@@ -1,22 +1,120 @@
+#include <jni.h>
+#include <ctime>
+#include "external/json/json.h"
+#include "tool_kit.h"
+#include "comm_map.h"
+#include "yylog.h"
+#include "external/md5/md5.h"
+#include "aes_kit.h"
 //
 // Created by KaiWeiCai on 2022/1/14.
 //
 
+
+#define API_KEY "qDikI9v?>!x)1rS&yo"
+
+
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 
 void InitSdkDrive(JNIEnv *env, jobject clz, jobject context) {
-//    CommMap::GetInstance()->Init(env, context);
+    CommMap::GetInstance()->Init(env, context);
+
+}
+jstring InvokeJobWithoutParams(JNIEnv *env,jobject clz,jstring data){
+    const char  *_data = env->GetStringUTFChars(data,JNI_FALSE);
+    time_t t;
+    long ts = time(&t);
+    Json::Value root = ToolKit::ToJsonObject(_data);
+    std::string timestamp = std::to_string(ts);
+    std::string sort_signature = ToolKit::GetJsonSortSignature(root);
+    sort_signature.append("&time=").append(timestamp).append(API_KEY);
+    YYLog::D(env, "before md5: " + sort_signature);
+    std::string sign = md5(sort_signature);
+
+    root["time"]= timestamp;
+    root["sign"]= sign;
+
+    std::string random_str = ToolKit::GenerateRandString(5);
+    std::string request_data = random_str.append(ToolKit::ToJsonString(root));
+
+    jstring result = AesKit::Encrypt(env, request_data.c_str());
+
+
+    YYLog::D(env, "请求路由: " + root["route_path"].asString());
+    YYLog::D(env, "请求参数: " + request_data);
+
+    YYLog::LogHandler(env, "请求路由: " + root["route_path"].asString() + "\n");
+    YYLog::LogHandler(env, "请求参数: " + request_data + "\n");
+
+
+    if (_data) {
+        env->ReleaseStringUTFChars(data, _data);
+    }
+    return result;
+}
+
+
+jstring InvokeJob(JNIEnv *env,jobject clz,jstring data){
+    const char  *_data = env->GetStringUTFChars(data,JNI_FALSE);
+    time_t t;
+    long ts = time(&t);
+    Json::Value root = ToolKit::ToJsonObject(_data);
+    Json::Value::Members members = CommMap::GetInstance()->comm_params.getMemberNames();
+    for (auto &member:members) {
+        root[member] = CommMap::GetInstance()->comm_params[member];
+    }
+    std::string timestamp = std::to_string(ts);
+    std::string sort_signature = ToolKit::GetJsonSortSignature(root);
+    sort_signature.append("&time=").append(API_KEY);
+    YYLog::D(env, "before md5: " + sort_signature);
+    std::string sign = md5(sort_signature);
+
+    root["time"]= timestamp;
+    root["sign"]= sign;
+
+    std::string random_str = ToolKit::GenerateRandString(5);
+    std::string request_data = random_str.append(ToolKit::ToJsonString(root));
+
+    jstring result = AesKit::Encrypt(env, request_data.c_str());
+
+
+    YYLog::D(env, "请求路由: " + root["route_path"].asString());
+    YYLog::D(env, "请求参数: " + request_data);
+
+    YYLog::LogHandler(env, "请求路由: " + root["route_path"].asString() + "\n");
+    YYLog::LogHandler(env, "请求参数: " + request_data + "\n");
+
+
+    if (_data) {
+        env->ReleaseStringUTFChars(data, _data);
+    }
+    return result;
+
+
+
+}
+
+jstring ParseJob(JNIEnv *env,jobject clz,jstring data){
+    const char *_data = env->GetStringUTFChars(data,JNI_FALSE);
+    jstring result = AesKit::Decrypt(env,_data);
+    if (_data){
+        env->ReleaseStringUTFChars(data,_data);
+    }
+    return result;
+
 }
 
 static JNINativeMethod gMethods[] = {
+
         {"initDrive",  "(Landroid/content/Context;)V",            (void *) InitSdkDrive},
+        {"invokeJobWithoutParams", "(Ljava/lang/String;)Ljava/lang/String;",  (void *) InvokeJobWithoutParams},
 //        {"setParam",   "(Ljava/lang/String;Ljava/lang/String;)V", (void *) SetParam},
 //        {"getParam",   "(Ljava/lang/String;)Ljava/lang/String;",  (void *) GetParam},
-//        {"invokeJob",  "(Ljava/lang/String;)Ljava/lang/String;",  (void *) InvokeJob},
-//        {"parseJob",   "(Ljava/lang/String;)Ljava/lang/String;",  (void *) ParseJob},
+        {"invokeJob",  "(Ljava/lang/String;)Ljava/lang/String;",  (void *) InvokeJob},
+        {"parseJob",   "(Ljava/lang/String;)Ljava/lang/String;",  (void *) ParseJob},
 //        {"RsaEncrypt", "(Ljava/lang/String;)Ljava/lang/String;",  (void *) RsaEncrypt}
 };
 

+ 35 - 1
library_core/src/main/java/cn/yyxx/commsdk/core/NTest.java

@@ -1,2 +1,36 @@
-package cn.yyxx.commsdk.core;public class NTest {
+package cn.yyxx.commsdk.core;
+
+import android.content.Context;
+
+public class NTest {
+
+    static {
+        System.loadLibrary("yyxxgame");
+    }
+
+    private NTest() {
+
+    }
+
+    public static NTest getInstance() {
+        return NTestHolder.INSTANCE;
+    }
+
+    public native void initDrive(Context context);
+
+    public native String invokeJobWithoutParams(String data);
+
+//    public native void setParam(String key, String value);
+
+//    public native String getParam(String key);
+
+    public native String invokeJob(String data);
+
+    public native String parseJob(String data);
+
+//    public native String RsaEncrypt(String data);
+
+    private static final class NTestHolder {
+        private static final NTest INSTANCE = new NTest();
+    }
 }

+ 4 - 0
library_core/src/main/java/cn/yyxx/commsdk/core/SdkBridge.java

@@ -35,6 +35,10 @@ public final class SdkBridge {
         impl.initApplication(application);
     }
 
+    public void initAgreement(Activity activity, ICallback callback) {
+        impl.initAgreement(activity, callback);
+    }
+
     public void initialize(Activity activity, Boolean isLandscape, IInitialize callback) {
         impl.initialize(activity, isLandscape, callback);
     }

+ 7 - 1
library_core/src/main/java/cn/yyxx/commsdk/core/constants/Constants.java

@@ -1,4 +1,4 @@
-package com.yyrh.constant;
+package cn.yyxx.commsdk.core.constants;
 
 public class Constants {
 
@@ -11,9 +11,15 @@ public class Constants {
 
     public static final String LOGOUT = "LOGOUT";
 
+    public static final String SP_KEY = "yyxx_comm";
 
     public static final long CLICK_INTERVAL = 2000L;
 
+    public static final int CODE_SUCCESS = 0;
+
+    public static final int CODE_FAIL = 1;
+
+    public static final int CODE_SERROR = -1;
 
 
 }

+ 15 - 1
library_core/src/main/java/cn/yyxx/commsdk/core/impl/SdkBridgeImpl.java

@@ -5,12 +5,24 @@ import android.app.Application;
 import android.content.Context;
 import android.content.Intent;
 
+import org.json.JSONException;
+import org.json.JSONObject;
+
 import java.util.List;
 
+import cn.yyxx.commsdk.base.entity.ResultInfo;
 import cn.yyxx.commsdk.base.entity.SdkChargeInfo;
 import cn.yyxx.commsdk.base.entity.SdkRoleInfo;
 import cn.yyxx.commsdk.base.internal.ICallback;
 import cn.yyxx.commsdk.base.internal.IInitialize;
+import cn.yyxx.commsdk.base.internal.IRequestCallback;
+import cn.yyxx.commsdk.base.internal.feature.IFeature;
+import cn.yyxx.commsdk.core.constants.Constants;
+import cn.yyxx.commsdk.core.network.SdkRequest;
+import cn.yyxx.commsdk.core.permission.PermissionManager;
+import cn.yyxx.commsdk.core.ui.dialog.PrivacyPolicyDialog;
+import cn.yyxx.commsdk.core.utils.SharedPreferencesUtils;
+import cn.yyxx.support.JsonUtils;
 
 /**
  * @author #Suyghur.
@@ -27,7 +39,9 @@ public final class SdkBridgeImpl {
 
     public void initApplication(Application application) {
     }
-
+    public void initAgreement(Activity activity,ICallback callback) {
+        PermissionManager.getInstance().initAgreement(activity,callback);
+    }
     public void initialize(Activity activity, Boolean isLandscape, IInitialize callback) {
     }
 

+ 29 - 1
library_core/src/main/java/cn/yyxx/commsdk/core/network/Hosts.java

@@ -1,2 +1,30 @@
-package cn.yyxx.commsdk.core.network;public class Hosts {
+package cn.yyxx.commsdk.core.network;
+
+public class Hosts {
+
+    //    public static final String HOST = "https://sdkapi.yyxxgame.com";
+    public static final String HOST = "http://testsdkapi.yyxxgame.com";
+
+
+//        public static final String HOST = "http://49.234.153.160";
+
+
+    public static final String  BASIC_URL_INIT_AGREEMENT = "agreement_init";
+
+    public static final String  BASIC_URL_INIT = "activate";
+
+    public static final String  BASIC_URL_FAST_REGISTER = HOST +  "/fast_register";
+    public static final String  BASIC_URL_USER_LOGIN = HOST + "/user_login";
+    public static final String  BASIC_URL_UPLOAD_ROLEINFO = HOST +  "/report_role_info";
+    public static final String  BASIC_URL_RECHARGE_INIT= HOST +  "/recharge_init";
+    public static final String  BASIC_URL_CHANNEL_LOGIN = HOST +  "/channel_login";
+    public static final String  BASIC_URL_GET_CAPTCHA = HOST +  "/phone_captcha";
+    public static final String  BASIC_URL_PHONE_REGISTER = HOST +  "/phone_register";
+    public static final String  BASIC_URL_PHONE_RESETPWD = HOST +  "/phone_reset_pwd";
+
+    public static final String  BASIC_URL_ORDER_QUERY = HOST +  "/order_query";
+    public static final String  BASIC_URL_AGREEMENT_INIT = HOST +  "/agreement_init";
+    public static final String  BASIC_URL_SMS_LOGIN = HOST +  "/phone_sms_login";
+    public static final String  BASIC_URL_PAYMENTWAY = HOST +  "/payment_way";
+    
 }

+ 44 - 1
library_core/src/main/java/cn/yyxx/commsdk/core/network/SdkRequest.java

@@ -1,2 +1,45 @@
-package cn.yyxx.commsdk.core.network;public class SdkRequest {
+package cn.yyxx.commsdk.core.network;
+
+import static cn.yyxx.commsdk.core.network.Hosts.HOST;
+
+import android.content.Context;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import cn.yyxx.commsdk.base.internal.IRequestCallback;
+
+import cn.yyxx.commsdk.core.NTest;
+import cn.yyxx.commsdk.core.utils.ManifestUtils;
+import cn.yyxx.support.PropertiesUtils;
+
+public class SdkRequest {
+    private static volatile SdkRequest mInstance;
+
+    private SdkRequest(){}
+    public static SdkRequest getInstance(){
+        if (mInstance == null){
+            synchronized (SdkRequest.class){
+                mInstance = new SdkRequest();
+            }
+        }
+        return mInstance;
+    }
+
+    public void initAgreement(Context context, IRequestCallback callback){
+        String game_code = PropertiesUtils.getValue4Properties(context,"yyxx_cfg.properties","yyxx_game","YYXX_GAME_CODE");
+        String gcp_code = ManifestUtils.getMetaDataValue(context,"gcp_code");
+        JSONObject json = new JSONObject();
+        try {
+            json.put("game_code",game_code);
+            json.put("gcp_code",gcp_code);
+            json.put("route_path", Hosts.BASIC_URL_INIT_AGREEMENT);
+
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+
+        String paramText = NTest.getInstance().invokeJobWithoutParams(json.toString());
+        VolleyRequest.post(context,HOST,paramText,callback);
+    }
 }

+ 50 - 68
library_core/src/main/java/cn/yyxx/commsdk/core/network/VolleyRequest.java

@@ -1,22 +1,27 @@
-package cn.qingshi.gamesdk.core.network;
+package cn.yyxx.commsdk.core.network;
 
 import android.content.Context;
 import android.text.TextUtils;
+import android.util.Log;
 
 import org.json.JSONException;
 import org.json.JSONObject;
 
 import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 import java.util.Map;
 
-import cn.qingshi.gamesdk.base.utils.Logger;
-import cn.qingshi.gamesdk.core.entity.ResultInfo;
-import cn.qingshi.gamesdk.core.internal.IFileRequestCallback;
-import cn.qingshi.gamesdk.core.internal.IRequestCallback;
+import cn.yyxx.commsdk.base.entity.ResultInfo;
+import cn.yyxx.commsdk.base.internal.IRequestCallback;
+import cn.yyxx.commsdk.base.utils.Logger;
+import cn.yyxx.commsdk.base.utils.sign.AESUtils;
+import cn.yyxx.commsdk.core.NTest;
 import cn.yyxx.support.FileUtils;
 import cn.yyxx.support.JsonUtils;
 import cn.yyxx.support.volley.VolleySingleton;
+import cn.yyxx.support.volley.source.AuthFailureError;
 import cn.yyxx.support.volley.source.DefaultRetryPolicy;
 import cn.yyxx.support.volley.source.NetworkResponse;
 import cn.yyxx.support.volley.source.ParseError;
@@ -26,6 +31,7 @@ import cn.yyxx.support.volley.source.VolleyError;
 import cn.yyxx.support.volley.source.toolbox.HttpHeaderParser;
 import cn.yyxx.support.volley.source.toolbox.JsonObjectRequest;
 import cn.yyxx.support.volley.source.toolbox.JsonRequest;
+import cn.yyxx.support.volley.source.toolbox.StringRequest;
 
 /**
  * @author #Suyghur.
@@ -39,32 +45,34 @@ public class VolleyRequest {
     private static final int MAX_TIMEOUT = 10 * 1000;
 
 
-    public static void post(Context context, String url, JSONObject jsonObject, final IRequestCallback callback) {
+    public static void post(Context context, String url,String params, final IRequestCallback callback) {
         try {
-//            StringBuilder raw = new StringBuilder();
-//            raw.append("access_token=").append(jsonObject.getString("access_token"))
-//                    .append("&time=").append(jsonObject.getString("time"))
-//                    .append("&context=").append(jsonObject.getString("context"))
-//                    .append("&appkey=").append(ParamsUtils.getQSAppKey(context));
-//
-//            Logger.d("raw : " + raw);
-//            String sign = Md5Utils.encodeByMD5(raw.toString().toLowerCase());
-//            jsonObject.put("sign", sign);
+
             Logger.logHandler("请求地址 : " + url + "\n");
-            Logger.logHandler("请求参数 : " + jsonObject.toString() + "\n");
+            Logger.logHandler("请求参数 : " + params.toString() + "\n");
             Logger.d("请求地址 : " + url);
-            Logger.d("请求参数 : " + jsonObject.toString());
+            Logger.d("请求参数 : " + params.toString());
 
-            JsonRequest<JSONObject> request = new JsonObjectRequest(Request.Method.POST, url, jsonObject, new Response.Listener<JSONObject>() {
+            StringRequest request = new StringRequest(Request.Method.POST,Hosts.HOST, new Response.Listener<String>() {
                 @Override
-                public void onResponse(JSONObject response) {
+                public void onResponse(String s) {
+
+
+                    String deData =  NTest.getInstance().parseJob(s);
+
                     ResultInfo resultInfo = new ResultInfo();
-                    if (response != null) {
+                    JSONObject json = null;
+                    try {
+                         json = new JSONObject(deData);
+                    } catch (JSONException e) {
+                        e.printStackTrace();
+                    }
+                    if (json != null) {
                         try {
-                            resultInfo.code = response.getInt("code");
-                            resultInfo.msg = response.getString("message");
-                            if (JsonUtils.hasJsonKey(response, "data")) {
-                                resultInfo.data = response.getString("data");
+                            resultInfo.code = json.getInt("code");
+                            resultInfo.msg = json.getString("msg");
+                            if (JsonUtils.hasJsonKey(json, "data")) {
+                                resultInfo.data = json.getString("data");
                             } else {
                                 resultInfo.data = "";
                             }
@@ -88,20 +96,34 @@ public class VolleyRequest {
             }, new Response.ErrorListener() {
                 @Override
                 public void onErrorResponse(VolleyError volleyError) {
-                    Logger.e("onErrorResponse : " + volleyError.toString());
+                    Logger.d(volleyError.toString());
                     if (callback != null) {
                         callback.onResponse(getErrorResultInfo(volleyError));
                     }
                 }
-            }) {
+            })
+            {
                 @Override
                 public Map<String, String> getHeaders() {
                     HashMap<String, String> headers = new HashMap<>();
-                    headers.put("Accept", "application/json");
-                    headers.put("Content-Type", "application/json;charset=UTF-8");
+                    headers.put("Accept", "text/plain");
+                    headers.put("Content-Type", "text/plain;charset=UTF-8");
                     return headers;
                 }
+
+
+                @Override
+                public byte[] getBody() throws AuthFailureError {
+                    byte[] bd= new byte[0];
+                    try {
+                        bd = params.getBytes(getParamsEncoding());
+                    } catch (UnsupportedEncodingException e) {
+                        e.printStackTrace();
+                    }
+                    return bd;
+                }
             };
+
             request.setRetryPolicy(new DefaultRetryPolicy(MAX_TIMEOUT, 1, 1.0f));
             VolleySingleton.getInstance(context.getApplicationContext()).addToRequestQueue(context.getApplicationContext(), request);
         } catch (Exception e) {
@@ -109,46 +131,6 @@ public class VolleyRequest {
         }
     }
 
-    public static void downloadImageFile(Context context, String url, final String filePath, final IFileRequestCallback callback) {
-        if (TextUtils.isEmpty(filePath)) {
-            callback.onResult(-1, "file path is empty !!!");
-            return;
-        }
-        Request<byte[]> request = new Request<byte[]>(Request.Method.GET, url, new Response.ErrorListener() {
-            @Override
-            public void onErrorResponse(VolleyError volleyError) {
-                callback.onResult(-1, volleyError.getLocalizedMessage());
-            }
-        }) {
-
-            @Override
-            protected Response<byte[]> parseNetworkResponse(NetworkResponse networkResponse) {
-                try {
-                    if (networkResponse.data == null) {
-                        return Response.error(new ParseError(networkResponse));
-                    } else {
-                        return Response.success(networkResponse.data, HttpHeaderParser.parseCacheHeaders(networkResponse));
-                    }
-                } catch (OutOfMemoryError e) {
-                    e.printStackTrace();
-                    return Response.error(new ParseError(e));
-                }
-            }
-
-            @Override
-            protected void deliverResponse(byte[] bytes) {
-                Logger.d("volley download image file success, start to save file ...");
-                try {
-                    FileUtils.saveFile(filePath, bytes);
-                    callback.onResult(0, "缓存文件成功");
-                } catch (IOException e) {
-                    e.printStackTrace();
-                    callback.onResult(0, "缓存文件失败");
-                }
-            }
-        };
-        VolleySingleton.getInstance(context.getApplicationContext()).addToRequestQueue(context.getApplicationContext(), request);
-    }
 
     private static ResultInfo getErrorResultInfo(VolleyError volleyError) {
         ResultInfo resultInfo = new ResultInfo();

+ 149 - 1
library_core/src/main/java/cn/yyxx/commsdk/core/permission/PermissionManager.java

@@ -1,2 +1,150 @@
-package cn.yyxx.commsdk.core.permission;public class PermissionManager {
+package cn.yyxx.commsdk.core.permission;
+
+import android.app.Activity;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.List;
+
+import cn.yyxx.commsdk.base.entity.ResultInfo;
+import cn.yyxx.commsdk.base.internal.ICallback;
+import cn.yyxx.commsdk.base.internal.IRequestCallback;
+import cn.yyxx.commsdk.base.utils.Logger;
+import cn.yyxx.commsdk.core.constants.Constants;
+import cn.yyxx.commsdk.core.network.SdkRequest;
+import cn.yyxx.commsdk.core.ui.dialog.PrivacyPolicyDialog;
+import cn.yyxx.commsdk.core.utils.ManifestUtils;
+import cn.yyxx.commsdk.core.utils.SharedPreferencesUtils;
+import cn.yyxx.support.JsonUtils;
+import cn.yyxx.support.permission.IPermissionCallback;
+import cn.yyxx.support.permission.Permission;
+import cn.yyxx.support.permission.PermissionKit;
+
+public class PermissionManager {
+    public static PermissionManager permissionManager = null;
+    private PermissionManager(){}
+    public static PermissionManager getInstance(){
+        if (permissionManager == null){
+            permissionManager = new PermissionManager();
+        }
+        return permissionManager;
+    }
+    public void initAgreement(Activity activity, ICallback callback){
+
+
+        String isShowPolicy = SharedPreferencesUtils.getSharedPreferences(activity, Constants.SP_KEY,"isShowPolicy");
+
+        if (isShowPolicy.isEmpty()){
+            SdkRequest.getInstance().initAgreement(activity, new IRequestCallback() {
+                @Override
+                public void onResponse(ResultInfo resultInfo) {
+                    String policy_url = "";
+
+                    try {
+                        if (JsonUtils.hasJsonKey(new JSONObject(resultInfo.data),"agreement_url")){
+
+                            JSONObject jsonObject = new JSONObject(resultInfo.data);
+                            policy_url = jsonObject.getString("agreement_url");
+
+                        }
+
+                    } catch (JSONException e) {
+                        e.printStackTrace();
+                    }
+                    if (policy_url.isEmpty()){
+                        callback.onResult(Constants.CODE_SUCCESS,"Dont's show Policy");
+                        return;
+                    }
+
+                    new PrivacyPolicyDialog(activity, policy_url, new PrivacyPolicyDialog.OnClosePageListener() {
+                        @Override
+                        public void onUserAgreePolicy() {
+                            SharedPreferencesUtils.setSharedPreferences( Constants.SP_KEY,"isShowPolicy","1",activity);
+                            requestPermission(activity,callback);
+                        }
+
+                        @Override
+                        public void onUserDisagreePolicy() {
+                            callback.onResult(Constants.CODE_FAIL,"User disagree policy");
+                        }
+                    }).show();
+                }
+            });
+
+        }else{
+            requestPermission(activity,callback);
+        }
+
+
+
+    }
+    void requestPermission(Activity activity,ICallback callback){
+
+        if (!ManifestUtils.getMetaDataValue(activity,"yyxx.SkipPermission").isEmpty()){
+            callback.onResult(Constants.CODE_SUCCESS,"User agree policy");
+        }else if (!SharedPreferencesUtils.getSharedPreferences(activity,Constants.SP_KEY,"yyxxStopRequestPermission").isEmpty()){
+            callback.onResult(Constants.CODE_SUCCESS,"User agree policy");
+        }else{
+            goRequestPermission(activity, new PermissonCallBack() {
+                @Override
+                public void onResult(Result code) {
+                    if (code == Result.FINISH){
+                        callback.onResult(Constants.CODE_SUCCESS,"User agree policy");
+                    }
+                }
+            });
+        }
+
+    }
+
+
+    void goRequestPermission(Activity activity,PermissonCallBack permissonCallBack) {
+        PermissionKit.enablePermissionDialog = false;
+        PermissionKit.with()
+                .permission(Permission.READ_PHONE_STATE)
+                .permission(Permission.Group.STORAGE)
+                .request(activity, new IPermissionCallback() {
+                    @Override
+                    public void onGranted(List<String> list, boolean all) {
+                        permissonCallBack.onResult(Result.GRANT);
+                    }
+
+                    @Override
+                    public void onDenied(List<String> list, boolean never) {
+                        permissonCallBack.onResult(Result.DENIED);
+                    }
+
+                    @Override
+                    public void onProxyFinish() {
+
+                        permissonCallBack.onResult(Result.FINISH);
+
+                    }
+                });
+    }
+
+    public interface PermissonCallBack{
+        void onResult(Result code);
+    }
+
+    public enum Result{
+        /**
+         * 授权
+         */
+        GRANT,
+        /**
+         * 拒绝
+         */
+        DENIED,
+        /**
+         * 跳过
+         */
+        SKIP,
+        /**
+         * 首次拒绝,第二次不再申请
+         */
+        STOP,
+        FINISH
+    }
 }

+ 127 - 1
library_core/src/main/java/cn/yyxx/commsdk/core/ui/dialog/PrivacyPolicyDialog.java

@@ -1,2 +1,128 @@
-package cn.yyxx.commsdk.core.ui.dialog;public class PrivacyPolicy {
+package cn.yyxx.commsdk.core.ui.dialog;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.view.View;
+import android.view.animation.Animation;
+import android.view.animation.AnimationUtils;
+import android.webkit.DownloadListener;
+import android.webkit.WebSettings;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.widget.Button;
+import android.widget.LinearLayout;
+
+import cn.yyxx.commsdk.core.utils.ResourceUtil;
+import cn.yyxx.support.AppUtils;
+
+public class PrivacyPolicyDialog extends Dialog {
+
+    private Context context;
+    OnClosePageListener listener;
+    String url;
+    private Button btn_disagree,btn_agree;
+
+    public PrivacyPolicyDialog(Context context) {
+        super(context);
+    }
+    public PrivacyPolicyDialog(Context context,String url,OnClosePageListener listener) {
+        super(context);
+        this.context = context;
+        this.url = url;
+        this.listener = listener;
+
+    }
+
+    @Override
+    protected void onCreate(final Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        setContentView(ResourceUtil.getLayoutId(context,
+                "yyxx_comm_privacy_dialog"));
+        boolean  isLandscape = AppUtils.isLandscape(context);;
+
+
+         WebView webView;
+         WebSettings webSettings;
+
+        webView = findViewById(ResourceUtil.getId(context,
+                "wb_user_info"));
+
+
+
+
+        btn_disagree = findViewById(ResourceUtil.getId(context, "btn_disagree"));
+        btn_agree = findViewById(ResourceUtil.getId(context, "btn_agree"));
+
+        setCancelable(false);
+
+        btn_disagree.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+
+                if (listener != null){
+                    listener.onUserDisagreePolicy();
+                }
+
+                webView.destroy();
+                dismiss();
+
+            }
+        });
+        btn_agree.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+
+                if (listener != null){
+                    listener.onUserAgreePolicy();
+                }
+
+                webView.destroy();
+                dismiss();
+
+            }
+        });
+
+        webSettings = webView.getSettings();
+        webSettings.setAllowFileAccess(true);
+        webSettings.setJavaScriptEnabled(true);
+        webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
+        webSettings.setBuiltInZoomControls(false);// 设置支持缩放
+        webSettings.setDomStorageEnabled(true);
+        webView.setHorizontalScrollBarEnabled(false);//水平不显示
+        webView.setVerticalScrollBarEnabled(false); //垂直不显示
+
+
+        webView.setWebViewClient(new WebViewClient(){
+            @Override
+            public void onPageFinished(WebView view, String url) {
+                super.onPageFinished(view, url);
+            }
+
+        });
+
+        webView.setDownloadListener(new DownloadListener() {
+            @Override
+            public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
+                Uri uri = Uri.parse(url);
+                Intent intent = new Intent(Intent.ACTION_VIEW, uri);
+                context.startActivity(intent);
+            }
+        });
+
+
+        webView.setBackgroundColor(0);
+        webView.getBackground().setAlpha(0);
+
+        webView.loadUrl(url);
+
+    }
+
+    public interface OnClosePageListener{
+        void onUserAgreePolicy();
+        void onUserDisagreePolicy();
+    }
 }

+ 1 - 1
library_core/src/main/java/cn/yyxx/commsdk/core/utils/FileUtils.java

@@ -1,4 +1,4 @@
-package com.yyrh.utils;
+package cn.yyxx.commsdk.core.utils;
 
 import android.content.Context;
 

+ 5 - 3
library_core/src/main/java/cn/yyxx/commsdk/core/utils/ManifestUtils.java

@@ -1,10 +1,12 @@
-package com.yyrh.utils;
+package cn.yyxx.commsdk.core.utils;
 
 import android.content.Context;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.text.TextUtils;
 
+import cn.yyxx.commsdk.base.utils.Logger;
+
 /**
  * @author #Suyghur.
  * Created on 2021/10/18
@@ -14,7 +16,7 @@ public class ManifestUtils {
     public static String getMetaDataValue(Context context, String key) {
         Object value = "";
         if (TextUtils.isEmpty(key)) {
-            YYLog.e("metaName is empty");
+            Logger.logHandler("metaName is empty");
             return "";
         }
         try {
@@ -26,7 +28,7 @@ public class ManifestUtils {
                 value = getMetaDataValue(context, newKeyName);
             }
         } catch (PackageManager.NameNotFoundException e) {
-            YYLog.e("must config application meta data : " + key);
+            Logger.logHandler("must config application meta data : " + key);
         }
         if (null == value) {
             value = "";

+ 1 - 1
library_core/src/main/java/cn/yyxx/commsdk/core/utils/ResourceUtil.java

@@ -1,4 +1,4 @@
-package com.yyrh.utils;
+package cn.yyxx.commsdk.core.utils;
 
 import android.content.Context;
 

+ 28 - 1
library_core/src/main/java/cn/yyxx/commsdk/core/utils/SharedPreferencesUtils.java

@@ -1,2 +1,29 @@
-package cn.yyxx.commsdk.core.utils;public class SharedPreferencesUtils {
+package cn.yyxx.commsdk.core.utils;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.SharedPreferences;
+
+public class SharedPreferencesUtils {
+
+    public static String getSharedPreferences(Context context, String tag,
+                                              String key) {
+
+        SharedPreferences sp = context.getSharedPreferences(tag,
+                Activity.MODE_PRIVATE);
+        String name = sp.getString(key, "");
+        return name;
+
+    }
+
+
+    public static void setSharedPreferences(String head, String key, String value, Context context) {
+        SharedPreferences sp = context.getSharedPreferences(head, Activity.MODE_PRIVATE);
+        // 实例化SharedPreferences.Editor对象(第二步)l
+        SharedPreferences.Editor editor = sp.edit();
+        // 用putString的方法保存数据
+        editor.putString(key, value);
+        // 提交当前数据
+        editor.commit();
+    }
 }

+ 1 - 1
library_core/src/main/java/cn/yyxx/commsdk/core/utils/YYLog.java

@@ -1,4 +1,4 @@
-package com.yyrh.utils;
+package cn.yyxx.commsdk.core.utils;
 
 import android.app.Application;
 

+ 1 - 1
library_core/src/main/res/drawable/yyxx_btn_exit_bg.xml

@@ -3,7 +3,7 @@
 
 
 
-    <stroke android:width="1dp" android:color="@color/hnyy_text_cyan_color"/>
+    <stroke android:width="1dp" android:color="@color/yyxx_comm_text_cyan"/>
     <corners
         android:radius="5dp"
         />

+ 4 - 1
library_core/src/main/res/drawable/yyxx_comm_background.xml

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

+ 1 - 1
library_core/src/main/res/drawable/yyxx_comm_confirm_button_style.xml

@@ -5,7 +5,7 @@
 
 
 
-        <gradient android:type="linear" android:useLevel="true" android:startColor="@color/hnyy_text_light_blue_color" android:endColor="@color/hnyy_text_deep_green_color" android:angle="180" />
+        <gradient android:type="linear" android:useLevel="true" android:startColor="@color/yyxx_comm_text_light_blue" android:endColor="@color/yyxx_comm_text_deep_green" android:angle="180" />
         <corners  android:radius="5dp" />
 
 

+ 8 - 15
library_core/src/main/res/layout/yyxx_comm_privacy_dialog.xml

@@ -2,7 +2,7 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="360dp"
     android:layout_height="280dp"
-    android:background="@drawable/hnyy_color_white_70"
+    android:background="@drawable/yyxx_comm_background"
     android:orientation="vertical"
     android:id="@+id/ll_private_policy"
     >
@@ -21,15 +21,8 @@
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:layout_gravity="center"
-            android:background="@color/hnyy_transparent"
+            android:background="@color/yyxx_comm_transparent"
             />
-
-    <ImageView
-            android:layout_width="30dp"
-            android:layout_height="30dp"
-            android:layout_centerInParent="true"
-            android:id="@+id/hnyy_loading"
-            android:background="@mipmap/hnyy_loading"/>
 </RelativeLayout>
     <LinearLayout
         android:layout_width="match_parent"
@@ -49,9 +42,9 @@
             android:layout_height="30dp"
             android:layout_weight="2"
             android:layout_gravity="center"
-            android:text="@string/hnyy_disagreement"
-            android:textColor="@color/hnyy_text_cyan_color"
-            android:background="@drawable/hnyy_btn_exit_bg"/>
+            android:text="@string/yyxx_comm_disagreement"
+            android:textColor="@color/yyxx_comm_text_cyan"
+            android:background="@drawable/yyxx_btn_exit_bg"/>
         <View
             android:layout_width="0dp"
             android:layout_height="match_parent"
@@ -69,9 +62,9 @@
             android:layout_height="30dp"
             android:layout_weight="2"
             android:layout_gravity="center"
-            android:background="@drawable/hnyy_login_button_style"
-            android:textColor="@color/hnyy_white"
-            android:text="@string/hnyy_agreement"/>
+            android:background="@drawable/yyxx_comm_confirm_button_style"
+            android:textColor="@color/yyxx_comm_white"
+            android:text="@string/yyxx_comm_agreement"/>
         <View
             android:layout_width="0dp"
             android:layout_height="match_parent"

+ 4 - 0
library_core/src/main/res/values/yyxx_comm_colors.xml

@@ -3,4 +3,8 @@
     <color name="yyxx_comm_transparent">#00000000</color>
     <color name="yyxx_comm_text_cyan">#12B2A6</color>
     <color name="yyxx_comm_white">#FFFFFF</color>
+    <color name="yyxx_comm_white_70">#B3FFFFFF</color>
+    <color name="yyxx_comm_text_deep_green">#87DB3E</color>
+    <color name="yyxx_comm_text_light_blue">#198AC3</color>
+
 </resources>

+ 4 - 0
library_core/src/main/res/values/yyxx_comm_strings.xml

@@ -1,3 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
+
+    <string name="yyxx_comm_disagreement">不同意</string>
+    <string name="yyxx_comm_agreement">同意</string>
+
 </resources>

BIN
libs/yyxx_support_1.0.2.jar