Prechádzať zdrojové kódy

Merge remote-tracking branch 'origin/sheep_develop' into sheep_develop

zhoujuncai 7 rokov pred
rodič
commit
7707d65966

+ 2 - 2
app/src/main/java/com/sheep/gamegroup/di/modules/NetModule.java

@@ -3,7 +3,7 @@ package com.sheep.gamegroup.di.modules;
 import com.sheep.gamegroup.model.api.ApiService;
 import com.sheep.gamegroup.model.api.StringConverterFactory;
 import com.sheep.gamegroup.model.cookie.CookieManager;
-import com.sheep.gamegroup.model.util.AddPuplicParameIntercept;
+import com.sheep.gamegroup.model.util.AddPublicParamsIntercept;
 import com.sheep.gamegroup.model.util.CacheInterceptor;
 import com.sheep.gamegroup.model.util.EntityUtils;
 import com.sheep.gamegroup.model.util.LogInterceptor;
@@ -37,7 +37,7 @@ public class NetModule {
                 .connectTimeout(5, TimeUnit.SECONDS)
                 .readTimeout(20,TimeUnit.SECONDS)
                 .cookieJar(new CookieManager(SheepApp.getInstance()))
-                .addInterceptor(new AddPuplicParameIntercept())
+                .addInterceptor(new AddPublicParamsIntercept())
                 .addInterceptor(new CacheInterceptor())
                 .addInterceptor(loggingInterceptor)
                 .build();

+ 12 - 9
app/src/main/java/com/sheep/gamegroup/greendao/DDProviderHelper.java

@@ -42,6 +42,18 @@ public class DDProviderHelper {
 
     private DDProviderHelper() {
     }
+    private DaoMaster.DevOpenHelper openHelper;
+    private DaoSession daoSession;
+
+    private synchronized DaoSession getDaossion(Context context) {
+        if(daoSession == null) {
+            if (openHelper == null) {
+                openHelper = new DaoMaster.DevOpenHelper(context, "dd.db");
+            }
+            daoSession = new DaoMaster(openHelper.getReadableDb()).newSession();
+        }
+        return daoSession;
+    }
 
     /**
      * 获取下载任务列表
@@ -125,15 +137,6 @@ public class DDProviderHelper {
         }
     }
 
-    private DaoMaster.DevOpenHelper openHelper;
-
-    private synchronized DaoSession getDaossion(Context context) {
-        if (openHelper == null) {
-            openHelper = new DaoMaster.DevOpenHelper(context, "dd.db");
-        }
-        return new DaoMaster(openHelper.getReadableDb()).newSession();
-    }
-
     /**
      * 获取下载中的任务;
      *

+ 11 - 2
app/src/main/java/com/sheep/gamegroup/model/api/ApiService.java

@@ -1067,8 +1067,7 @@ public interface ApiService {
 
 
 
-//---------------------------下面是sdk相关接口-------------------------------------
-
+//---------------------------start 游戏sdk相关接口-------------------------------------
     /**
      * 请求授权
      * @return
@@ -1085,4 +1084,14 @@ public interface ApiService {
      */
     @POST("app/sdk/pay/order")
     Observable<BaseMessage> sdkPayOrder(@Header("Authorization") String token, @Query("order_no") String out_trade_no);
+//---------------------------end 游戏sdk相关接口-------------------------------------
+
+//---------------------------start 有米科技相关接口-------------------------------------
+    /**
+     * 获取有米积分余额
+     * @return
+     */
+    @GET("youmi/youmi_total_price")
+    Observable<BaseMessage> getYmTotalPrice();
+//---------------------------end 有米科技相关接口-------------------------------------
 }

+ 1 - 1
app/src/main/java/com/sheep/gamegroup/model/util/AddPuplicParameIntercept.java

@@ -23,7 +23,7 @@ import okio.Buffer;
  * Created by ljy on 2018/3/18.
  */
 
-public class AddPuplicParameIntercept implements Interceptor {
+public class AddPublicParamsIntercept implements Interceptor {
     @Override
     public Response intercept(Chain chain) throws IOException {
         Request oldRequest = chain.request();

+ 2 - 1
app/src/main/java/com/sheep/gamegroup/util/ConnectAddress.java

@@ -50,7 +50,8 @@ public enum ConnectAddress {
         @Override
         public String getAppUrl() {
 //            return "http://10.8.210.229:8080/";
-            return "http://10.8.210.243:8080/";
+//            return "http://10.8.210.243:8080/";
+            return "http://10.8.210.235:8080/";
         }
         @Override
         public String getName() {

+ 11 - 3
app/src/main/java/com/sheep/gamegroup/util/DataUtil.java

@@ -9,6 +9,7 @@ import android.text.TextUtils;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.kfzs.duanduan.utils.NumberFormatUtils;
 import com.sheep.gamegroup.model.api.BaseMessageConverter;
 import com.sheep.gamegroup.model.entity.BaseMessage;
 import com.sheep.gamegroup.model.entity.ScreenShotConfig;
@@ -261,17 +262,24 @@ public class DataUtil {
     //-----------------------------------------缓存数据部分-----------------------------------------------------结束
 
     //-----------------------------------------其它数据部分-----------------------------------------------------开始
+    public static int getAsInt(String key, int defaultValue) {
+        String result = aCache.getAsString(key);
+        return NumberFormatUtils.parseInteger(result, defaultValue);
+    }
+    public static void putAsInt(String key, int value) {
+        aCache.put(key, String.valueOf(value));
+    }
     public static String getAsString(String key, String defaultValue) {
         String result = aCache.getAsString(key);
         return result == null ? defaultValue : result;
     }
+    public static void putAsString(String key, String value) {
+        aCache.put(key, value);
+    }
     public static boolean getAsBoolean(String key, boolean defaultValue) {
         String result = aCache.getAsString(key);
         return result == null ? defaultValue : TextUtils.equals(result, "true");
     }
-    public static void putAsString(String key, String value) {
-        aCache.put(key, value);
-    }
     public static void putAsBoolean(String key, boolean value) {
         aCache.put(key, Boolean.toString(value));
     }

+ 25 - 3
app/src/main/java/com/sheep/gamegroup/util/Jump2View.java

@@ -122,8 +122,10 @@ import com.sheep.jiuyan.samllsheep.service.ListenerShotService;
 import com.sheep.jiuyan.samllsheep.utils.G;
 import com.sheep.jiuyan.samllsheep.utils.SpUtils;
 import com.youmi.android.offer.BaseActYmPermissionCheck;
+import com.youmi.android.offer.YmConfig;
 import com.youmi.android.offerdemo.PermissionCheckActivity;
 
+import org.afinal.simplecache.DataKey;
 import org.xutils.ex.DbException;
 
 import java.io.File;
@@ -2033,8 +2035,28 @@ public class Jump2View {
      * 有米科技
      * @param activity
      */
-    public void goYm(Activity activity) {
-        if(activity instanceof BaseActYmPermissionCheck)
-            ((BaseActYmPermissionCheck) activity).checkOrShowYmOffersAds();
+    public void goYm(final Activity activity) {
+        if(activity instanceof BaseActYmPermissionCheck) {
+            if(YmConfig.isToastTotalPrice()) {
+                //获取总积分
+                SheepApp.getInstance().getNetComponent().getApiService().getYmTotalPrice()
+                        .subscribeOn(Schedulers.io())
+                        .observeOn(AndroidSchedulers.mainThread())
+                        .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.getInstance()) {
+                            @Override
+                            public void onNext(BaseMessage baseMessage) {
+                                DataUtil.putAsInt(DataKey.YM_TOTAL_PRICE, baseMessage.getData(Integer.class));
+                                ((BaseActYmPermissionCheck) activity).checkOrShowYmOffersAds();
+                            }
+
+                            @Override
+                            public void onError(BaseMessage baseMessage) {
+                                G.showToast(baseMessage);
+                            }
+                        });
+            } else {
+                ((BaseActYmPermissionCheck) activity).checkOrShowYmOffersAds();
+            }
+        }
     }
 }

+ 6 - 0
app/src/main/java/com/sheep/jiuyan/samllsheep/SheepApp.java

@@ -47,6 +47,7 @@ import com.tencent.smtt.sdk.QbSdk;
 import com.umeng.commonsdk.UMConfigure;
 import com.umeng.socialize.PlatformConfig;
 import com.umeng.socialize.UMShareAPI;
+import com.youmi.android.offer.YmConfig;
 
 import org.xutils.x;
 
@@ -383,6 +384,8 @@ public class SheepApp extends MultiDexApplication {
             ActivityManager.getInstance().pushActivity(activity);
             if (/*activity instanceof SplashAct || */activity instanceof LoginAct) {
                 SysAppUtil.showVersionInfo(activity, SpUtils.getIgnoreMd5());
+            } else if(YmConfig.isAvf(activity)){
+                YmConfig.showTipDialog(activity, YmConfig.TYPE_ADD_VIEW);
             }
 
             if (mActivityCount == 0) {
@@ -444,6 +447,9 @@ public class SheepApp extends MultiDexApplication {
 
         @Override
         public void onActivityDestroyed(Activity activity) {
+            if(YmConfig.isAvf(activity)){
+                YmConfig.disTipDialog();
+            }
             if (!TextUtils.isEmpty(gamePackgeName) && isGameFlag() && (activity instanceof GameCertificationActivity || activity instanceof LoginAct)) {
                 setGameFlag(false);
                 CertificationUtil.newInstance().doCertification(activity, null, gamePackgeName, "delete");

+ 155 - 0
app/src/main/java/com/youmi/android/offer/YmConfig.java

@@ -1,6 +1,32 @@
 package com.youmi.android.offer;
 
+import android.app.Activity;
+import android.graphics.Color;
+import android.graphics.drawable.ColorDrawable;
+import android.support.annotation.IntDef;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowManager;
+import android.widget.PopupWindow;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.sheep.gamegroup.util.LogUtil;
 import com.sheep.gamegroup.util.TestUtil;
+import com.sheep.jiuyan.samllsheep.BuildConfig;
+import com.sheep.jiuyan.samllsheep.R;
+import com.sheep.jiuyan.samllsheep.utils.G;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.concurrent.TimeUnit;
+
+import rx.Observable;
+import rx.android.schedulers.AndroidSchedulers;
+import rx.functions.Action1;
+import rx.schedulers.Schedulers;
 
 /**
  * Created by realicing on 2018/10/29.
@@ -16,4 +42,133 @@ public class YmConfig {
     public static final boolean isShowLog(){
         return TestUtil.isTest();
     }
+    //是否在进入有米任务界面时提示用户总的有米积分
+    public static final boolean isToastTotalPrice(){
+        return false;
+    }
+    //通过设置TextView的方式来添加提示
+    public static final int TYPE_POP = 1;
+    public static final int TYPE_ADD_VIEW = 2;
+    public static final int TYPE_SET_TV = 3;
+    @IntDef({TYPE_POP, TYPE_ADD_VIEW, TYPE_SET_TV})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface SHOW_YM_TIP_TYPE {
+    }
+    private static PopupWindow popupWindow;
+    //显示有米积分兑换率:100积分等于1绵羊币
+    public static void showTipDialog(final Activity activity, @SHOW_YM_TIP_TYPE final int showYmTipType) {
+        Observable.just(1).delay(1, TimeUnit.SECONDS)
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new Action1<Integer>(){
+                    @Override
+                    public void call(Integer integer) {
+                        View contentView = activity.findViewById(android.R.id.content);
+                        try {
+                            switch (showYmTipType){
+                                case TYPE_ADD_VIEW:
+                                    addTipViewToYmAvf(activity, contentView);
+                                    break;
+                                case TYPE_SET_TV:
+                                    setTipViewInYmAvf(activity, contentView);
+                                    break;
+                                case TYPE_POP:
+                                    popTipViewOnYmAvf(activity, contentView);
+                                    break;
+                            }
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                            if(BuildConfig.DEBUG) G.showToast(e.getMessage());
+                        }
+                    }
+                });
+    }
+    //通过popWindow的方式显示提示:注:100积分等于1绵羊币
+    private static void popTipViewOnYmAvf(Activity activity, View contentView) {
+        View popView = LayoutInflater.from(activity).inflate(R.layout.ym_tip, null);
+        View titleBar;
+        if(contentView instanceof ViewGroup){
+            titleBar = ((ViewGroup) contentView).getChildAt(0);
+            if(titleBar instanceof ViewGroup){
+                titleBar = ((ViewGroup) titleBar).getChildAt(0);
+            }
+        } else {
+            titleBar = contentView;
+        }
+        // 创建PopupWindow对象,其中:
+        // 第一个参数是用于PopupWindow中的View,第二个参数是PopupWindow的宽度,
+        // 第三个参数是PopupWindow的高度,第四个参数指定PopupWindow能否获得焦点
+        PopupWindow popupWindow=new PopupWindow(popView, WindowManager.LayoutParams.MATCH_PARENT, titleBar.getHeight(), false);
+        // 设置PopupWindow的背景
+        popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
+        // 设置PopupWindow是否能响应外部点击事件
+        popupWindow.setOutsideTouchable(false);
+        // 设置PopupWindow是否能响应点击事件
+        popupWindow.setTouchable(false);
+        // 显示PopupWindow,其中:
+        // 第一个参数是PopupWindow的锚点,第二和第三个参数分别是PopupWindow相对锚点的x、y偏移
+        popupWindow.showAsDropDown(titleBar, 0, -titleBar.getHeight());
+        // 或者也可以调用此方法显示PopupWindow,其中:
+        // 第一个参数是PopupWindow的父View,第二个参数是PopupWindow相对父View的位置,
+        // 第三和第四个参数分别是PopupWindow相对父View的x、y偏移
+        // window.showAtLocation(parent, gravity, x, y);
+    }
+
+    //通过修改TextView的方式显示提示:注:100积分等于1绵羊币
+    private static void setTipViewInYmAvf(Activity activity, View contentView) {
+        if(contentView instanceof ViewGroup){
+            showChildView((ViewGroup)contentView, 0);
+        }
+    }
+
+    //通过添加view的方式显示提示:注:100积分等于1绵羊币
+    private static void addTipViewToYmAvf(Activity activity, View contentView) {
+        if(contentView instanceof ViewGroup){
+            View rootView = ((ViewGroup) contentView).getChildAt(0);
+            if(rootView instanceof RelativeLayout){
+                View child = LayoutInflater.from(activity).inflate(R.layout.ym_tip, null);
+                RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, ((RelativeLayout) rootView).getChildAt(0).getHeight());
+                ((RelativeLayout) rootView).addView(child, layoutParams);
+            }
+        }
+    }
+
+    private static void showChildView(ViewGroup contentView, int cj) {
+        int count = contentView.getChildCount();
+        for (int i = 0; i < count; i++) {
+            View view = contentView.getChildAt(i);
+            if(view instanceof ViewGroup)
+                showChildView((ViewGroup) view, cj +1);
+            else if(view instanceof TextView) {
+                String text = ((TextView) view).getText().toString();
+//                if(TextUtils.equals(text, "0")){//显示在标题栏有米积分的右边的logo的位置,有背景,字较小
+                if(TextUtils.equals(text, "积分")){//显示在标题栏右边
+                    view.setVisibility(View.VISIBLE);
+                    ((TextView) view).setText(R.string.ym_tip);
+                }
+                LogUtil.println("showChildView", cj, i, contentView, view.getId(), view.getClass().getSimpleName(), text);
+            } else {
+                LogUtil.println("showChildView", cj, i, contentView, view.getId(), view.getClass().getSimpleName());
+            }
+        }
+    }
+
+
+    //取消弹出框
+    public static void disTipDialog() {
+        try {
+            if(popupWindow != null){
+                popupWindow.dismiss();
+                popupWindow = null;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            if(BuildConfig.DEBUG) G.showToast(e.getMessage());
+        }
+    }
+
+    public static boolean isAvf(Activity activity) {
+        return activity instanceof cde.ewd.adw.AVF;
+//        return activity instanceof ActMyMoney;
+    }
 }

+ 15 - 6
app/src/main/java/com/youmi/android/offer/YmPermissionUtil.java

@@ -18,6 +18,10 @@ import android.widget.Toast;
 import com.sheep.gamegroup.util.DataUtil;
 import com.sheep.jiuyan.samllsheep.utils.G;
 
+import org.afinal.simplecache.DataKey;
+
+import java.util.Locale;
+
 import cde.ewd.adw.AdManager;
 import cde.ewd.adw.os.EarnPointsOrderInfo;
 import cde.ewd.adw.os.EarnPointsOrderList;
@@ -77,7 +81,6 @@ public class YmPermissionUtil implements PointsChangeNotify, PointsEarnNotify {
 
     public void showYmOffersAds() {
         initYoumi();
-        setOfferBrowserConfig();
         OffersManager.getInstance(activity).showOffersWall();
     }
 
@@ -87,14 +90,19 @@ public class YmPermissionUtil implements PointsChangeNotify, PointsEarnNotify {
         AdManager.getInstance(activity).init(YmConfig.getAppId(), YmConfig.getAppSecret(), YmConfig.isShowLog());
 
         // 有米android 积分墙sdk 5.0.0之后支持定制浏览器顶部标题栏的部分UI
-        // setOfferBrowserConfig();
+         setOfferBrowserConfig();
 
         // 如果开发者使用积分墙的服务器回调,
         // 1.需要告诉sdk,现在采用服务器回调
         // 2.建议开发者传入自己系统中用户id(如:邮箱账号之类的)(请限制在50个字符串以内)
         // 3.务必在下面的OffersManager.getInstance(this).onAppLaunch();代码之前声明使用服务器回调
-
-         OffersManager.getInstance(activity).setUsingServerCallBack(true);
+//        如果使用了服务器订单回调,则上文所述的客户端积分功能
+//                积分管理
+//        监听积分余额变动
+//                监听积分订单到账通知
+//        配置积分到账提醒
+//        将不再适用,即SDK将不会通知客户端应用订单到账,所有积分流程只能通过服务器实现,可以极大地提高积分 安全性
+        OffersManager.getInstance(activity).setUsingServerCallBack(true);
          OffersManager.getInstance(activity).setCustomUserId(DataUtil.getInstance().getUserId());
 
         // 如果使用积分广告,请务必调用积分广告的初始化接口:
@@ -123,8 +131,9 @@ public class YmPermissionUtil implements PointsChangeNotify, PointsEarnNotify {
 
         // 查询积分余额
         // 从5.3.0版本起,客户端积分托管将由 int 转换为 float
-        float pointsBalance = PointsManager.getInstance(activity).queryPoints();
-        G.showToast("积分余额:" + pointsBalance);
+//        float pointsBalance = PointsManager.getInstance(activity).queryPoints();
+        if(YmConfig.isToastTotalPrice())
+            G.showToast("积分余额:" + DataUtil.getAsInt(DataKey.YM_TOTAL_PRICE, 0));
     }
 
     /**

+ 11 - 0
app/src/main/java/org/afinal/simplecache/DataKey.java

@@ -0,0 +1,11 @@
+package org.afinal.simplecache;
+
+/**
+ * Created by realicing on 2018/10/29.
+ * realicing@sina.com
+ * 缓存数据的key
+ */
+public class DataKey {
+    //有米积分总余额的key
+    public static final String YM_TOTAL_PRICE = "ym_total_price";
+}

+ 3 - 3
app/src/main/res/layout/fgt_play_game.xml

@@ -24,10 +24,10 @@
 
             <include layout="@layout/homepage_item_banner" />
 
-            <View
+            <android.support.v7.widget.RecyclerView
+                android:id="@+id/play_game_act"
                 android:layout_width="match_parent"
-                android:layout_height="10dp"
-                android:background="#fff5f5f5" />
+                android:layout_height="wrap_content" />
 
             <RelativeLayout style="@style/style_wc_rl">
 

+ 15 - 0
app/src/main/res/layout/ym_tip.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentEnd="true"
+        android:layout_centerVertical="true"
+        android:paddingStart="10dp"
+        android:paddingEnd="10dp"
+        android:text="@string/ym_tip"
+        android:textColor="@color/white"
+        android:textSize="15sp"/>
+</RelativeLayout>

+ 1 - 0
app/src/main/res/values/ym_strings.xml

@@ -9,5 +9,6 @@
     <string name="btn_get_online_config">获取有米在线参数</string>
     <string name="btn_check_reach_ntp_time">是否达到指定网络时间</string>
     <string name="btn_check_ad_config">检查广告配置</string>
+    <string name="ym_tip">注:100积分等于1绵羊币</string>
 
 </resources>