update shelf rule
This commit is contained in:
		
							parent
							
								
									182135e945
								
							
						
					
					
						commit
						eebe556071
					
				|  | @ -62,7 +62,7 @@ android { | ||||||
|             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' |             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' | ||||||
|           // versionCode 1 |           // versionCode 1 | ||||||
|         //   versionName "v1.0" |         //   versionName "v1.0" | ||||||
|           applicationVariants.all { variant -> |           /*applicationVariants.all { variant -> | ||||||
|                 variant.outputs.all { output -> |                 variant.outputs.all { output -> | ||||||
|                     def outFile = output.outputFile |                     def outFile = output.outputFile | ||||||
|                     if (outFile != null && outFile.name.endsWith(".apk")) { |                     if (outFile != null && outFile.name.endsWith(".apk")) { | ||||||
|  | @ -72,12 +72,12 @@ android { | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|             } |             }*/ | ||||||
|             signingConfig signingConfigs.releaseConfig |             signingConfig signingConfigs.releaseConfig | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     //渠道 |     //渠道 | ||||||
|   productFlavors { |  /* productFlavors { | ||||||
|         // googleplay {} |         // googleplay {} | ||||||
|         google { |         google { | ||||||
|             applicationId "com.zhushou.yueshu" |             applicationId "com.zhushou.yueshu" | ||||||
|  | @ -178,7 +178,7 @@ android { | ||||||
|             flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] |             flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|     } |     }*/ | ||||||
|     android { |     android { | ||||||
|         lintOptions { |         lintOptions { | ||||||
|             abortOnError false |             abortOnError false | ||||||
|  | @ -247,5 +247,5 @@ dependencies { | ||||||
|     implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.16' |     implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.16' | ||||||
|     implementation(name: 'open_ad_sdk', ext: 'aar') |     implementation(name: 'open_ad_sdk', ext: 'aar') | ||||||
|     implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.6' |     implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.6' | ||||||
|  // implementation 'com.google.android.gms:play-services-ads:17.2.1' |     implementation 'com.google.android.gms:play-services-ads:17.2.1' | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -282,4 +282,4 @@ | ||||||
| -keep class com.ss.sys.ces.* {*;} | -keep class com.ss.sys.ces.* {*;} | ||||||
| 
 | 
 | ||||||
| #GOOGLE MOBAD | #GOOGLE MOBAD | ||||||
| -keep com.google.android.gms.ads.** { *; } | #-keep com.google.android.gms.ads.** { *; } | ||||||
|  |  | ||||||
|  | @ -197,13 +197,13 @@ | ||||||
|         <meta-data |         <meta-data | ||||||
|             android:name="UMENG_APPKEY" |             android:name="UMENG_APPKEY" | ||||||
|             android:value="5cd6238a570df375c3000cc9" /> <!-- <meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}"/> --> |             android:value="5cd6238a570df375c3000cc9" /> <!-- <meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}"/> --> | ||||||
|           <!--<meta-data     android:name="UMENG_CHANNEL"    android:value="debug" />--> |           <meta-data     android:name="UMENG_CHANNEL"    android:value="debug" /> | ||||||
|             <meta-data       android:name="UMENG_CHANNEL"   android:value="${UMENG_CHANNEL_VALUE}" /> |          <!--   <meta-data       android:name="UMENG_CHANNEL"   android:value="${UMENG_CHANNEL_VALUE}" />--> | ||||||
|         <!-- google ad--> |         <!-- google ad--> | ||||||
|         <!-- Sample AdMob App ID: ca-app-pub-3940256099942544~3347511713 --> |         <!-- Sample AdMob App ID: ca-app-pub-3940256099942544~3347511713 --> | ||||||
| <!--        <meta-data |         <meta-data | ||||||
|             android:name="com.google.android.gms.ads.APPLICATION_ID" |             android:name="com.google.android.gms.ads.APPLICATION_ID" | ||||||
|             android:value="${MOBAPPID}"/>--> |             android:value="${MOBAPPID}"/> | ||||||
|     </application> |     </application> | ||||||
| 
 | 
 | ||||||
| </manifest> | </manifest> | ||||||
|  | @ -14,29 +14,34 @@ import android.os.Message; | ||||||
| import android.provider.Settings; | import android.provider.Settings; | ||||||
| import android.support.annotation.MainThread; | import android.support.annotation.MainThread; | ||||||
| import android.support.annotation.Nullable; | import android.support.annotation.Nullable; | ||||||
| import android.text.TextUtils; | 
 | ||||||
| import android.util.Log; | import android.util.Log; | ||||||
| import android.view.KeyEvent; | import android.view.KeyEvent; | ||||||
| import android.view.View; | import android.view.View; | ||||||
| import android.view.ViewGroup; | import android.view.ViewGroup; | ||||||
| import android.widget.FrameLayout; | 
 | ||||||
| import android.widget.TextView; | import android.widget.TextView; | ||||||
| import android.widget.Toast; | import android.widget.Toast; | ||||||
| 
 | 
 | ||||||
| import com.bytedance.sdk.openadsdk.AdSlot; | import com.bytedance.sdk.openadsdk.AdSlot; | ||||||
| import com.bytedance.sdk.openadsdk.TTAdNative; | import com.bytedance.sdk.openadsdk.TTAdNative; | ||||||
| import com.bytedance.sdk.openadsdk.TTSplashAd; | import com.bytedance.sdk.openadsdk.TTSplashAd; | ||||||
|  | import com.google.android.gms.ads.AdListener; | ||||||
|  | import com.google.android.gms.ads.AdRequest; | ||||||
|  | import com.google.android.gms.ads.InterstitialAd; | ||||||
|  | import com.google.android.gms.ads.MobileAds; | ||||||
| import com.novelbook.android.AD.toutiao.TTAdManagerHolder; | import com.novelbook.android.AD.toutiao.TTAdManagerHolder; | ||||||
| import com.novelbook.android.AD.toutiao.WeakHandler; | import com.novelbook.android.AD.toutiao.WeakHandler; | ||||||
| import com.novelbook.android.BuildConfig; | 
 | ||||||
| import com.novelbook.android.Main2Activity; | import com.novelbook.android.Main2Activity; | ||||||
|  | 
 | ||||||
| import com.novelbook.android.R; | import com.novelbook.android.R; | ||||||
| import com.novelbook.android.utils.Constants; | import com.novelbook.android.utils.Constants; | ||||||
| import com.qq.e.ads.splash.SplashAD; | import com.qq.e.ads.splash.SplashAD; | ||||||
| import com.qq.e.ads.splash.SplashADListener; | import com.qq.e.ads.splash.SplashADListener; | ||||||
| import com.qq.e.comm.util.AdError; | import com.qq.e.comm.util.AdError; | ||||||
| 
 | 
 | ||||||
| import org.litepal.util.Const; | 
 | ||||||
| 
 | 
 | ||||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||||
| import java.util.HashMap; | import java.util.HashMap; | ||||||
|  | @ -54,10 +59,14 @@ import static com.novelbook.android.bean.AdSetting.getAppID; | ||||||
|  */ |  */ | ||||||
| public class SplashActivity extends Activity implements WeakHandler.IHandler, SplashADListener { | public class SplashActivity extends Activity implements WeakHandler.IHandler, SplashADListener { | ||||||
|     private static final String TAG =  SplashActivity.class.getSimpleName(); |     private static final String TAG =  SplashActivity.class.getSimpleName(); | ||||||
| 
 |     @Nullable | ||||||
|     @BindView(R.id.splash_container) |     @BindView(R.id.splash_container) | ||||||
|     ViewGroup mSplashContainer; |     ViewGroup mSplashContainer; | ||||||
| 
 | 
 | ||||||
|  |     @Nullable | ||||||
|  |     @BindView(R.id.textTile) | ||||||
|  |     TextView tvTitle; | ||||||
|  | 
 | ||||||
|  //--------tencent---> |  //--------tencent---> | ||||||
| 
 | 
 | ||||||
|     private SplashAD splashAD; |     private SplashAD splashAD; | ||||||
|  | @ -103,9 +112,10 @@ public class SplashActivity extends Activity implements WeakHandler.IHandler, Sp | ||||||
| 
 | 
 | ||||||
|     //-toutiao---<--- |     //-toutiao---<--- | ||||||
| 
 | 
 | ||||||
|  |     //---admob---> | ||||||
|  |     private InterstitialAd mInterstitialAd; | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
|     @BindView(R.id.textTile) |  | ||||||
|     TextView tvTitle; |  | ||||||
| 
 | 
 | ||||||
|     @SuppressWarnings("RedundantCast") |     @SuppressWarnings("RedundantCast") | ||||||
|     @Override |     @Override | ||||||
|  | @ -125,13 +135,21 @@ public class SplashActivity extends Activity implements WeakHandler.IHandler, Sp | ||||||
|                 rid = R.layout.ad_toutiao_activity_splash; |                 rid = R.layout.ad_toutiao_activity_splash; | ||||||
|                 splashSource=Constants.AD_TOUTIAO; |                 splashSource=Constants.AD_TOUTIAO; | ||||||
|             } |             } | ||||||
|  |             else{ | ||||||
|  |                 goToMainActivity();return; | ||||||
|  |             } | ||||||
|         }else{ |         }else{ | ||||||
|             if (Constants.AD_SETTING.getSplash2().getSource() == Constants.AD_TENCENT_QQ) { |             if (Constants.AD_SETTING.getSplash2().getSource() == Constants.AD_TENCENT_QQ) { | ||||||
|                 rid = R.layout.ad_qq_activity_splash; |                 rid = R.layout.ad_qq_activity_splash; | ||||||
|             } else if (Constants.AD_SETTING.getSplash2().getSource() == Constants.AD_TOUTIAO) { |             } else if (Constants.AD_SETTING.getSplash2().getSource() == Constants.AD_TOUTIAO) { | ||||||
|                // rid = R.layout.ad_toutiao_activity_splash; |                // rid = R.layout.ad_toutiao_activity_splash; | ||||||
|                 goToMainActivity(); |                // goToMainActivity(); | ||||||
|                 return; |                 return; | ||||||
|  |             }else if (Constants.AD_SETTING.getSplash2() .getSource() == Constants.AD_MOB) { | ||||||
|  |              //   goToMainActivity(); | ||||||
|  |              //   return; | ||||||
|  |                 rid = R.layout.activity_blank; | ||||||
|  |                  splashSource=Constants.AD_MOB; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  | @ -152,6 +170,7 @@ public class SplashActivity extends Activity implements WeakHandler.IHandler, Sp | ||||||
|                         | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |                         | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | ||||||
|                 //  | View.SYSTEM_UI_FLAG_IMMERSIVE |                 //  | View.SYSTEM_UI_FLAG_IMMERSIVE | ||||||
|         ); |         ); | ||||||
|  |         if(tvTitle!=null) | ||||||
|         tvTitle.setText(R.string.app_name); |         tvTitle.setText(R.string.app_name); | ||||||
|         //加载开屏广告 |         //加载开屏广告 | ||||||
|         if(splashSource  == Constants.AD_TOUTIAO ) { |         if(splashSource  == Constants.AD_TOUTIAO ) { | ||||||
|  | @ -171,6 +190,14 @@ public class SplashActivity extends Activity implements WeakHandler.IHandler, Sp | ||||||
|                 // 如果是Android6.0以下的机器,默认在安装时获得了所有权限,可以直接调用SDK |                 // 如果是Android6.0以下的机器,默认在安装时获得了所有权限,可以直接调用SDK | ||||||
|                 fetchSplashAD(this, mSplashContainer, skipView, getAppID(Constants.AD_TENCENT_QQ), getPosId(), this, 0); |                 fetchSplashAD(this, mSplashContainer, skipView, getAppID(Constants.AD_TENCENT_QQ), getPosId(), this, 0); | ||||||
|             } |             } | ||||||
|  |         }else  if(splashSource  == Constants.AD_MOB ){ | ||||||
|  |             getAdMob(); | ||||||
|  |           /*  if (Build.VERSION.SDK_INT >= 23) { | ||||||
|  |                 checkAndRequestPermissionAdmob(); | ||||||
|  |             } else { | ||||||
|  |                 // 如果是Android6.0以下的机器,默认在安装时获得了所有权限,可以直接调用SDK | ||||||
|  |                 getAdMob(); | ||||||
|  |             }*/ | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     /** |     /** | ||||||
|  | @ -352,10 +379,12 @@ public class SplashActivity extends Activity implements WeakHandler.IHandler, Sp | ||||||
|         if (!(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)) { |         if (!(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)) { | ||||||
|             lackedPermission.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); |             lackedPermission.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); | ||||||
|         } |         } | ||||||
| 
 |         if (!(checkSelfPermission(Manifest.permission.REQUEST_INSTALL_PACKAGES) == PackageManager.PERMISSION_GRANTED)) { | ||||||
|         if (!(checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)) { |             lackedPermission.add(Manifest.permission.REQUEST_INSTALL_PACKAGES); | ||||||
|             lackedPermission.add(Manifest.permission.ACCESS_FINE_LOCATION); |  | ||||||
|         } |         } | ||||||
|  |         /*if (!(checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)) { | ||||||
|  |             lackedPermission.add(Manifest.permission.ACCESS_FINE_LOCATION); | ||||||
|  |         }*/ | ||||||
| 
 | 
 | ||||||
|         // 权限都已经有了,那么直接调用SDK |         // 权限都已经有了,那么直接调用SDK | ||||||
|         if (lackedPermission.size() == 0) { |         if (lackedPermission.size() == 0) { | ||||||
|  | @ -496,4 +525,85 @@ public class SplashActivity extends Activity implements WeakHandler.IHandler, Sp | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     //----qq ad end <--- |     //----qq ad end <--- | ||||||
|  | 
 | ||||||
|  |     void getAdMob(){ | ||||||
|  |         MobileAds.initialize(this,"ca-app-pub-3940256099942544~3347511713"); | ||||||
|  | 
 | ||||||
|  |         mInterstitialAd = new InterstitialAd(this); | ||||||
|  |         mInterstitialAd.setAdListener(new AdListener() { | ||||||
|  |             @Override | ||||||
|  |             public void onAdLoaded() { | ||||||
|  |                 // Code to be executed when an ad finishes loading. | ||||||
|  |                 Log.d(TAG, "onAdLoaded: "); | ||||||
|  |                 SplashAdManager.setSplashTime(); | ||||||
|  |                 mInterstitialAd.show(); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             @Override | ||||||
|  |             public void onAdFailedToLoad(int errorCode) { | ||||||
|  |                 // Code to be executed when an ad request fails. | ||||||
|  |                 Log.d(TAG, "onAdFailedToLoad: "); | ||||||
|  |                 goToMainActivity(); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             @Override | ||||||
|  |             public void onAdOpened() { | ||||||
|  |                 // Code to be executed when the ad is displayed. | ||||||
|  |                 Log.d(TAG, "onAdOpened: "); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             @Override | ||||||
|  |             public void onAdClicked() { | ||||||
|  |                 // Code to be executed when the user clicks on an ad. | ||||||
|  |                 Log.d(TAG, "onAdClicked: "); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             @Override | ||||||
|  |             public void onAdLeftApplication() { | ||||||
|  |                 // Code to be executed when the user has left the app. | ||||||
|  |                 Log.d(TAG, "onAdLeftApplication: "); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             @Override | ||||||
|  |             public void onAdClosed() { | ||||||
|  |                 // Code to be executed when the interstitial ad is closed. | ||||||
|  |                 Log.d(TAG, "onAdClosed: "); | ||||||
|  |                 goToMainActivity(); | ||||||
|  |             } | ||||||
|  |         }); | ||||||
|  |         mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712"); | ||||||
|  | 
 | ||||||
|  |         mInterstitialAd.loadAd(new AdRequest.Builder().build()); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @TargetApi(Build.VERSION_CODES.M) | ||||||
|  |     private void checkAndRequestPermissionAdmob() { | ||||||
|  |         List<String> lackedPermission = new ArrayList<String>(); | ||||||
|  |         if (!(checkSelfPermission(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED)) { | ||||||
|  |             lackedPermission.add(Manifest.permission.READ_PHONE_STATE); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         if (!(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)) { | ||||||
|  |             lackedPermission.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); | ||||||
|  |         } | ||||||
|  |         if (!(checkSelfPermission(Manifest.permission.REQUEST_INSTALL_PACKAGES) == PackageManager.PERMISSION_GRANTED)) { | ||||||
|  |             lackedPermission.add(Manifest.permission.REQUEST_INSTALL_PACKAGES); | ||||||
|  |         } | ||||||
|  |         /*if (!(checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)) { | ||||||
|  |             lackedPermission.add(Manifest.permission.ACCESS_FINE_LOCATION); | ||||||
|  |         }*/ | ||||||
|  | 
 | ||||||
|  |         // 权限都已经有了,那么直接调用SDK | ||||||
|  |         if (lackedPermission.size() == 0) { | ||||||
|  |             getAdMob(); | ||||||
|  |         } else { | ||||||
|  |             // 请求所缺少的权限,在onRequestPermissionsResult中再看是否获得权限,如果获得权限就可以调用SDK,否则不要调用SDK。 | ||||||
|  |             String[] requestPermissions = new String[lackedPermission.size()]; | ||||||
|  |             lackedPermission.toArray(requestPermissions); | ||||||
|  |             requestPermissions(requestPermissions, 1024); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -8,9 +8,16 @@ import android.content.res.Configuration; | ||||||
| import android.os.Build; | import android.os.Build; | ||||||
| import android.os.Bundle; | import android.os.Bundle; | ||||||
| import android.util.Log; | import android.util.Log; | ||||||
|  | import android.view.View; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | import com.google.android.gms.ads.AdListener; | ||||||
|  | import com.google.android.gms.ads.AdRequest; | ||||||
|  | import com.google.android.gms.ads.InterstitialAd; | ||||||
|  | import com.google.android.gms.ads.MobileAds; | ||||||
| import com.novelbook.android.Main2Activity; | import com.novelbook.android.Main2Activity; | ||||||
|  | import com.novelbook.android.MyApp; | ||||||
|  | import com.novelbook.android.bean.AdSetting; | ||||||
| import com.novelbook.android.utils.Constants; | import com.novelbook.android.utils.Constants; | ||||||
| 
 | 
 | ||||||
| import java.util.Date; | import java.util.Date; | ||||||
|  | @ -19,12 +26,13 @@ import static com.novelbook.android.utils.Constants.AD_TENCENT_QQ; | ||||||
| import static com.novelbook.android.utils.Constants.AD_TOUTIAO; | import static com.novelbook.android.utils.Constants.AD_TOUTIAO; | ||||||
| 
 | 
 | ||||||
| public class SplashAdManager implements Application.ActivityLifecycleCallbacks, ComponentCallbacks2 { | public class SplashAdManager implements Application.ActivityLifecycleCallbacks, ComponentCallbacks2 { | ||||||
|  |     final static String TAG= SplashAdManager.class.getSimpleName(); | ||||||
|     private boolean mIsBackground; |     private boolean mIsBackground; | ||||||
|     private static long lastAd =0; |     private static long lastAd =0; | ||||||
|     //private static long interVal = 5000;//Constants.AD_SPLASH_INVTERVAL; |     //private static long interVal = 5000;//Constants.AD_SPLASH_INVTERVAL; | ||||||
|     private static int pages =0; |     private static int pages =0; | ||||||
| 
 | 
 | ||||||
| 
 |     private static InterstitialAd  mInterstitialAd ; | ||||||
|     /****** |     /****** | ||||||
|      * 使用方式:在Application中直接构造即可 |      * 使用方式:在Application中直接构造即可 | ||||||
|      * @param application |      * @param application | ||||||
|  | @ -49,6 +57,10 @@ public class SplashAdManager implements Application.ActivityLifecycleCallbacks, | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|     public void onActivityCreated(Activity activity, Bundle savedInstanceState) { |     public void onActivityCreated(Activity activity, Bundle savedInstanceState) { | ||||||
|  |         if(Constants.AD_SETTING.getSplash2() .getSource() == Constants.AD_MOB) { | ||||||
|  |             getAdMob(activity); | ||||||
|  |         } | ||||||
|  |         Log.d(TAG, "onActivityCreated:mInterstitialAd initialized "); | ||||||
|         if(activity instanceof Main2Activity){ |         if(activity instanceof Main2Activity){ | ||||||
| 
 | 
 | ||||||
|             //showAd(activity); |             //showAd(activity); | ||||||
|  | @ -117,16 +129,29 @@ public class SplashAdManager implements Application.ActivityLifecycleCallbacks, | ||||||
|     static void showSplashAd(Activity activity){ |     static void showSplashAd(Activity activity){ | ||||||
|         if(canShowAd()) { |         if(canShowAd()) { | ||||||
|             lastAd = new Date().getTime(); |             lastAd = new Date().getTime(); | ||||||
|  | 
 | ||||||
|  |             if(Constants.AD_SETTING.getSplash2() .getSource() == Constants.AD_MOB){ | ||||||
|  | 
 | ||||||
|  |                 Log.d(TAG, "showSplashAd:mInterstitialAd.isLoaded() " +mInterstitialAd.isLoaded()); | ||||||
|  |                 if(mInterstitialAd!=null && mInterstitialAd.isLoaded()) { | ||||||
|  |                     SplashAdManager.setSplashTime(); | ||||||
|  |                     activity.getWindow().getDecorView().setSystemUiVisibility( | ||||||
|  |                             View.SYSTEM_UI_FLAG_LAYOUT_STABLE | ||||||
|  |                                     | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | ||||||
|  |                                     | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | ||||||
|  |                                     | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar | ||||||
|  |                                     | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar | ||||||
|  |                                     | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | ||||||
|  |                             //  | View.SYSTEM_UI_FLAG_IMMERSIVE | ||||||
|  |                     ); | ||||||
|  |                     mInterstitialAd.show(); | ||||||
|  |                     mInterstitialAd.loadAd(new AdRequest.Builder().build()); | ||||||
|  |                 } | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|             Intent intent = new Intent(activity, SplashActivity.class); |             Intent intent = new Intent(activity, SplashActivity.class); | ||||||
|             intent.putExtra(SplashActivity.EXTR_LUNCHER, false); |             intent.putExtra(SplashActivity.EXTR_LUNCHER, false); | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|          /*   if(Constants.AD_SPLASH_SOURCE ==AD_TENCENT_QQ) { |  | ||||||
|                 intent =   new Intent(activity, com.novelbook.android.AD.qq.SplashActivity.class); |  | ||||||
|             }else if(Constants.AD_SPLASH_SOURCE ==AD_TOUTIAO){ |  | ||||||
|                 intent =   new Intent(activity, SplashActivity.class); |  | ||||||
|                 intent.putExtra(SplashActivity.EXTR_LUNCHER, false); |  | ||||||
|             }*/ |  | ||||||
|             activity.startActivity(intent); |             activity.startActivity(intent); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | @ -135,7 +160,7 @@ public class SplashAdManager implements Application.ActivityLifecycleCallbacks, | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
|         long in = new Date().getTime() -lastAd; |         long in = new Date().getTime() -lastAd; | ||||||
|         int interVal = Constants.AD_SETTING.getSplash2().getInterval4Display()*1000; |         int interVal =  Constants.AD_SETTING.getSplash2().getInterval4Display()*1000; | ||||||
|         Log.d("zzr", "canShowAd: interval is,  " +in  + ", canshow? "+ (in >interVal)); |         Log.d("zzr", "canShowAd: interval is,  " +in  + ", canshow? "+ (in >interVal)); | ||||||
|         return in >interVal; |         return in >interVal; | ||||||
|     } |     } | ||||||
|  | @ -145,10 +170,66 @@ public class SplashAdManager implements Application.ActivityLifecycleCallbacks, | ||||||
|     } |     } | ||||||
|     public static void plusPage(Activity activity){ |     public static void plusPage(Activity activity){ | ||||||
|         pages++; |         pages++; | ||||||
|         if(pages >Constants.AD_SETTING.getSplash2().getPageCount4Display()){ |         int pcnt =Constants.AD_SETTING.getSplash2().getPageCount4Display();; | ||||||
|  | 
 | ||||||
|  |         if(pages > pcnt){ | ||||||
|             clearPages(); |             clearPages(); | ||||||
|             showSplashAd(activity); |             showSplashAd(activity); | ||||||
| 
 | 
 | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     void getAdMob(Activity activity){ | ||||||
|  |         mInterstitialAd = new InterstitialAd(activity); | ||||||
|  |         Log.d(TAG, "getAdMob: mIntersititiaAd is null ?" + (mInterstitialAd==null)); | ||||||
|  |         if(mInterstitialAd!=null) | ||||||
|  |         mInterstitialAd.setAdListener(new AdListener() { | ||||||
|  | 
 | ||||||
|  |             @Override | ||||||
|  |             public void onAdLoaded() { | ||||||
|  |                 // Code to be executed when an ad finishes loading. | ||||||
|  |                 Log.d(TAG, "onAdLoaded: "); | ||||||
|  | 
 | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             @Override | ||||||
|  |             public void onAdFailedToLoad(int errorCode) { | ||||||
|  |                 // Code to be executed when an ad request fails. | ||||||
|  |                 Log.d(TAG, "onAdFailedToLoad: "); | ||||||
|  | 
 | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             @Override | ||||||
|  |             public void onAdOpened() { | ||||||
|  |                 // Code to be executed when the ad is displayed. | ||||||
|  |                 Log.d(TAG, "onAdOpened: "); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             @Override | ||||||
|  |             public void onAdClicked() { | ||||||
|  |                 // Code to be executed when the user clicks on an ad. | ||||||
|  |                 Log.d(TAG, "onAdClicked: "); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             @Override | ||||||
|  |             public void onAdLeftApplication() { | ||||||
|  |                 // Code to be executed when the user has left the app. | ||||||
|  |                 Log.d(TAG, "onAdLeftApplication: "); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             @Override | ||||||
|  |             public void onAdClosed() { | ||||||
|  |                 // Code to be executed when the interstitial ad is closed. | ||||||
|  |                 Log.d(TAG, "onAdClosed: "); | ||||||
|  | 
 | ||||||
|  |             } | ||||||
|  |         }); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         mInterstitialAd.setAdUnitId(  Constants.AD_SETTING.getSplash2().getSlotId(Constants.AD_MOB)); | ||||||
|  |         mInterstitialAd.loadAd(new AdRequest.Builder().build()); | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -42,10 +42,10 @@ import com.bytedance.sdk.openadsdk.TTImage; | ||||||
| import com.bytedance.sdk.openadsdk.TTInteractionAd; | import com.bytedance.sdk.openadsdk.TTInteractionAd; | ||||||
| import com.bytedance.sdk.openadsdk.TTNativeAd; | import com.bytedance.sdk.openadsdk.TTNativeAd; | ||||||
| import com.google.android.gms.ads.AdListener; | import com.google.android.gms.ads.AdListener; | ||||||
| /*import com.google.android.gms.ads.AdRequest; | import com.google.android.gms.ads.AdRequest; | ||||||
| import com.google.android.gms.ads.AdSize; | import com.google.android.gms.ads.AdSize; | ||||||
| import com.google.android.gms.ads.AdView; | import com.google.android.gms.ads.AdView; | ||||||
| import com.google.android.gms.ads.MobileAds;*/ | import com.google.android.gms.ads.MobileAds; | ||||||
| import com.google.gson.Gson; | import com.google.gson.Gson; | ||||||
| import com.novelbook.android.AD.toutiao.TTAdManagerHolder; | import com.novelbook.android.AD.toutiao.TTAdManagerHolder; | ||||||
| 
 | 
 | ||||||
|  | @ -423,6 +423,8 @@ public abstract  class Activity_base extends AppCompatActivity implements Native | ||||||
|             loadNativeBanner_qq(-1, 388); |             loadNativeBanner_qq(-1, 388); | ||||||
|         }else if(Constants.AD_SETTING.getChapterContentBanner().getSource() == AD_TOUTIAO) { |         }else if(Constants.AD_SETTING.getChapterContentBanner().getSource() == AD_TOUTIAO) { | ||||||
|             loadNativeBanner_toutiao(mBannerContainer ,690,388); |             loadNativeBanner_toutiao(mBannerContainer ,690,388); | ||||||
|  |         }else if(Constants.AD_SETTING.getChapterContentBanner().getSource() == AD_MOB) { | ||||||
|  |             loadBanner_Mob(mBannerContainer, 699,388); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -446,7 +448,7 @@ public abstract  class Activity_base extends AppCompatActivity implements Native | ||||||
|             loadBanner_toutiao(mBannerContainer, width,height); |             loadBanner_toutiao(mBannerContainer, width,height); | ||||||
| 
 | 
 | ||||||
|         }else if(Constants.AD_SETTING.getChapterBanner().getSource()== AD_MOB){ |         }else if(Constants.AD_SETTING.getChapterBanner().getSource()== AD_MOB){ | ||||||
|             //loadBanner_Mob(mBannerContainer, width,height); |             loadBanner_Mob(mBannerContainer, width,height); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -454,7 +456,7 @@ public abstract  class Activity_base extends AppCompatActivity implements Native | ||||||
|     void initializeAd(){ |     void initializeAd(){ | ||||||
|         if(Constants.AD_SETTING.isShowAdsense()) { |         if(Constants.AD_SETTING.isShowAdsense()) { | ||||||
|             initAD_TouTiao(); |             initAD_TouTiao(); | ||||||
|             initialMobileAd(); |           // initialMobileAd(); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -1332,21 +1334,21 @@ public abstract  class Activity_base extends AppCompatActivity implements Native | ||||||
| //------------------------AD Google MobileAds--------------- | //------------------------AD Google MobileAds--------------- | ||||||
|   //   MobileAds.initialize(this, "YOUR_ADMOB_APP_ID"); |   //   MobileAds.initialize(this, "YOUR_ADMOB_APP_ID"); | ||||||
| 
 | 
 | ||||||
|   /*  boolean isMobleAdInitialize =false; |     boolean isMobleAdInitialize =false; | ||||||
|     AdView mAdView; |     //AdView mAdView; | ||||||
|     void initialMobileAd(){ |     void initialMobileAd(){ | ||||||
|         // Sample AdMob app ID: ca-app-pub-3940256099942544~3347511713 |         // Sample AdMob app ID: ca-app-pub-3940256099942544~3347511713 | ||||||
|         String appID = AdSetting.getAppID(Constants.AD_MOB); |         String appID = AdSetting.getAppID(Constants.AD_MOB); | ||||||
|         appID ="ca-app-pub-3940256099942544~3347511713"; |         appID =AdSetting.getAppID(Constants.AD_MOB); | ||||||
|         MobileAds.initialize(this, appID); |         MobileAds.initialize(this, appID); | ||||||
|         isMobleAdInitialize =true; |         isMobleAdInitialize =true; | ||||||
|         Log.d(TAG, "onAdLoaded: initialMobileAd "); |         Log.d(TAG, "onAdLoaded: initialMobileAd "); | ||||||
|     } |     } | ||||||
|     AdView getAdView(){ |     AdView getAdView(){ | ||||||
|         if(mAdView ==null){ |        // if(mAdView ==null){ | ||||||
|             mAdView = new AdView(this); |             AdView mAdView = new AdView(this); | ||||||
|             mAdView.setAdSize(AdSize.BANNER); | 
 | ||||||
|             String codeId = "ca-app-pub-3940256099942544/6300978111";//Constants.AD_SETTING.getChapterBanner().getSlotId(Constants.AD_MOB) ; |             String codeId =  Constants.AD_SETTING.getChapterBanner().getSlotId(Constants.AD_MOB);//Constants.AD_SETTING.getChapterBanner().getSlotId(Constants.AD_MOB) ; | ||||||
|             mAdView.setAdUnitId(codeId); |             mAdView.setAdUnitId(codeId); | ||||||
|             mAdView.setAdListener(new AdListener() { |             mAdView.setAdListener(new AdListener() { | ||||||
|                 @Override |                 @Override | ||||||
|  | @ -1359,7 +1361,7 @@ public abstract  class Activity_base extends AppCompatActivity implements Native | ||||||
|                 @Override |                 @Override | ||||||
|                 public void onAdFailedToLoad(int errorCode) { |                 public void onAdFailedToLoad(int errorCode) { | ||||||
|                     // Code to be executed when an ad request fails. |                     // Code to be executed when an ad request fails. | ||||||
|                     Log.d(TAG, "onAdLoaded: Code to be executed when an ad request fails."); |                     Log.d(TAG, "onAdLoaded: Code to be executed when an ad request fails." +errorCode); | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 @Override |                 @Override | ||||||
|  | @ -1388,7 +1390,7 @@ public abstract  class Activity_base extends AppCompatActivity implements Native | ||||||
|                     Log.d(TAG, "onAdLoaded:  Code to be executed when the user is about to return to the app after tapping on an ad."); |                     Log.d(TAG, "onAdLoaded:  Code to be executed when the user is about to return to the app after tapping on an ad."); | ||||||
|                 } |                 } | ||||||
|             }); |             }); | ||||||
|         } |      //   } | ||||||
|         return mAdView; |         return mAdView; | ||||||
|     } |     } | ||||||
|     private void loadBanner_Mob(FrameLayout bannerContainer, int width, int height) { |     private void loadBanner_Mob(FrameLayout bannerContainer, int width, int height) { | ||||||
|  | @ -1397,16 +1399,20 @@ public abstract  class Activity_base extends AppCompatActivity implements Native | ||||||
|         if(!isMobleAdInitialize){ |         if(!isMobleAdInitialize){ | ||||||
|             initialMobileAd(); |             initialMobileAd(); | ||||||
|         } |         } | ||||||
|         Log.d(TAG, "onAdLoaded: 2 loadBanner_Mob "); |         Log.d(TAG, "onAdLoaded: 2 loadBanner_Mob height:" +height); | ||||||
| 
 |         AdSize adsize = new AdSize(width,height); | ||||||
| 
 |         AdView adView = getAdView(); | ||||||
|  |         if(height<250){ | ||||||
|  |             adView.setAdSize(AdSize.BANNER); | ||||||
|  |         }else { | ||||||
|  |             adView.setAdSize(AdSize.MEDIUM_RECTANGLE); | ||||||
|  |         } | ||||||
|         AdRequest adRequest = new AdRequest.Builder().build(); |         AdRequest adRequest = new AdRequest.Builder().build(); | ||||||
|         getAdView().loadAd(adRequest); |         adView.loadAd(adRequest); | ||||||
|         bannerContainer.removeAllViews(); |         bannerContainer.removeAllViews(); | ||||||
|         bannerContainer.addView( getAdView()); |         bannerContainer.addView( adView); | ||||||
| 
 |  | ||||||
|     }*/ |  | ||||||
| 
 | 
 | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|     protected void onResume() { |     protected void onResume() { | ||||||
|  |  | ||||||
|  | @ -9,6 +9,7 @@ import android.util.Log; | ||||||
| import com.bytedance.sdk.openadsdk.TTAdConfig; | import com.bytedance.sdk.openadsdk.TTAdConfig; | ||||||
| import com.bytedance.sdk.openadsdk.TTAdConstant; | import com.bytedance.sdk.openadsdk.TTAdConstant; | ||||||
| import com.bytedance.sdk.openadsdk.TTAdSdk; | import com.bytedance.sdk.openadsdk.TTAdSdk; | ||||||
|  | import com.google.android.gms.ads.MobileAds; | ||||||
| import com.google.gson.Gson; | import com.google.gson.Gson; | ||||||
| import com.novelbook.android.AD.toutiao.TTAdManagerHolder; | import com.novelbook.android.AD.toutiao.TTAdManagerHolder; | ||||||
| import com.novelbook.android.bean.AdSetting; | import com.novelbook.android.bean.AdSetting; | ||||||
|  | @ -67,10 +68,17 @@ public class MyApp extends Application { | ||||||
|     } |     } | ||||||
|     private void initAD(){ |     private void initAD(){ | ||||||
|         initAD_ChuanShanJia(); |         initAD_ChuanShanJia(); | ||||||
|  |         initAD_AdMob(); | ||||||
|     } |     } | ||||||
|     private void initAD_ChuanShanJia(){ |     private void initAD_ChuanShanJia(){ | ||||||
|         TTAdManagerHolder.init(applicationContext); |         TTAdManagerHolder.init(applicationContext); | ||||||
|     } |     } | ||||||
|  |     private void initAD_AdMob(){ | ||||||
|  |         if(AdSetting.getAppID(Constants.AD_MOB).length()>0){ | ||||||
|  |             MobileAds.initialize(MyApp.applicationContext,     AdSetting.getAppID(Constants.AD_MOB)); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|     public boolean exit() { |     public boolean exit() { | ||||||
|  |  | ||||||
|  | @ -545,8 +545,10 @@ public class ReadActivity extends  Activity_base implements   AdInterface { | ||||||
|         }*/ |         }*/ | ||||||
| 
 | 
 | ||||||
|         hideReadSetting(); |         hideReadSetting(); | ||||||
|         pageFactory.updateTime(); |         if( pageFactory.isReady()) { | ||||||
|         pageFactory.showAd(); |             pageFactory.updateTime(); | ||||||
|  |             pageFactory.showAd(); | ||||||
|  |         } | ||||||
| 
 | 
 | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -16,7 +16,8 @@ public class AdSetting { | ||||||
|     private slot fixBanner = new slot(); |     private slot fixBanner = new slot(); | ||||||
|     private slot bigBanner = new slot(); |     private slot bigBanner = new slot(); | ||||||
|     public boolean isShowAdsense() { |     public boolean isShowAdsense() { | ||||||
|         return showAdsense  && NetUtil.isNetworkConnected(); |        // return true; | ||||||
|  |          return showAdsense  && NetUtil.isNetworkConnected(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public void setShowAdsense(boolean showAdsense) { |     public void setShowAdsense(boolean showAdsense) { | ||||||
|  | @ -90,7 +91,8 @@ public class AdSetting { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public boolean isShow() { |     public boolean isShow() { | ||||||
|         return show && NetUtil.isNetworkConnected(); |       //  return true; | ||||||
|  |        return show && NetUtil.isNetworkConnected(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public void setShow(boolean show) { |     public void setShow(boolean show) { | ||||||
|  | @ -98,8 +100,8 @@ public class AdSetting { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public int getSource() { |     public int getSource() { | ||||||
|          return source; |        return source; | ||||||
|        //  return 1; |        //   return 3 ; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public void setSource(int source) { |     public void setSource(int source) { | ||||||
|  |  | ||||||
|  | @ -111,6 +111,7 @@ public class Novel extends LitePalSupport implements Serializable{ | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public String getChapterName() { |     public String getChapterName() { | ||||||
|  | 
 | ||||||
|         return chapterName; |         return chapterName; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -331,12 +332,17 @@ public void testUpdate(){ | ||||||
|       /*  if(lastUpdateTime > nv.lastVisit && lastUpdateTime > nv.lastUpdateTime){ |       /*  if(lastUpdateTime > nv.lastVisit && lastUpdateTime > nv.lastUpdateTime){ | ||||||
|             isUpdated =true; |             isUpdated =true; | ||||||
|         }*/ |         }*/ | ||||||
|         isUpdated =lastUpdateTime > nv.lastVisit || lastUpdateTime > nv.lastUpdateTime; |         isUpdated = lastUpdateTime > nv.lastVisit && lastUpdateTime > nv.lastUpdateTime; | ||||||
|         Log.d("Novel", String.format("book %s  server lastUpdateTime %s, local lastupdatetime %s, local lastvist %s" + |         Log.d("Novel", String.format("book %s  server lastUpdateTime %s, local lastupdatetime %s, local lastvist %s" + | ||||||
|                         "is updated %s,diff1 %s,diff2 %s" |                         "is updated %s,diff1 %s,diff2 %s   " | ||||||
|                ,name ,lastUpdateTime,nv.lastUpdateTime,nv.lastVisit,isUpdated, |                 ,name ,lastUpdateTime,nv.lastUpdateTime,nv.lastVisit,isUpdated, | ||||||
|                 lastUpdateTime - nv.lastVisit, |                 lastUpdateTime - nv.lastVisit, | ||||||
|                 lastUpdateTime - nv.lastUpdateTime) ); |                 lastUpdateTime - nv.lastUpdateTime | ||||||
|  | 
 | ||||||
|  |         ) ); | ||||||
|  |         isUpdated =  isUpdated && !(!TextUtils.isEmpty(chapterName) && !TextUtils.isEmpty(nv.chapterName) && (chapterName.equals(nv.chapterName) || chapterName.equals(nv.lastReadChapt))); | ||||||
|  | 
 | ||||||
|  |         Log.d("Novel", String.format( " isupdated %s, server lastUpdateTime  ,server chaptername %s,chaptername %s,lastreadchapt %s" ,isUpdated,chapterName,nv.chapterName,nv.lastReadChapt ) ); | ||||||
| 
 | 
 | ||||||
|         if(!isUpdated){ |         if(!isUpdated){ | ||||||
|             setToDefault("isUpdated"); |             setToDefault("isUpdated"); | ||||||
|  |  | ||||||
|  | @ -121,8 +121,23 @@ public class BookUtil { | ||||||
| 
 | 
 | ||||||
|     private Novel mNovel; |     private Novel mNovel; | ||||||
| 
 | 
 | ||||||
|  |     private void clearBook() { | ||||||
|  |         charPosition.clear(); | ||||||
|  |         this.muluRetryCount=0; | ||||||
|  |         this.downloadStatus = DownloadStatus.notStart; | ||||||
|  |         chaptDownStatus.clear(); | ||||||
|  |         chaptCache.clear(); | ||||||
|  |         fileRetryCnt.clear(); | ||||||
|  |         siteRuleRetryCnt=0; | ||||||
|  |         isChangeSource=false; | ||||||
|  |         mChapters.clear(); | ||||||
|  |         myArray.clear(); | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|     public void setNovel(Novel novel) { |     public void setNovel(Novel novel) { | ||||||
|  |         clearBook(); | ||||||
|         this.mNovel = novel; |         this.mNovel = novel; | ||||||
|  | 
 | ||||||
|     } |     } | ||||||
|     public Novel getNovel( ) { |     public Novel getNovel( ) { | ||||||
|        return mNovel  ; |        return mNovel  ; | ||||||
|  | @ -299,6 +314,9 @@ public class BookUtil { | ||||||
| 
 | 
 | ||||||
|     int siteRuleRetryCnt =0; |     int siteRuleRetryCnt =0; | ||||||
|     public void getSiteRule() { |     public void getSiteRule() { | ||||||
|  |         getSiteRule(false); | ||||||
|  |     } | ||||||
|  |     public void getSiteRule(boolean isForceRefresh) { | ||||||
|         mSiteRule = null; |         mSiteRule = null; | ||||||
|         if(mSite==null){ |         if(mSite==null){ | ||||||
|             return; |             return; | ||||||
|  | @ -334,10 +352,11 @@ public class BookUtil { | ||||||
| 
 | 
 | ||||||
|                 Log.d(TAG, String.format("目录正则表达式下载完成,开始读取章节信息") ); |                 Log.d(TAG, String.format("目录正则表达式下载完成,开始读取章节信息") ); | ||||||
| 
 | 
 | ||||||
|  |                 int maxAge = isForceRefresh? 0:mNovel.getMaxAge() ; | ||||||
|                 if(mSiteRule.getChapterUrlRegexOnMulu().length>0) { |                 if(mSiteRule.getChapterUrlRegexOnMulu().length>0) { | ||||||
|                     mMuluStatus = MuluStatus.isDownloading; |                     mMuluStatus = MuluStatus.isDownloading; | ||||||
|                     long startTime= new Date().getTime(); |                     long startTime= new Date().getTime(); | ||||||
|                     Log.d(TAG,String.format("prepare book loadChapts----start download %s,maxAge %s,  目录 from %s",  mNovel.getName() ,mNovel.getMaxAge() ,mSite.getMuluUrl() )); |                     Log.d(TAG,String.format("prepare book loadChapts----start download %s,maxAge %s,  目录 from %s",  mNovel.getName() ,maxAge ,mSite.getMuluUrl() )); | ||||||
|                     new Thread(){ |                     new Thread(){ | ||||||
|                         @Override |                         @Override | ||||||
|                         public void run() { |                         public void run() { | ||||||
|  | @ -348,7 +367,7 @@ public class BookUtil { | ||||||
|                             try { |                             try { | ||||||
|                                 JSONObject siteJson = new JSONObject(result); |                                 JSONObject siteJson = new JSONObject(result); | ||||||
| 
 | 
 | ||||||
|                                 mChapters = NovelParseUtil.getChapters(mSite.getMuluUrl(), siteJson,mSite.getDomain(),mNovel.getMaxAge(),mSiteRule); |                                 mChapters = NovelParseUtil.getChapters(mSite.getMuluUrl(), siteJson,mSite.getDomain(),maxAge,mSiteRule); | ||||||
| 
 | 
 | ||||||
|                                /* if (mChapters != null){ |                                /* if (mChapters != null){ | ||||||
|                                     for (Chapter chapter:mChapters) { |                                     for (Chapter chapter:mChapters) { | ||||||
|  | @ -489,17 +508,7 @@ public class BookUtil { | ||||||
| 
 | 
 | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private void clearBook() { |  | ||||||
|         charPosition.clear(); |  | ||||||
|         this.muluRetryCount=0; |  | ||||||
|         this.downloadStatus = DownloadStatus.notStart; |  | ||||||
|         chaptDownStatus.clear(); |  | ||||||
|         chaptCache.clear(); |  | ||||||
|         fileRetryCnt.clear(); |  | ||||||
|         siteRuleRetryCnt=0; |  | ||||||
|         isChangeSource=false; |  | ||||||
| 
 | 
 | ||||||
|     } |  | ||||||
| 
 | 
 | ||||||
|     public Site getSite() { |     public Site getSite() { | ||||||
|         return mSite !=null? mSite :new Site(); |         return mSite !=null? mSite :new Site(); | ||||||
|  | @ -787,13 +796,17 @@ public class BookUtil { | ||||||
| 
 | 
 | ||||||
| int muluRetryCount =0; | int muluRetryCount =0; | ||||||
| 
 | 
 | ||||||
|     void readChaptersAsync( ) { |     void readChaptersAsync(){ | ||||||
|  |         readChaptersAsync(false); | ||||||
|  |     } | ||||||
|  |     void readChaptersAsync(boolean isForceRefresh  ) { | ||||||
|         if(mSite==null ||mSiteRule ==null){ |         if(mSite==null ||mSiteRule ==null){ | ||||||
|             Log.d(TAG,String.format("prepare book loadChapts failed---- %s ,mSite is null? %s ,mSiteRule ==null ? %s",  mNovel.getName()  ,mSite==null,mSiteRule ==null  )); |             Log.d(TAG,String.format("prepare book loadChapts failed---- %s ,mSite is null? %s ,mSiteRule ==null ? %s",  mNovel.getName()  ,mSite==null,mSiteRule ==null  )); | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         String url = mSite.getMuluUrl(); |         String url = mSite.getMuluUrl(); | ||||||
|         Request request = getTagRequest(url,REUtil.getDomain(url), mNovel.getMaxAge()); |         int maxAge= isForceRefresh ?0 : mNovel.getMaxAge(); | ||||||
|  |         Request request = getTagRequest(url,REUtil.getDomain(url),maxAge); | ||||||
| 
 | 
 | ||||||
|         mMuluStatus = MuluStatus.isDownloading; |         mMuluStatus = MuluStatus.isDownloading; | ||||||
|         long startTime= new Date().getTime(); |         long startTime= new Date().getTime(); | ||||||
|  |  | ||||||
|  | @ -30,6 +30,7 @@ import android.widget.Toast; | ||||||
| 
 | 
 | ||||||
| import com.novelbook.android.MyApp; | import com.novelbook.android.MyApp; | ||||||
| import com.novelbook.android.R; | import com.novelbook.android.R; | ||||||
|  | import com.novelbook.android.bean.AdSetting; | ||||||
| import com.novelbook.android.bean.NovelSites; | import com.novelbook.android.bean.NovelSites; | ||||||
| import com.novelbook.android.bean.Site; | import com.novelbook.android.bean.Site; | ||||||
| import com.novelbook.android.db.Chapter; | import com.novelbook.android.db.Chapter; | ||||||
|  | @ -626,7 +627,7 @@ public class PageFactory implements ChangeSource{ | ||||||
|         if(!TextUtils.isEmpty(domainName)) { |         if(!TextUtils.isEmpty(domainName)) { | ||||||
|             statusChangeSource = "前往 " + domainName.substring(0,domainName.length()>5?5:domainName.length()) + "..."; |             statusChangeSource = "前往 " + domainName.substring(0,domainName.length()>5?5:domainName.length()) + "..."; | ||||||
|         } |         } | ||||||
| 
 |       //  drawChangeSourceStatus(); | ||||||
|         drawStatus(); |         drawStatus(); | ||||||
|         mBookUtil.pagefactory=this; |         mBookUtil.pagefactory=this; | ||||||
|         mBookUtil.changeSource(domain,  chapId,  chapTitle); |         mBookUtil.changeSource(domain,  chapId,  chapTitle); | ||||||
|  | @ -713,7 +714,7 @@ private void hideSysUI(){ | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private PageFactory(Context context) { |     private PageFactory(Context context) { | ||||||
|        // mBookUtil = new BookUtil(); |         mBookUtil = new BookUtil(); | ||||||
|         mContext = context.getApplicationContext(); |         mContext = context.getApplicationContext(); | ||||||
|         config = Config.getInstance(); |         config = Config.getInstance(); | ||||||
|         //获取屏幕宽高 |         //获取屏幕宽高 | ||||||
|  | @ -818,10 +819,15 @@ private void hideSysUI(){ | ||||||
|     } |     } | ||||||
|     private void drawStatus(){ |     private void drawStatus(){ | ||||||
|         if(mBookPageWidget!=null) { |         if(mBookPageWidget!=null) { | ||||||
|            // drawStatus(mBookPageWidget.getCurPage()); |           // drawStatus(mBookPageWidget.getCurPage()); | ||||||
|            drawStatus(mBookPageWidget.getNextPage()); |            drawStatus(mBookPageWidget.getNextPage()); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     public boolean isChangingSource(){ | ||||||
|  |         return mStatus == Status.CHANGESOURCE; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     private String loadingTxt =""; |     private String loadingTxt =""; | ||||||
|     private String statusChangeSource ="正在换源..."; |     private String statusChangeSource ="正在换源..."; | ||||||
|     private boolean showingStatusAd =false; |     private boolean showingStatusAd =false; | ||||||
|  | @ -832,7 +838,7 @@ private void hideSysUI(){ | ||||||
|         mAd.hideProgressbar(); |         mAd.hideProgressbar(); | ||||||
|      //   mAd.showLoading(false); |      //   mAd.showLoading(false); | ||||||
|         String status = ""; |         String status = ""; | ||||||
|         boolean showAd =true; |         boolean showAd =false; | ||||||
|         switch (mStatus){ |         switch (mStatus){ | ||||||
|             case OPENING: |             case OPENING: | ||||||
|                 status =  "正在拼命加载" + loadingTxt; |                 status =  "正在拼命加载" + loadingTxt; | ||||||
|  | @ -909,6 +915,7 @@ private void hideSysUI(){ | ||||||
|         // 下面这行是实现水平居中,drawText对应改为传入targetRect.centerX() |         // 下面这行是实现水平居中,drawText对应改为传入targetRect.centerX() | ||||||
|         waitPaint.setTextAlign(Paint.Align.CENTER); |         waitPaint.setTextAlign(Paint.Align.CENTER); | ||||||
|         c.drawText(status, targetRect.centerX(), baseline, waitPaint); |         c.drawText(status, targetRect.centerX(), baseline, waitPaint); | ||||||
|  |         Log.d(TAG, "changing Source showloading: drawing status :" +status  ); | ||||||
| //        c.drawText("正在打开书本...", mHeight / 2, 0, waitPaint); | //        c.drawText("正在打开书本...", mHeight / 2, 0, waitPaint); | ||||||
|     /*    TextPaint tp = new TextPaint(); |     /*    TextPaint tp = new TextPaint(); | ||||||
|         tp.setColor(getTextColor()); |         tp.setColor(getTextColor()); | ||||||
|  | @ -988,15 +995,15 @@ private void hideSysUI(){ | ||||||
|        // mAd.showRefresh(View.GONE); |        // mAd.showRefresh(View.GONE); | ||||||
| 
 | 
 | ||||||
|         Log.d(TAG, String.format("onDraw: trPage pageno %s,showAd %s",trPage.getPageNo(),showAd)); |         Log.d(TAG, String.format("onDraw: trPage pageno %s,showAd %s",trPage.getPageNo(),showAd)); | ||||||
| 
 |        // Log.d(TAG, "changing Source onDraw showloading: drawing status :"  ); | ||||||
| 
 | 
 | ||||||
|         if(m_lines.size()==0 ){ |         if(m_lines.size()==0 ){ | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|        /* try { |         /* try { | ||||||
|             throw new Exception("who's ad"); |             throw new Exception("who's ad"); | ||||||
|         }catch (Exception e){ |         }catch (Exception e){ | ||||||
|             Log.e(TAG, "onDraw:showTopBanner ",e ); |             Log.e(TAG, "onDraw:changing Source ",e ); | ||||||
|         }*/ |         }*/ | ||||||
|        /* Log.d(TAG, "showloading: ondraw showAd:  " +showAd ); |        /* Log.d(TAG, "showloading: ondraw showAd:  " +showAd ); | ||||||
|         try{ |         try{ | ||||||
|  | @ -1280,7 +1287,7 @@ private void hideSysUI(){ | ||||||
| 
 | 
 | ||||||
|     public void showAd(){ |     public void showAd(){ | ||||||
|         Log.d(TAG, String.format("loadBannerAd showAd: mAdType %s ",mAdType )); |         Log.d(TAG, String.format("loadBannerAd showAd: mAdType %s ",mAdType )); | ||||||
|         if(mStatus == Status.LASTPAGE || mAd==null ||currentPage==null){ |         if(mStatus == Status.LASTPAGE || mAd==null ||currentPage==null || !Constants.AD_SETTING.isShowAdsense()){ | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|        Log.d(TAG, String.format("loadBannerAd showAd: mAdType %s, pageNo %s",mAdType, currentPage.getPageNo())); |        Log.d(TAG, String.format("loadBannerAd showAd: mAdType %s, pageNo %s",mAdType, currentPage.getPageNo())); | ||||||
|  | @ -2127,8 +2134,11 @@ private void hideSysUI(){ | ||||||
| 
 | 
 | ||||||
|     public void clear(){ |     public void clear(){ | ||||||
| //        Log.d(TAG, String .format("prepare Book: clearing book info %s" ,  getNovle().getName())); | //        Log.d(TAG, String .format("prepare Book: clearing book info %s" ,  getNovle().getName())); | ||||||
|         mBookUtil.clear(); |         if(mBookUtil!=null) { | ||||||
|         mBookUtil=null; |             mBookUtil.clear(); | ||||||
|  |           //  mBookUtil=null; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         fileRetryCnt.clear(); |         fileRetryCnt.clear(); | ||||||
|         lastPageTime=0; |         lastPageTime=0; | ||||||
|        if(chaptMap!=null){ |        if(chaptMap!=null){ | ||||||
|  | @ -2143,7 +2153,7 @@ private void hideSysUI(){ | ||||||
|         cancelPage = null; |         cancelPage = null; | ||||||
|         prePage = null; |         prePage = null; | ||||||
|         currentPage = null; |         currentPage = null; | ||||||
|         mAd=null; |       //  mAd=null; | ||||||
|         currentChaptPages =null; |         currentChaptPages =null; | ||||||
|         preChaptPages=null; |         preChaptPages=null; | ||||||
|         nextChaptPages=null; |         nextChaptPages=null; | ||||||
|  | @ -2220,7 +2230,7 @@ private void hideSysUI(){ | ||||||
| 
 | 
 | ||||||
|     public void refreshCate(){ |     public void refreshCate(){ | ||||||
|         mBookUtil.getChapters().clear(); |         mBookUtil.getChapters().clear(); | ||||||
|         mBookUtil.getSiteRule(); |         mBookUtil.getSiteRule(true); | ||||||
|     } |     } | ||||||
|     public long getChapterLen(){ |     public long getChapterLen(){ | ||||||
|         return mBookUtil.getChapterLen(); |         return mBookUtil.getChapterLen(); | ||||||
|  |  | ||||||
|  | @ -0,0 +1,19 @@ | ||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|  |     xmlns:app="http://schemas.android.com/apk/res-auto" | ||||||
|  |     xmlns:tools="http://schemas.android.com/tools" | ||||||
|  |     android:layout_width="match_parent" | ||||||
|  |     android:layout_height="match_parent" | ||||||
|  |     tools:context=".Activity_paihangbang" | ||||||
|  |     android:fitsSystemWindows="true" | ||||||
|  |     android:clipToPadding="true" | ||||||
|  |     android:background="@color/black" | ||||||
|  |     > | ||||||
|  |     <!-- 即toolbar悬浮在statusbar之后 https://blog.csdn.net/zafir6453/article/details/51344241--> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | </android.support.design.widget.CoordinatorLayout > | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @ -8,80 +8,38 @@ | ||||||
|     </facet> |     </facet> | ||||||
|     <facet type="android" name="Android"> |     <facet type="android" name="Android"> | ||||||
|       <configuration> |       <configuration> | ||||||
|         <option name="SELECTED_BUILD_VARIANT" value="aliDebug" /> |         <option name="SELECTED_BUILD_VARIANT" value="debug" /> | ||||||
|         <option name="ASSEMBLE_TASK_NAME" value="assembleAliDebug" /> |         <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" /> | ||||||
|         <option name="COMPILE_JAVA_TASK_NAME" value="compileAliDebugSources" /> |         <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" /> | ||||||
|         <afterSyncTasks> |         <afterSyncTasks> | ||||||
|           <task>generateAliDebugSources</task> |           <task>generateDebugSources</task> | ||||||
|         </afterSyncTasks> |         </afterSyncTasks> | ||||||
|         <option name="ALLOW_USER_CONFIGURATION" value="false" /> |         <option name="ALLOW_USER_CONFIGURATION" value="false" /> | ||||||
|         <option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" /> |         <option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" /> | ||||||
|         <option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" /> |         <option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" /> | ||||||
|         <option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res;file://$MODULE_DIR$/src/ali/res" /> |         <option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" /> | ||||||
|         <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" /> |         <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" /> | ||||||
|       </configuration> |       </configuration> | ||||||
|     </facet> |     </facet> | ||||||
|   </component> |   </component> | ||||||
|   <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8"> |   <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8"> | ||||||
|     <output url="file://$MODULE_DIR$/build/intermediates/javac/aliDebug/compileAliDebugJavaWithJavac/classes" /> |     <output url="file://$MODULE_DIR$/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes" /> | ||||||
|     <output-test url="file://$MODULE_DIR$/build/intermediates/javac/aliDebugUnitTest/compileAliDebugUnitTestJavaWithJavac/classes" /> |     <output-test url="file://$MODULE_DIR$/build/intermediates/javac/debugUnitTest/compileDebugUnitTestJavaWithJavac/classes" /> | ||||||
|     <exclude-output /> |     <exclude-output /> | ||||||
|     <content url="file://$MODULE_DIR$"> |     <content url="file://$MODULE_DIR$"> | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/ali/debug" isTestSource="false" generated="true" /> |       <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" /> | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/aliDebug/compileAliDebugAidl/out" isTestSource="false" generated="true" /> |       <sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debug/compileDebugAidl/out" isTestSource="false" generated="true" /> | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/ali/debug" isTestSource="false" generated="true" /> |       <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" /> | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/aliDebug/compileAliDebugRenderscript/out" isTestSource="false" generated="true" /> |       <sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debug/compileDebugRenderscript/out" isTestSource="false" generated="true" /> | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/ali/debug" type="java-resource" /> |       <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" /> | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/ali/debug" type="java-resource" /> |       <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" /> | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/aliDebug/res" type="java-resource" /> |       <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" /> | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/aliDebug/resources" type="java-resource" /> |       <sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debugAndroidTest/compileDebugAndroidTestAidl/out" isTestSource="true" generated="true" /> | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/aliDebug/assets" type="java-resource" /> |       <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" /> | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/aliDebug/aidl" isTestSource="false" /> |       <sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debugAndroidTest/compileDebugAndroidTestRenderscript/out" isTestSource="true" generated="true" /> | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/aliDebug/java" isTestSource="false" /> |       <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" /> | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/aliDebug/rs" isTestSource="false" /> |       <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" /> | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/aliDebug/shaders" isTestSource="false" /> |       <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/test/debug" isTestSource="true" generated="true" /> | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/ali/debug" isTestSource="true" generated="true" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/aliDebugAndroidTest/compileAliDebugAndroidTestAidl/out" isTestSource="true" generated="true" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/ali/debug" isTestSource="true" generated="true" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/aliDebugAndroidTest/compileAliDebugAndroidTestRenderscript/out" isTestSource="true" generated="true" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/ali/debug" type="java-test-resource" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/ali/debug" type="java-test-resource" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/androidTestAliDebug/res" type="java-test-resource" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/androidTestAliDebug/resources" type="java-test-resource" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/androidTestAliDebug/assets" type="java-test-resource" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/androidTestAliDebug/aidl" isTestSource="true" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/androidTestAliDebug/java" isTestSource="true" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/androidTestAliDebug/rs" isTestSource="true" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/androidTestAliDebug/shaders" isTestSource="true" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/test/ali/debug" isTestSource="true" generated="true" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/testAliDebug/res" type="java-test-resource" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/testAliDebug/resources" type="java-test-resource" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/testAliDebug/assets" type="java-test-resource" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/testAliDebug/aidl" isTestSource="true" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/testAliDebug/java" isTestSource="true" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/testAliDebug/rs" isTestSource="true" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/testAliDebug/shaders" isTestSource="true" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/ali/res" type="java-resource" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/ali/resources" type="java-resource" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/ali/assets" type="java-resource" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/ali/aidl" isTestSource="false" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/ali/java" isTestSource="false" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/ali/rs" isTestSource="false" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/ali/shaders" isTestSource="false" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/androidTestAli/res" type="java-test-resource" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/androidTestAli/resources" type="java-test-resource" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/androidTestAli/assets" type="java-test-resource" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/androidTestAli/aidl" isTestSource="true" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/androidTestAli/java" isTestSource="true" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/androidTestAli/rs" isTestSource="true" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/androidTestAli/shaders" isTestSource="true" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/testAli/res" type="java-test-resource" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/testAli/resources" type="java-test-resource" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/testAli/assets" type="java-test-resource" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/testAli/aidl" isTestSource="true" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/testAli/java" isTestSource="true" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/testAli/rs" isTestSource="true" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/testAli/shaders" isTestSource="true" /> |  | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" /> |       <sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" /> | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" /> |       <sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" /> | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" /> |       <sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" /> | ||||||
|  | @ -129,33 +87,42 @@ | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotation_processor_list" /> |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotation_processor_list" /> | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/apk_list" /> |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/apk_list" /> | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" /> |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" /> | ||||||
|  |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/build-info" /> | ||||||
|  |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" /> | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundle_manifest" /> |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundle_manifest" /> | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/check_manifest_result" /> |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/check_manifest_result" /> | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/compatible_screen_manifest" /> |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/compatible_screen_manifest" /> | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" /> |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" /> | ||||||
|  |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-runtime-classes" /> | ||||||
|  |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-verifier" /> | ||||||
|  |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-apk" /> | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant_app_manifest" /> |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant_app_manifest" /> | ||||||
|  |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant_run_app_info_output_file" /> | ||||||
|  |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant_run_main_apk_resources" /> | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant_run_merged_manifests" /> |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant_run_merged_manifests" /> | ||||||
|  |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant_run_split_apk_resources" /> | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/javac" /> |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/javac" /> | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" /> |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" /> | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/legacy_multidex_aapt_derived_proguard_rules" /> |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/legacy_multidex_aapt_derived_proguard_rules" /> | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/legacy_multidex_main_dex_list" /> |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/legacy_multidex_main_dex_list" /> | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged-not-compiled-resources" /> |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint_jar" /> | ||||||
|  |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifest-checker" /> | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged_assets" /> |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged_assets" /> | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged_manifests" /> |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged_manifests" /> | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/metadata_feature_manifest" /> |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/metadata_feature_manifest" /> | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/prebuild" /> |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/prebuild" /> | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/processed_res" /> |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/processed_res" /> | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/proguard-files" /> |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/reload-dex" /> | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/proguard-rules" /> |  | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" /> |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" /> | ||||||
|  |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/resources" /> | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" /> |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" /> | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/shader_assets" /> |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/shader_assets" /> | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" /> |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" /> | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/signing_config" /> |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/signing_config" /> | ||||||
|  |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/split-apk" /> | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" /> |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" /> | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" /> |       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" /> | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/outputs" /> |       <excludeFolder url="file://$MODULE_DIR$/build/outputs" /> | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/reports" /> |  | ||||||
|       <excludeFolder url="file://$MODULE_DIR$/build/tmp" /> |       <excludeFolder url="file://$MODULE_DIR$/build/tmp" /> | ||||||
|     </content> |     </content> | ||||||
|     <orderEntry type="jdk" jdkName="Android API 28 Platform" jdkType="Android SDK" /> |     <orderEntry type="jdk" jdkName="Android API 28 Platform" jdkType="Android SDK" /> | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue