diff --git a/zhuike/build.gradle b/zhuike/build.gradle
index 9a8cac6..59429c9 100644
--- a/zhuike/build.gradle
+++ b/zhuike/build.gradle
@@ -31,7 +31,7 @@ android {
multiDexEnabled true //突破65535
manifestPlaceholders = [UMENG_CHANNEL_CALUE: "umeng"] //默认为uMeng
- // flavorDimensions "default" //debug时注销
+ // flavorDimensions "default" //debug时注销
}
buildTypes {
debug {
@@ -39,6 +39,9 @@ android {
buildConfigField "boolean", "LOG_DEBUG", "true"
buildConfigField "String", "MAIN_HOST", '"http://xiaoshuofenxiang.com/api/"'
buildConfigField "String", "API_HOST", '"{\\"master\\":[\\"http:\\\\/\\\\/g.xiaoshuofenxiang.com\\"],\\"page\\":[\\"http:\\\\/\\\\/p.xiaoshuofenxiang.com\\"],\\"report\\":[\\"http:\\\\/\\\\/r.xiaoshuofenxiang.com\\"],\\"search\\":[\\"http:\\\\/\\\\/s.xiaoshuofenxiang.com\\"],\\"novel\\":[\\"http:\\\\/\\\\/n.xiaoshuofenxiang.com\\"],\\"novelsbydot\\":[\\"http:\\\\/\\\\/nbd.xiaoshuofenxiang.com\\"],\\"user\\":[\\"http:\\\\/\\\\/u.xiaoshuofenxiang.com\\"]}"'
+ buildConfigField "String","AD_SLOT_TOUTIAO_SPLASH_ID",'"819267134"'
+ buildConfigField "String","AD_SLOT_TOUTIAO_BANNER_ID",'"919267016"'
+ buildConfigField "String","AD_SLOT_TOUTIAO_BANNER_NATIVE_ID",'"919267816"'
// buildConfigField "String", "API_HOST", '""'
versionNameSuffix "-debug"
minifyEnabled false
@@ -56,7 +59,8 @@ android {
// 移除无用的resource文件
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
- /* applicationVariants.all { variant ->
+
+ /* applicationVariants.all { variant ->
variant.outputs.all { output ->
def outFile = output.outputFile
if (outFile != null && outFile.name.endsWith(".apk")) {
@@ -73,6 +77,30 @@ android {
//渠道
/* productFlavors {
// googleplay {}
+ kuan {
+ applicationId "com.novelbook.android"
+ versionName "v-kuan-1.0"
+ buildConfigField "String", "MAIN_HOST", '"http://xiaoshuofenxiang.com/api/"'
+ buildConfigField "String", "API_HOST", '"{\\"master\\":[\\"http:\\\\/\\\\/g.xiaoshuofenxiang.com\\"],\\"page\\":[\\"http:\\\\/\\\\/p.xiaoshuofenxiang.com\\"],\\"report\\":[\\"http:\\\\/\\\\/r.xiaoshuofenxiang.com\\"],\\"search\\":[\\"http:\\\\/\\\\/s.xiaoshuofenxiang.com\\"],\\"novel\\":[\\"http:\\\\/\\\\/n.xiaoshuofenxiang.com\\"],\\"novelsbydot\\":[\\"http:\\\\/\\\\/nbd.xiaoshuofenxiang.com\\"],\\"user\\":[\\"http:\\\\/\\\\/u.xiaoshuofenxiang.com\\"]}"'
+ //buildConfigField "String", "API_HOST", '""'
+ buildConfigField "String", "CHANNEL",'"kuan"'
+ }
+ xiaomi {
+ applicationId "com.novelbook.android"
+ versionName "v-xiaomi-1.0"
+ buildConfigField "String", "MAIN_HOST", '"http://xiaoshuofenxiang.com/api/"'
+ buildConfigField "String", "API_HOST", '"{\\"master\\":[\\"http:\\\\/\\\\/g.xiaoshuofenxiang.com\\"],\\"page\\":[\\"http:\\\\/\\\\/p.xiaoshuofenxiang.com\\"],\\"report\\":[\\"http:\\\\/\\\\/r.xiaoshuofenxiang.com\\"],\\"search\\":[\\"http:\\\\/\\\\/s.xiaoshuofenxiang.com\\"],\\"novel\\":[\\"http:\\\\/\\\\/n.xiaoshuofenxiang.com\\"],\\"novelsbydot\\":[\\"http:\\\\/\\\\/nbd.xiaoshuofenxiang.com\\"],\\"user\\":[\\"http:\\\\/\\\\/u.xiaoshuofenxiang.com\\"]}"'
+ //buildConfigField "String", "API_HOST", '""'
+ buildConfigField "String", "CHANNEL",'"xiaomi"'
+ }
+ qq {
+ applicationId "com.novelbook.android.qq"
+ versionName "v-qq-1.0"
+ buildConfigField "String", "MAIN_HOST", '"http://xiaoshuofenxiang.com/api/"'
+ buildConfigField "String", "API_HOST", '"{\\"master\\":[\\"http:\\\\/\\\\/g.xiaoshuofenxiang.com\\"],\\"page\\":[\\"http:\\\\/\\\\/p.xiaoshuofenxiang.com\\"],\\"report\\":[\\"http:\\\\/\\\\/r.xiaoshuofenxiang.com\\"],\\"search\\":[\\"http:\\\\/\\\\/s.xiaoshuofenxiang.com\\"],\\"novel\\":[\\"http:\\\\/\\\\/n.xiaoshuofenxiang.com\\"],\\"novelsbydot\\":[\\"http:\\\\/\\\\/nbd.xiaoshuofenxiang.com\\"],\\"user\\":[\\"http:\\\\/\\\\/u.xiaoshuofenxiang.com\\"]}"'
+ //buildConfigField "String", "API_HOST", '""'
+
+ }
qxs {
applicationId "com.novelbook.android.qxs"
versionName "v-qxs-5.0"
@@ -176,4 +204,7 @@ dependencies {
implementation 'q.rorbin:VerticalTabLayout:1.2.5'
implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.16'
+
+ implementation(name: 'open_ad_sdk', ext:'aar')
+ implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.6'
}
diff --git a/zhuike/libs/Msc.jar b/zhuike/libs/Msc.jar
deleted file mode 100644
index 36c7dc4..0000000
Binary files a/zhuike/libs/Msc.jar and /dev/null differ
diff --git a/zhuike/libs/galaxy-v2.0.jar b/zhuike/libs/galaxy-v2.0.jar
deleted file mode 100644
index f6c6b06..0000000
Binary files a/zhuike/libs/galaxy-v2.0.jar and /dev/null differ
diff --git a/zhuike/proguard-rules.pro b/zhuike/proguard-rules.pro
index 0b71362..65a2843 100644
--- a/zhuike/proguard-rules.pro
+++ b/zhuike/proguard-rules.pro
@@ -261,17 +261,22 @@
void *(**On*Listener);
}
-# -assumenosideeffects class android.util.Log {
-# public static boolean isLoggable(java.lang.String,int);
-# public static int v(...);
-# public static int i(...);
-# public static int w(...);
-# public static int d(...);
-# public static int e(...);
-# }
+ -assumenosideeffects class android.util.Log {
+ public static boolean isLoggable(java.lang.String,int);
+ public static int v(...);
+ public static int i(...);
+ public static int w(...);
+ public static int d(...);
+ public static int e(...);
+ }
# 嵌入广点通sdk时必须添加
-keep class com.qq.e.** {
public protected *;
}
+#穿山甲广告
+-keep class com.bytedance.sdk.openadsdk.** { *; }
+-keep class com.androidquery.callback.** {*;}
+-keep public interface com.bytedance.sdk.openadsdk.downloadnew.** {*;}
+-keep class com.ss.sys.ces.* {*;}
\ No newline at end of file
diff --git a/zhuike/src/main/AndroidManifest.xml b/zhuike/src/main/AndroidManifest.xml
index 6ab22c4..bebfd2a 100644
--- a/zhuike/src/main/AndroidManifest.xml
+++ b/zhuike/src/main/AndroidManifest.xml
@@ -9,6 +9,9 @@
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
\ No newline at end of file
diff --git a/zhuike/src/main/java/com/novelbook/android/Activity_ChgSource.java b/zhuike/src/main/java/com/novelbook/android/Activity_ChgSource.java
index 4de6cbb..5184a47 100644
--- a/zhuike/src/main/java/com/novelbook/android/Activity_ChgSource.java
+++ b/zhuike/src/main/java/com/novelbook/android/Activity_ChgSource.java
@@ -47,7 +47,7 @@ public class Activity_ChgSource extends Activity_base {
PageFactory pageFactory;
boolean isFromCate;
List mSites;
-
+ SiteAdapter mAdapter;
@Override
public int getLayoutRes() {
return R.layout.activity_chgsource;
@@ -80,9 +80,30 @@ public class Activity_ChgSource extends Activity_base {
@Override
protected void initData() {
+
+ showProgressDialog(false,"正在加载源网站列表");
+ mSites = new ArrayList();
pageFactory =PageFactory.getInstance(getApplicationContext());
- mSites = new ArrayList(Arrays.asList(pageFactory.getNovelSites().getSites()));
- SiteAdapter mAdapter = new SiteAdapter(this, mSites, R.layout.recycle_list_one_item, new OnItemClickListener() {
+ new Thread() {
+ @Override
+ public void run() {
+ super.run();
+ while(pageFactory.getNovelSites()==null){
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ mSites = new ArrayList(Arrays.asList(pageFactory.getNovelSites().getSites()));
+ handler.sendEmptyMessage(1);
+ }}.start();;
+
+
+
+
+
+ mAdapter = new SiteAdapter(this, mSites, R.layout.recycle_list_one_item, new OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
@@ -111,7 +132,7 @@ public class Activity_ChgSource extends Activity_base {
@Override
public void fillData() {
-
+ mAdapter.setData(mSites);
}
interface OnItemClickListener
@@ -229,6 +250,11 @@ public class Activity_ChgSource extends Activity_base {
notifyItemRemoved(position);
}
+ public void setData(List mSites) {
+ mDatas = mSites;
+ notifyDataSetChanged();
+ }
+
public class SiteViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.tvText)
diff --git a/zhuike/src/main/java/com/novelbook/android/Activity_base.java b/zhuike/src/main/java/com/novelbook/android/Activity_base.java
index 7181e61..329004c 100644
--- a/zhuike/src/main/java/com/novelbook/android/Activity_base.java
+++ b/zhuike/src/main/java/com/novelbook/android/Activity_base.java
@@ -14,14 +14,30 @@ import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
+import android.util.Log;
+import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
+import android.view.ViewGroup;
import android.widget.Button;
+import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
+import com.androidquery.callback.AQuery2;
+import com.androidquery.callback.ImageOptions;
+import com.bytedance.sdk.openadsdk.AdSlot;
+import com.bytedance.sdk.openadsdk.TTAdConstant;
+import com.bytedance.sdk.openadsdk.TTAdDislike;
+import com.bytedance.sdk.openadsdk.TTAdNative;
+import com.bytedance.sdk.openadsdk.TTAppDownloadListener;
+import com.bytedance.sdk.openadsdk.TTBannerAd;
+import com.bytedance.sdk.openadsdk.TTImage;
+import com.bytedance.sdk.openadsdk.TTNativeAd;
import com.google.gson.Gson;
+import com.novelbook.android.AD.toutiao.TTAdManagerHolder;
+import com.novelbook.android.AD.toutiao.TToast;
import com.novelbook.android.db.Novel;
import com.novelbook.android.netsubscribe.MovieSubscribe;
import com.novelbook.android.netutils.NetUtil;
@@ -29,6 +45,7 @@ import com.novelbook.android.netutils.OnSuccessAndFaultListener;
import com.novelbook.android.netutils.OnSuccessAndFaultSub;
import com.novelbook.android.upgrade.UpdateManager;
import com.novelbook.android.utils.CommonUtil;
+import com.novelbook.android.utils.Constants;
import com.novelbook.android.utils.ImageUtil;
import com.novelbook.android.utils.MyImageLoader;
import com.novelbook.android.utils.OnItemClickListener;
@@ -42,6 +59,7 @@ import butterknife.BindView;
import butterknife.ButterKnife;
public abstract class Activity_base extends AppCompatActivity {
+ private static String TAG ="Activity_base";
private ProgressDialog mProgressDialog;
private MyApp application;
private Activity_base oContext;
@@ -50,6 +68,9 @@ public abstract class Activity_base extends AppCompatActivity {
@BindView(R.id.toolbar)
Toolbar toolbar;
@Nullable
+ @BindView(R.id.banner_container)
+ FrameLayout mBannerContainer;
+ @Nullable
@BindView(R.id.recycleViewBookList)
RecyclerView rvshudan;
void showBook(String bookName) { //show paihangbang activity
@@ -80,6 +101,8 @@ public abstract class Activity_base extends AppCompatActivity {
ButterKnife.bind(this);
setupToolbar();
// 初始化View注入
+
+ initAD_TouTiao();
setTitle();
initData();
initViews();
@@ -108,7 +131,7 @@ public abstract class Activity_base extends AppCompatActivity {
}
protected void closeCurrentActitivty(){
if( this instanceof BookActivity ) {
- return;
+ // return;
}
finish();
}
@@ -142,6 +165,14 @@ public abstract class Activity_base extends AppCompatActivity {
return mAdapter;
}
void showBookDetail(Novel book) {
+ List acts = application.getActivityList();
+ for(Activity activity :acts){
+ if(activity instanceof BookActivity){
+ activity.finish();
+ break;
+ }
+ }
+
Intent intent = new Intent(this, BookActivity.class);
intent.putExtra(BookActivity.EXTRA_BOOK,book);
@@ -291,6 +322,343 @@ public abstract class Activity_base extends AppCompatActivity {
super.finish();
}
+//------ 头条 ad -----
+ AQuery2 mAQuery;
+ Button mCreativeButton;
+ TTAdNative mTTAdNative;
+ void initAD_TouTiao(){
+ mTTAdNative = TTAdManagerHolder.get().createAdNative(this);
+ //step3:(可选,强烈建议在合适的时机调用):申请部分权限,如read_phone_state,防止获取不了imei时候,下载类广告没有填充的问题。
+ TTAdManagerHolder.get().requestPermissionIfNecessary(this);
+ this.mAQuery = new AQuery2(this);
+ }
+//----toutiao ad ----
+ public void loadBannerAd(FrameLayout bannerContainer, String codeId, int width, int height) {
+ //step4:创建广告请求参数AdSlot,具体参数含义参考文档
+
+
+ /* if(height >390){
+ width =(int)(height*1.78);
+ if(width > Constants.SCREEN_WIDTH_PIX-50 ){
+ width= Constants.SCREEN_WIDTH_PIX-50;
+ height =(int)(width/1.78);
+ }
+ }else if(height >150){
+ width =(int)(height*1.78);
+ }*/
+ // width =990;
+ //height=150;
+ height=height > 500 ? 500: height;
+ Log.d(TAG, String.format("loadBannerAd:finial width %s, height %s ",width,height));
+ AdSlot adSlot = new AdSlot.Builder()
+ .setCodeId(codeId) //广告位id
+ .setSupportDeepLink(true)
+ .setImageAcceptedSize(width, height)
+ .build();
+ //step5:请求广告,对请求回调的广告作渲染处理
+ mTTAdNative.loadBannerAd(adSlot, new TTAdNative.BannerAdListener() {
+
+ @Override
+ public void onError(int code, String message) {
+ // TToast.show(oContext, "load error : " + code + ", " + message);
+ Log.e(TAG, String.format("loadBannerAd:code %s, message %s ", code,message));
+ bannerContainer.removeAllViews();
+ }
+
+ @Override
+ public void onBannerAdLoad(final TTBannerAd ad) {
+ if (ad == null) {
+ return;
+ }
+ View bannerView = ad.getBannerView();
+ if (bannerView == null) {
+ return;
+ }
+ //设置轮播的时间间隔 间隔在30s到120秒之间的值,不设置默认不轮播
+ ad.setSlideIntervalTime(30 * 1000);
+ bannerContainer.removeAllViews();
+ bannerContainer.addView(bannerView);
+ //设置广告互动监听回调
+ ad.setBannerInteractionListener(new TTBannerAd.AdInteractionListener() {
+ @Override
+ public void onAdClicked(View view, int type) {
+ // TToast.show(oContext, "广告被点击");
+ }
+
+ @Override
+ public void onAdShow(View view, int type) {
+ // TToast.show(oContext, "广告展示");
+ }
+ });
+ //(可选)设置下载类广告的下载监听
+ bindDownloadListener(ad);
+ //在banner中显示网盟提供的dislike icon,有助于广告投放精准度提升
+ ad.setShowDislikeIcon(new TTAdDislike.DislikeInteractionCallback() {
+ @Override
+ public void onSelected(int position, String value) {
+ // TToast.show(oContext, "点击 " + value);
+ //用户选择不喜欢原因后,移除广告展示
+ bannerContainer.removeAllViews();
+ }
+
+ @Override
+ public void onCancel() {
+ // TToast.show(oContext, "点击取消 ");
+ }
+ });
+
+ //获取网盟dislike dialog,您可以在您应用中本身自定义的dislike icon 按钮中设置 mTTAdDislike.showDislikeDialog();
+ /*mTTAdDislike = ad.getDislikeDialog(new TTAdDislike.DislikeInteractionCallback() {
+ @Override
+ public void onSelected(int position, String value) {
+ TToast.show(mContext, "点击 " + value);
+ }
+
+ @Override
+ public void onCancel() {
+ TToast.show(mContext, "点击取消 ");
+ }
+ });
+ if (mTTAdDislike != null) {
+ XXX.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mTTAdDislike.showDislikeDialog();
+ }
+ });
+ } */
+
+ }
+ });
+ }
+ private boolean mHasShowDownloadActive = false;
+ private void bindDownloadListener(TTBannerAd ad) {
+ ad.setDownloadListener(new TTAppDownloadListener() {
+ @Override
+ public void onIdle() {
+ // TToast.show(oContext, "点击图片开始下载", Toast.LENGTH_LONG);
+ }
+
+ @Override
+ public void onDownloadActive(long totalBytes, long currBytes, String fileName, String appName) {
+ if (!mHasShowDownloadActive) {
+ mHasShowDownloadActive = true;
+ // TToast.show(oContext, "下载中,点击图片暂停", Toast.LENGTH_LONG);
+ }
+ }
+
+ @Override
+ public void onDownloadPaused(long totalBytes, long currBytes, String fileName, String appName) {
+ // TToast.show(oContext, "下载暂停,点击图片继续", Toast.LENGTH_LONG);
+ }
+
+ @Override
+ public void onDownloadFailed(long totalBytes, long currBytes, String fileName, String appName) {
+ // TToast.show(oContext, "下载失败,点击图片重新下载", Toast.LENGTH_LONG);
+ }
+
+ @Override
+ public void onInstalled(String fileName, String appName) {
+ // TToast.show(oContext, "安装完成,点击图片打开", Toast.LENGTH_LONG);
+ }
+
+ @Override
+ public void onDownloadFinished(long totalBytes, String fileName, String appName) {
+ // TToast.show(oContext, "点击图片安装", Toast.LENGTH_LONG);
+ }
+ });
+ }
+ //-------------native toutiao ad
+ void loadNativeBannerAd(FrameLayout bannerContainer,String codeId) {
+ //step4:创建广告请求参数AdSlot,注意其中的setNativeAdtype方法,具体参数含义参考文档
+ if(bannerContainer==null) return;
+ final AdSlot adSlot = new AdSlot.Builder()
+ .setCodeId(codeId)
+ .setSupportDeepLink(true)
+ .setImageAcceptedSize(690, 388)
+ .setNativeAdType(AdSlot.TYPE_BANNER) //请求原生广告时候,请务必调用该方法,设置参数为TYPE_BANNER或TYPE_INTERACTION_AD
+ .setAdCount(1)
+ .build();
+
+ //step5:请求广告,对请求回调的广告作渲染处理
+ mTTAdNative.loadNativeAd(adSlot, new TTAdNative.NativeAdListener() {
+ @Override
+ public void onError(int code, String message) {
+ // TToast.show(oContext, "load error : " + code + ", " + message);
+ Log.e(TAG, "loadBannerAd: " + code + ", " + message);
+ }
+
+ @Override
+ public void onNativeAdLoad(List ads) {
+ if (ads.get(0) == null) {
+ return;
+ }
+ View bannerView = LayoutInflater.from(oContext).inflate(R.layout.ad_toutiao_native_ad , bannerContainer, false);
+ if (bannerView == null) {
+ return;
+ }
+ if (mCreativeButton != null) {
+ //防止内存泄漏
+ mCreativeButton = null;
+ }
+ bannerContainer.removeAllViews();
+ bannerContainer.addView(bannerView);
+ //绑定原生广告的数据
+ setAdData(bannerContainer,bannerView, ads.get(0));
+ }
+ });
+ }
+
+ @SuppressWarnings("RedundantCast")
+ private void setAdData(FrameLayout bannerContainer,View nativeView, TTNativeAd nativeAd) {
+ ((TextView) nativeView.findViewById(R.id.tv_native_ad_title)).setText(nativeAd.getTitle());
+ ((TextView) nativeView.findViewById(R.id.tv_native_ad_desc)).setText(nativeAd.getDescription());
+ ImageView imgDislike = nativeView.findViewById(R.id.img_native_dislike);
+ bindDislikeAction( bannerContainer,nativeAd, imgDislike);
+ if (nativeAd.getImageList() != null && !nativeAd.getImageList().isEmpty()) {
+ TTImage image = nativeAd.getImageList().get(0);
+ if (image != null && image.isValid()) {
+ mAQuery.id(nativeView.findViewById(R.id.iv_native_image)).image(image.getImageUrl());
+ }
+ }
+ TTImage icon = nativeAd.getIcon();
+ if (icon != null && icon.isValid()) {
+ ImageOptions options = new ImageOptions();
+ mAQuery.id((nativeView.findViewById(R.id.iv_native_icon))).image(icon.getImageUrl(), options);
+ }
+ mCreativeButton = (Button) nativeView.findViewById(R.id.btn_native_creative);
+ //可根据广告类型,为交互区域设置不同提示信息
+ switch (nativeAd.getInteractionType()) {
+ case TTAdConstant.INTERACTION_TYPE_DOWNLOAD:
+ //如果初始化ttAdManager.createAdNative(getApplicationContext())没有传入activity 则需要在此传activity,否则影响使用Dislike逻辑
+ nativeAd.setActivityForDownloadApp(this);
+ mCreativeButton.setVisibility(View.VISIBLE);
+ nativeAd.setDownloadListener(mDownloadListener); // 注册下载监听器
+ break;
+ case TTAdConstant.INTERACTION_TYPE_DIAL:
+ mCreativeButton.setVisibility(View.VISIBLE);
+ mCreativeButton.setText("立即拨打");
+ break;
+ case TTAdConstant.INTERACTION_TYPE_LANDING_PAGE:
+ case TTAdConstant.INTERACTION_TYPE_BROWSER:
+ mCreativeButton.setVisibility(View.VISIBLE);
+ mCreativeButton.setText("查看详情");
+ break;
+ default:
+ mCreativeButton.setVisibility(View.GONE);
+ // TToast.show(oContext, "交互类型异常");
+ }
+
+ //可以被点击的view, 也可以把nativeView放进来意味整个广告区域可被点击
+ List clickViewList = new ArrayList<>();
+ clickViewList.add(nativeView);
+
+ //触发创意广告的view(点击下载或拨打电话)
+ List creativeViewList = new ArrayList<>();
+ //如果需要点击图文区域也能进行下载或者拨打电话动作,请将图文区域的view传入
+ //creativeViewList.add(nativeView);
+ creativeViewList.add(mCreativeButton);
+
+ //重要! 这个涉及到广告计费,必须正确调用。convertView必须使用ViewGroup。
+ nativeAd.registerViewForInteraction((ViewGroup) nativeView, clickViewList, creativeViewList, imgDislike, new TTNativeAd.AdInteractionListener() {
+ @Override
+ public void onAdClicked(View view, TTNativeAd ad) {
+ if (ad != null) {
+ // TToast.show(oContext, "广告" + ad.getTitle() + "被点击");
+ }
+ }
+
+ @Override
+ public void onAdCreativeClick(View view, TTNativeAd ad) {
+ if (ad != null) {
+ // TToast.show(oContext, "广告" + ad.getTitle() + "被创意按钮被点击");
+ }
+ }
+
+ @Override
+ public void onAdShow(TTNativeAd ad) {
+ if (ad != null) {
+ // TToast.show(oContext, "广告" + ad.getTitle() + "展示");
+ }
+ }
+ });
+
+ }
+
+ //接入网盟的dislike 逻辑,有助于提示广告精准投放度
+ private void bindDislikeAction(FrameLayout bannerContainer,TTNativeAd ad, View dislikeView) {
+ final TTAdDislike ttAdDislike = ad.getDislikeDialog(this);
+ if (ttAdDislike != null) {
+ ttAdDislike.setDislikeInteractionCallback(new TTAdDislike.DislikeInteractionCallback() {
+ @Override
+ public void onSelected(int position, String value) {
+ bannerContainer.removeAllViews();
+ }
+
+ @Override
+ public void onCancel() {
+
+ }
+ });
+ }
+ dislikeView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (ttAdDislike != null)
+ ttAdDislike.showDislikeDialog();
+ }
+ });
+ }
+
+ private final TTAppDownloadListener mDownloadListener = new TTAppDownloadListener() {
+ @Override
+ public void onIdle() {
+ if (mCreativeButton != null) {
+ mCreativeButton.setText("开始下载");
+ }
+ }
+
+
+ @Override
+ public void onDownloadActive(long totalBytes, long currBytes, String fileName, String appName) {
+ if (mCreativeButton != null) {
+ if (totalBytes <= 0L) {
+ mCreativeButton.setText("下载中 percent: 0");
+ } else {
+ mCreativeButton.setText("下载中 percent: " + (currBytes * 100 / totalBytes));
+ }
+ }
+ }
+
+
+ @Override
+ public void onDownloadPaused(long totalBytes, long currBytes, String fileName, String appName) {
+ if (mCreativeButton != null) {
+ mCreativeButton.setText("下载暂停 percent: " + (currBytes * 100 / totalBytes));
+ }
+ }
+
+ @Override
+ public void onDownloadFailed(long totalBytes, long currBytes, String fileName, String appName) {
+ if (mCreativeButton != null) {
+ mCreativeButton.setText("重新下载");
+ }
+ }
+
+ @Override
+ public void onInstalled(String fileName, String appName) {
+ if (mCreativeButton != null) {
+ mCreativeButton.setText("点击打开");
+ }
+ }
+
+ @Override
+ public void onDownloadFinished(long totalBytes, String fileName, String appName) {
+ if (mCreativeButton != null) {
+ mCreativeButton.setText("点击安装");
+ }
+ }
+ };
}
diff --git a/zhuike/src/main/java/com/novelbook/android/Activity_cache.java b/zhuike/src/main/java/com/novelbook/android/Activity_cache.java
index e73f9a9..5c6cc98 100644
--- a/zhuike/src/main/java/com/novelbook/android/Activity_cache.java
+++ b/zhuike/src/main/java/com/novelbook/android/Activity_cache.java
@@ -22,6 +22,7 @@ import android.widget.TextView;
import com.novelbook.android.Activity_base;
import com.novelbook.android.R;
+import com.novelbook.android.adapter.BookListAdapter;
import com.novelbook.android.bean.Cataloge;
import com.novelbook.android.db.Chapter;
import com.novelbook.android.db.DownloadTask;
@@ -48,6 +49,7 @@ public class Activity_cache extends Activity_base {
TextView tvMsg;
private List mData;
private CacheAdapter mAdapter;
+ // private String cacheSize;
@Override
public int getLayoutRes() {
return R.layout.activitycache;
@@ -76,6 +78,7 @@ public class Activity_cache extends Activity_base {
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
mData = LitePal.where("id >0").order("id desc").find(DownloadTask.class);//findAll(DownloadTask.class);
+ //cacheSize = FileUtils.getCachedSize();
/* mData.sort(new Comparator(){
public int compare(DownloadTask arg0, DownloadTask arg1) {
int i = arg0.getFinishedChpats()/arg0.getTotalChapts() > arg1.getFinishedChpats()/arg1.getTotalChapts() ?1:-1;
@@ -147,6 +150,11 @@ public class Activity_cache extends Activity_base {
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mRecyclerView.setAdapter(mAdapter );
+ if( mData.size()>0){
+ tvMsg.setText(String.format("共有%s条下载记录",mData.size()));
+ }else{
+ tvMsg.setText("您还没有没有缓存过小说");
+ }
}
private IntentFilter filter;
@@ -164,7 +172,7 @@ public class Activity_cache extends Activity_base {
int progress=0;
int status=0;
- tvMsg.setVisibility(View.GONE);
+ // tvMsg.setVisibility(View.GONE);
if( intent.hasExtra("network")){
String txt = intent.getStringExtra("network");
tvMsg.setText(txt);
@@ -230,7 +238,7 @@ public class Activity_cache extends Activity_base {
unregisterReceiver(receiver);
}
- class CacheAdapter extends RecyclerView.Adapter {
+ class CacheAdapter extends RecyclerView.Adapter {
private final int EMPTY_VIEW = 1;
private final int PROGRESS_VIEW = 2;
private final int IMAGE_VIEW = 3;
@@ -239,6 +247,7 @@ public class Activity_cache extends Activity_base {
private List mDatas = new ArrayList();
private OnItemClickLitener mOnItemClickLitener;
private int listItemID;
+ private String norecord ="还没有下载记录";
public CacheAdapter(Context context, List mDatas, int listItemID, OnItemClickLitener clickLitener) {
this.context = context;
@@ -265,7 +274,12 @@ public class Activity_cache extends Activity_base {
}
@Override
- public CacheAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ if(viewType == EMPTY_VIEW){
+ EmptyViewHolder holder = new EmptyViewHolder (LayoutInflater.from(context).inflate(R.layout.recycle_list_empty_item, parent, false));
+ return holder;
+ }
+
CacheAdapter.MyViewHolder holder = new CacheAdapter.MyViewHolder(LayoutInflater.from(
context).inflate(listItemID, parent,
false));
@@ -283,34 +297,42 @@ public class Activity_cache extends Activity_base {
}
@Override
- public void onBindViewHolder(CacheAdapter.MyViewHolder holder, int position) {
+ public void onBindViewHolder( RecyclerView.ViewHolder hd, int position) {
+
+ if (hd instanceof EmptyViewHolder) {
+ EmptyViewHolder holder = ( EmptyViewHolder)hd;
+ holder.tvEmpty.setVisibility(View.VISIBLE);
+ holder.tvEmpty.setText(norecord);
+ return;
+ }
+ MyViewHolder holder = ( MyViewHolder)hd;
holder.tvTitle.setText(mDatas.get(position).getNovelTitle());
holder.tvSource.setText(mDatas.get(position).getDomainName());
boolean finished = mData.get(position).getFinishedChpats() == mData.get(position).getTotalChapts();
holder.tvSize.setText( FileUtils.getCacheSizeK(mData.get(position).getNovelId()));
if( mData.get(position).getTotalChapts() >0) {
- float progress = mData.get(position).getFinishedChpats() *100/ mData.get(position).getTotalChapts() ;
- holder.tvProgress.setText(String.format("%s/%s",mData.get(position).getFinishedChpats() >mData.get(position).getTotalChapts()?mData.get(position).getTotalChapts():mData.get(position).getFinishedChpats() , mData.get(position).getTotalChapts()));
- holder.barProgress.setProgress((int) progress);
+ float progress = mData.get(position).getFinishedChpats() * 100 / mData.get(position).getTotalChapts();
+ holder.tvProgress.setText(String.format("%s/%s", mData.get(position).getFinishedChpats() > mData.get(position).getTotalChapts() ? mData.get(position).getTotalChapts() : mData.get(position).getFinishedChpats(), mData.get(position).getTotalChapts()));
+ holder.barProgress.setProgress((int) progress);
- holder.tvStatus.setText( mData.get(position).getDownSatus() == DownloadTask.DownStatus.正在下载 ?"正在下载"
- : mData.get(position).getDownSatus() == DownloadTask.DownStatus.暂停下载? "暂停下载" :"休眠中");
+ holder.tvStatus.setText(mData.get(position).getDownSatus() == DownloadTask.DownStatus.正在下载 ? "正在下载"
+ : mData.get(position).getDownSatus() == DownloadTask.DownStatus.暂停下载 ? "暂停下载" : "休眠中");
- holder.tvStatus.setText( mData.get(position).getStatus()==1 || mData.get(position).getFinishedChpats() >=mData.get(position).getTotalChapts()
- ? "下载完成" : holder.tvStatus.getText() );
+ holder.tvStatus.setText(mData.get(position).getStatus() == 1 || mData.get(position).getFinishedChpats() >= mData.get(position).getTotalChapts()
+ ? "下载完成" : holder.tvStatus.getText());
- holder.tvStatus.setText( mData.get(position).getDownSatus() == DownloadTask.DownStatus.排队中?"排队中": holder.tvStatus.getText() );
+ holder.tvStatus.setText(mData.get(position).getDownSatus() == DownloadTask.DownStatus.排队中 ? "排队中" : holder.tvStatus.getText());
- int img = R.mipmap.play;
- img = mData.get(position).getDownSatus() == DownloadTask.DownStatus.正在下载 ? R.mipmap.pause : R.mipmap.play;
+ int img = R.mipmap.play;
+ img = mData.get(position).getDownSatus() == DownloadTask.DownStatus.正在下载 ? R.mipmap.pause : R.mipmap.play;
- holder.imgStart.setImageResource( img);
+ holder.imgStart.setImageResource(img);
holder.imgStart.setEnabled(true);
- if( mData.get(position).getStatus()==1|| mData.get(position).getFinishedChpats() >=mData.get(position).getTotalChapts()) {
- holder.tvStatus.setText( "下载完成");
- holder.imgStart.setEnabled(false);
- holder.imgStart.setImageResource( R.mipmap.pause);
+ if (mData.get(position).getStatus() == 1 || mData.get(position).getFinishedChpats() >= mData.get(position).getTotalChapts()) {
+ holder.tvStatus.setText("下载完成");
+ holder.imgStart.setEnabled(false);
+ holder.imgStart.setImageResource(R.mipmap.pause);
}
@@ -380,7 +402,15 @@ public class Activity_cache extends Activity_base {
mData = data;
notifyDataSetChanged();
}
+ class EmptyViewHolder extends RecyclerView.ViewHolder {
+ @BindView(R.id.tvLoadText)
+ TextView tvEmpty;
+ public EmptyViewHolder(View itemView) {
+ super(itemView);
+ ButterKnife.bind(this, itemView);
+ }
+ }
class MyViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.tvTitle)
TextView tvTitle;
diff --git a/zhuike/src/main/java/com/novelbook/android/BookActivity.java b/zhuike/src/main/java/com/novelbook/android/BookActivity.java
index ad9e417..736f8a6 100644
--- a/zhuike/src/main/java/com/novelbook/android/BookActivity.java
+++ b/zhuike/src/main/java/com/novelbook/android/BookActivity.java
@@ -21,6 +21,7 @@ import android.util.Log;
import android.view.Gravity;
import android.view.MenuItem;
import android.view.View;
+import android.view.Window;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
@@ -159,6 +160,7 @@ public class BookActivity extends Activity_base {
tvTonglei.setVisibility(View.GONE);
tvAuthorMore.setText( "");
initiDownloadReceiver();
+ loadNativeBannerAd(mBannerContainer,BuildConfig.AD_SLOT_TOUTIAO_BANNER_NATIVE_ID);
}
@Override
@@ -183,7 +185,7 @@ public class BookActivity extends Activity_base {
public final static String EXTRA_BOOK ="book";
@Override
protected void setTitle() {
-
+ // getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.book_activity_custom_title);
}
@@ -212,6 +214,10 @@ public class BookActivity extends Activity_base {
novelId = mNovel.getNovelId();
this.setTitle(mNovel.getName());
btnCach.setText(R.string.cache_novel);
+ // ((TextView) findViewById(R.id.left_text)).setText(mNovel.getName());
+ if(toolbar!=null) {
+ toolbar.setTitle(mNovel.getName());
+ }
}
@Override
protected void onNewIntent(Intent intent) {
@@ -582,7 +588,7 @@ public class BookActivity extends Activity_base {
@Override
public void onFault(String errorMsg) {
//失败
- Toast.makeText(BookActivity.this, "Novel 请求失败:" + errorMsg, Toast.LENGTH_SHORT).show();
+ Toast.makeText(BookActivity.this, mNovel.getName() +" 加载失败", Toast.LENGTH_SHORT).show();
mNovel = Novel.getNovelBySvrId(novelId);
if (null != mNovel) {
handler.sendEmptyMessage(1);
diff --git a/zhuike/src/main/java/com/novelbook/android/Fragments/BasicFragment.java b/zhuike/src/main/java/com/novelbook/android/Fragments/BasicFragment.java
index ddc8400..6fd67a4 100644
--- a/zhuike/src/main/java/com/novelbook/android/Fragments/BasicFragment.java
+++ b/zhuike/src/main/java/com/novelbook/android/Fragments/BasicFragment.java
@@ -25,21 +25,30 @@ import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
+import com.bytedance.sdk.openadsdk.AdSlot;
+import com.bytedance.sdk.openadsdk.TTAdDislike;
+import com.bytedance.sdk.openadsdk.TTAdNative;
+import com.bytedance.sdk.openadsdk.TTAppDownloadListener;
+import com.bytedance.sdk.openadsdk.TTBannerAd;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
+import com.novelbook.android.AD.toutiao.TToast;
import com.novelbook.android.Activity_base;
import com.novelbook.android.Activity_paihangbang;
import com.novelbook.android.Activity_shudan;
import com.novelbook.android.BookActivity;
+import com.novelbook.android.BuildConfig;
+import com.novelbook.android.Main2Activity;
import com.novelbook.android.R;
import com.novelbook.android.ReadActivity;
import com.novelbook.android.adapter.BookListAdapter;
@@ -75,7 +84,7 @@ import butterknife.ButterKnife;
*/
public abstract class BasicFragment extends Fragment {
- public static String TAG = BasicFragment.class.getSimpleName();
+ private static String TAG = BasicFragment.class.getSimpleName();
protected View rootView;
protected int pageNo=1;
protected int pageCount;
@@ -91,9 +100,14 @@ public abstract class BasicFragment extends Fragment {
@Nullable
@BindView(R.id.swipeLayout)
SwipeRefreshLayout mSwipeRefresh;
-
+ @Nullable
+ @BindView(R.id.banner_container)
+ FrameLayout mBannerContainer;
int MSG_INIT_TAB =99;
+ int error_try=0;
+ int error_try_max=5;
+
public BasicFragment() {
// Required empty public constructor
}
@@ -126,6 +140,7 @@ public abstract class BasicFragment extends Fragment {
initData();
initViews();
initSwipeRefreshLayout();
+ showBanner(mBannerContainer,185);
return view;
// Inflate the layout for this fragment
@@ -295,6 +310,7 @@ void initTabs(){
// 开始刷新,设置当前为刷新状态
//swipeRefreshLayout.setRefreshing(true);
pageNo=1;
+ error_try=0;
initData();
// TODO 获取数据
@@ -409,12 +425,41 @@ void initTabs(){
@Override
public void onResume() {
super.onResume();
- MobclickAgent.onPageStart(TAG);
+ error_try=0;
+ // MobclickAgent.onPageStart(TAG);
}
@Override
public void onPause(){
super.onPause();
hideProgress();
- MobclickAgent.onPageEnd(TAG);
+ // MobclickAgent.onPageEnd(TAG);
}
+
+ void retryErorr(int msg){
+ if(error_try mDatas;
+ RecyclerView mRecyclerView;
+ // private List mDatas;
private BookListAdapter mAdapter;
List lstUpdate = new ArrayList();
private List bookLists;
- // private ShelfAdapter adapter;
- private String noveIds ;
+ // private ShelfAdapter adapter;
+ private String noveIds;
BottomSheetDialog bottomSheetDialog;
+
+ @BindView(R.id.banner_container)
+ FrameLayout mBannerContainer;
+
public Fragment_Shelf() {
// Required empty public constructor
}
@@ -92,47 +101,47 @@ public class Fragment_Shelf extends BasicFragment {
return fragment;
}
- private void loadNovelsOnShelf(){
+ private void loadNovelsOnShelf() {
bookLists = Novel.getNovelsOnShelf();
- noveIds="";
- for(Novel novel:bookLists){
- if(novel.isFinished()||novel.isLocalBook() ||novel.isUpdated() ){
+ noveIds = "";
+ for (Novel novel : bookLists) {
+ if (novel.isFinished() || novel.isLocalBook() || novel.isUpdated()) {
continue;
}
- noveIds+=novel.getNovelId()+",";
+ noveIds += novel.getNovelId() + ",";
}
}
-void test(int maxAge){
+
+ void test(int maxAge) {
String url = "http://xiaoshuofenxiang.com/api/r/need-update";
- Request request = new Request.Builder().url(url) // .header("User-Agent", "OkHttp Example")
- .removeHeader("Pragma")
- .header("Cache-Control", "public, max-age=" + maxAge)
- .build();
+ Request request = new Request.Builder().url(url) // .header("User-Agent", "OkHttp Example")
+ .removeHeader("Pragma")
+ .header("Cache-Control", "public, max-age=" + maxAge)
+ .build();
+
+ if (maxAge == -1) {
+ request = new Request.Builder().url(url).build();
+ }
+
+
+ HttpMethods.getOkClient().newCall(request).enqueue(new Callback() {
+ @Override
+ public void onFailure(Call call, IOException e) {
+
+ }
+
+ @Override
+ public void onResponse(Call call, Response response) throws IOException {
+ ResponseBody body = response.body();
+ Log.d(TAG, "onResponse:test " + body.string());
+ handler.sendEmptyMessage(1);
+ }
+ });
+
- if(maxAge==-1){
- request = new Request.Builder().url(url) .build();
}
-
-
- HttpMethods.getOkClient().newCall(request).enqueue(new Callback() {
- @Override
- public void onFailure(Call call, IOException e) {
-
- }
-
- @Override
- public void onResponse(Call call, Response response) throws IOException {
- ResponseBody body = response.body();
- Log.d(TAG, "onResponse:test " + body.string());
- handler.sendEmptyMessage(1);
- }
- });
-
-
-}
-
@Override
protected int getLayoutRes() {
return R.layout.fragment_fragment__shelf;
@@ -141,19 +150,19 @@ void test(int maxAge){
/**
* to get updated info from server,TODO: put it in service ,scheduled
*/
- private void getUpdatedData(){
+ private void getUpdatedData() {
List novelIds;
- OnSuccessAndFaultListener successAndFaultListener = new OnSuccessAndFaultListener() {
+ OnSuccessAndFaultListener successAndFaultListener = new OnSuccessAndFaultListener() {
@Override
public void onSuccess(String result) {
// mFirstPage= gson.fromJson(result, FirstPage.class);
try {
- lstUpdate = GsonUtil. parserJsonArray(result, Constants.BLOCK_TITLE_NOVELS);
- if(lstUpdate.size()>0) {
+ lstUpdate = GsonUtil.parserJsonArray(result, Constants.BLOCK_TITLE_NOVELS);
+ if (lstUpdate.size() > 0) {
for (Novel novel2 : lstUpdate) {
novel2.checkAndUpdate();
}
@@ -181,12 +190,12 @@ void test(int maxAge){
};
- if(TextUtils.isEmpty(noveIds)){
+ if (TextUtils.isEmpty(noveIds)) {
loadNovelsOnShelf();
}
- if(!TextUtils.isEmpty(noveIds)){
- BookSubscribe.getNovelsByIds(noveIds , new OnSuccessAndFaultSub(successAndFaultListener, getActivity()));
- }else{
+ if (!TextUtils.isEmpty(noveIds)) {
+ BookSubscribe.getNovelsByIds(noveIds, new OnSuccessAndFaultSub(successAndFaultListener, getActivity()));
+ } else {
handler.sendEmptyMessage(1);
}
@@ -196,11 +205,11 @@ void test(int maxAge){
public void initData() {
- // mDatas = initData(mDatas,'X');
+ // mDatas = initData(mDatas,'X');
- // bookLists = LitePal.where("isOnShelf=? or novelId=? ","1","").find(Novel.class);
+ // bookLists = LitePal.where("isOnShelf=? or novelId=? ","1","").find(Novel.class);
loadNovelsOnShelf();
- // getUpdatedData();
+ // getUpdatedData();
flag = new boolean[bookLists.size()];
/* if(bookLists.size()>0) { //TODO: to remove
@@ -208,10 +217,9 @@ void test(int maxAge){
// bookLists.get(bookLists.size()-1).setUpdated(true);
}*/
- mAdapter = new BookListAdapter(activity,bookLists,R.layout.recycle_list_item,new OnItemClickListener()
- {
- private long lastTimeMillis;
- private static final long MIN_CLICK_INTERVAL =1000;
+ mAdapter = new BookListAdapter(activity, bookLists, R.layout.recycle_list_item, new OnItemClickListener() {
+ private long lastTimeMillis;
+ private static final long MIN_CLICK_INTERVAL = 1000;
protected boolean isTimeEnabled() {
long currentTimeMillis = System.currentTimeMillis();
@@ -223,26 +231,24 @@ void test(int maxAge){
}
@Override
- public void onItemClick(View view, int position)
- {
- if(isTimeEnabled()) {
+ public void onItemClick(View view, int position) {
+ if (isTimeEnabled()) {
Novel book = bookLists.get(position);
openBook(book, mAdapter);
- }else{
+ } else {
Log.d(TAG, "onclickInterval: bad click");
}
}
@Override
- public void onItemLongClick(View view, int position)
- {
+ public void onItemLongClick(View view, int position) {
initDialog(position);
// mAdapter.removeData(position);
}
@Override
- public void onLinearOutClick(View view, int position ,int llId) {
+ public void onLinearOutClick(View view, int position, int llId) {
}
});
@@ -250,80 +256,84 @@ void test(int maxAge){
mAdapter.setNorecord(R.string.noRecordInshelf);
- ((Main2Activity) activity).setShelfFragment(this);
+ ((Main2Activity) activity).setShelfFragment(this);
}
+
@Override
- void initSwipeRefreshLayout(){
- super.initSwipeRefreshLayout();
+ void initSwipeRefreshLayout() {
+ super.initSwipeRefreshLayout();
mSwipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
// 开始刷新,设置当前为刷新状态
//swipeRefreshLayout.setRefreshing(true);
- pageNo=1;
+ pageNo = 1;
getUpdatedData();
// TODO 获取数据
}
});
}
+
@Override
- public void initViews(){
+ public void initViews() {
initReceyleView();
- }
- protected void processArguments(){
- if (getArguments() != null) {
- Bundle bundle = getArguments() ;
+ }
+
+ protected void processArguments() {
+ if (getArguments() != null) {
+ Bundle bundle = getArguments();
}
}
+
@Override
- protected void fillData() {
+ protected void fillData() {
mAdapter.setData(bookLists);
}
- public void initReceyleView() {
- // initData();
- // mRecyclerView.setLayoutManager(new LinearLayoutManager(this.activity));
- mRecyclerView.setLayoutManager(new GridLayoutManager(activity,3));
- mRecyclerView.setAdapter(mAdapter );
- llShelfBottom.setVisibility(View.GONE);
+ public void initReceyleView() {
+ // initData();
+ // mRecyclerView.setLayoutManager(new LinearLayoutManager(this.activity));
+ mRecyclerView.setLayoutManager(new GridLayoutManager(activity, 3));
+ mRecyclerView.setAdapter(mAdapter);
+ llShelfBottom.setVisibility(View.GONE);
- }
+ }
public void showShelfMoreSheet() {
- BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(this.activity );
+ BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(this.activity);
bottomSheetDialog.setContentView(R.layout.fragment_shelf_more_sheet);
//给布局设置透明背景色
bottomSheetDialog.getDelegate().findViewById(android.support.design.R.id.design_bottom_sheet)
.setBackgroundColor(getResources().getColor(android.R.color.transparent));
Button btnZhengli = bottomSheetDialog.findViewById(R.id.btnZhengli);
- btnZhengli.setOnClickListener(new View.OnClickListener() {
+ btnZhengli.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
bottomSheetDialog.dismiss();
- initZhengliDialog();
+ initZhengliDialog();
}
});
- Button btnImport = bottomSheetDialog.findViewById(R.id.btnImport);
- btnImport.setOnClickListener(new View.OnClickListener() {
+ Button btnImport = bottomSheetDialog.findViewById(R.id.btnImport);
+ btnImport.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
bottomSheetDialog.dismiss();
Intent intent = new Intent(activity, FileChooserActivity.class);
startActivityForResult(intent, Activity.RESULT_FIRST_USER);
- // startActivity(intent);
+ // startActivity(intent);
}
});
Button btnCancel = bottomSheetDialog.findViewById(R.id.btnCancel);
- btnCancel.setOnClickListener(new View.OnClickListener() {
+ btnCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
bottomSheetDialog.dismiss();
@@ -331,13 +341,13 @@ void test(int maxAge){
});
-
bottomSheetDialog.show();
}
+
@Override
- public void onActivityResult(int requestCode, int resultCode, Intent data){
- // bookLists = LitePal.findAll(Novel.class);
- // mAdapter.notifyDataSetChanged();
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ // bookLists = LitePal.findAll(Novel.class);
+ // mAdapter.notifyDataSetChanged();
initViews();
}
@@ -359,84 +369,80 @@ void test(int maxAge){
TextView tvLatest = (TextView) bottomSheetDialog.findViewById(R.id.txtLatestUpdate);
tvLatestChapt.setText(bookLists.get(position).getChapterName());
- tvLatest.setText(CommonUtil.getDateString( bookLists.get(position).getLastUpdateTime()) );
- }else{
+ tvLatest.setText(CommonUtil.getDateString(bookLists.get(position).getLastUpdateTime()));
+ } else {
tvLatestChapt.setText("本地导入");
tvAuthor.setText("");
}
ImageView imageView = (ImageView) bottomSheetDialog.findViewById(R.id.imageG1);
- ImageUtil.loadImage(activity,bookLists.get(position).getCover(),imageView);
+ ImageUtil.loadImage(activity, bookLists.get(position).getCover(), imageView);
- LinearLayout lldetail=(LinearLayout) bottomSheetDialog.findViewById(R.id.llBookdetail);
- if(!bookLists.get(position).isLocalBook())
- lldetail.setOnClickListener(new View.OnClickListener() {
- public void onClick(View v) {
- showBookDetail(bookLists.get(position));
- }
- });
- TextView tvCache =(TextView) bottomSheetDialog.findViewById(R.id.tvCache);
+ LinearLayout lldetail = (LinearLayout) bottomSheetDialog.findViewById(R.id.llBookdetail);
+ if (!bookLists.get(position).isLocalBook())
+ lldetail.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+ showBookDetail(bookLists.get(position));
+ }
+ });
+ TextView tvCache = (TextView) bottomSheetDialog.findViewById(R.id.tvCache);
- tvCache.setText(FileUtils.getCacheSizeK(bookLists.get(position).getId()));
+ tvCache.setText(FileUtils.getCacheSizeK(bookLists.get(position).getId()));
- if(!bookLists.get(position).isLocalBook()) {
- LinearLayout llClearCache = (LinearLayout) bottomSheetDialog.findViewById(R.id.llClearCache);
+ if (!bookLists.get(position).isLocalBook()) {
+ LinearLayout llClearCache = (LinearLayout) bottomSheetDialog.findViewById(R.id.llClearCache);
- llClearCache.setOnClickListener(new View.OnClickListener() {
- public void onClick(View v) {
- FileUtils.clearChapterCache(bookLists.get(position).getId());
- long size = FileUtils.getCacheSize(bookLists.get(position).getId());
- size = size / 1024;
- tvCache.setText(String.format("%sK", size));
- Toast.makeText(activity, "缓存清除成功", Toast.LENGTH_SHORT);
+ llClearCache.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+ FileUtils.clearChapterCache(bookLists.get(position).getId());
+ long size = FileUtils.getCacheSize(bookLists.get(position).getId());
+ size = size / 1024;
+ tvCache.setText(String.format("%sK", size));
+ Toast.makeText(activity, "缓存清除成功", Toast.LENGTH_SHORT);
- }
- });
- }else{
- TextView tvClearCache = (TextView) bottomSheetDialog.findViewById(R.id.tvClearCache);
- tvClearCache.setText("导入文本");
- }
+ }
+ });
+ } else {
+ TextView tvClearCache = (TextView) bottomSheetDialog.findViewById(R.id.tvClearCache);
+ tvClearCache.setText("导入文本");
+ }
- LinearLayout lltop =(LinearLayout) bottomSheetDialog.findViewById(R.id.llTop);
- TextView tvTop =(TextView) bottomSheetDialog.findViewById(R.id.tvTop);
- ImageView imgTop =(ImageView) bottomSheetDialog.findViewById(R.id.imageTop);
- if( bookLists.get(position).isTop()){
+ LinearLayout lltop = (LinearLayout) bottomSheetDialog.findViewById(R.id.llTop);
+ TextView tvTop = (TextView) bottomSheetDialog.findViewById(R.id.tvTop);
+ ImageView imgTop = (ImageView) bottomSheetDialog.findViewById(R.id.imageTop);
+ if (bookLists.get(position).isTop()) {
tvTop.setText("取消置顶");
imgTop.setImageResource(R.mipmap.star_inactive);
- }else{
+ } else {
tvTop.setText("置顶显示");
imgTop.setImageResource(R.mipmap.star_active);
}
lltop.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
- if( bookLists.get(position).isTop()){
- bookLists.get(position).setToDefault("isTop");
- tvTop.setText("置顶显示");
- imgTop.setImageResource(R.mipmap.star_active);
+ if (bookLists.get(position).isTop()) {
+ bookLists.get(position).setToDefault("isTop");
+ tvTop.setText("置顶显示");
+ imgTop.setImageResource(R.mipmap.star_active);
- }else{
- bookLists.get(position).setTop(true);
- tvTop.setText("取消置顶");
- imgTop.setImageResource(R.mipmap.star_inactive);
- }
+ } else {
+ bookLists.get(position).setTop(true);
+ tvTop.setText("取消置顶");
+ imgTop.setImageResource(R.mipmap.star_inactive);
+ }
- bookLists.get(position).update( bookLists.get(position).getId());
+ bookLists.get(position).update(bookLists.get(position).getId());
loadNovelsOnShelf();
mAdapter.setData(bookLists);
- //Toast.makeText(activity,"缓存清除成功",Toast.LENGTH_SHORT);
+ //Toast.makeText(activity,"缓存清除成功",Toast.LENGTH_SHORT);
}
});
-
-
-
-
bottomSheetDialog.show();
}
@@ -445,35 +451,33 @@ void test(int maxAge){
@BindView(R.id.btnSelect)
Button btnSelectAll;
- @OnClick({R.id.btnSelect,R.id.btnDelete})
- void shelfZhengliSubmit(View view){
- if(view.getId()== R.id.btnSelect) {
+ @OnClick({R.id.btnSelect, R.id.btnDelete})
+ void shelfZhengliSubmit(View view) {
+ if (view.getId() == R.id.btnSelect) {
- if(isSelectAll) {
+ if (isSelectAll) {
btnSelectAll.setText("全不选");
- }else
- {
+ } else {
btnSelectAll.setText("全选");
}
- for (int i = 0; i < flag.length; i++) {
+ for (int i = 0; i < flag.length; i++) {
flag[i] = isSelectAll;
}
- isSelectAll =!isSelectAll;
+ isSelectAll = !isSelectAll;
mChkAdapter.notifyDataSetChanged();
- }else if(view.getId()== R.id.btnDelete){
+ } else if (view.getId() == R.id.btnDelete) {
List toRemove = new ArrayList();
for (int i = 0; i < bookLists.size(); i++) {
- if(flag[i] ){
- Novel nv = bookLists.get(i);
- if(nv.isLocalBook())
- {
+ if (flag[i]) {
+ Novel nv = bookLists.get(i);
+ if (nv.isLocalBook()) {
nv.delete();
- LitePal.deleteAllAsync(Chapter.class,"novelId=?",nv.getId()+"");
+ LitePal.deleteAllAsync(Chapter.class, "novelId=?", nv.getId() + "");
//TODO: remove cache on a new thread
- FileUtils.clearChapterCache(nv.getId());
- }else{
+ FileUtils.clearChapterCache(nv.getId());
+ } else {
Log.d(TAG, "shelfZhengliSubmit: to delete novel " + nv.getName());
nv.setToDefault("isOnShelf");
nv.setToDefault("isTop");
@@ -482,8 +486,8 @@ void test(int maxAge){
// nv.update(nv.getId()); //not work,,,If you set a default value to a field, the corresponding column won't be updated.
}
- // flag = new boolean[bookLists.size()];
- // bookLists.remove(i);
+ // flag = new boolean[bookLists.size()];
+ // bookLists.remove(i);
}
}
@@ -494,60 +498,47 @@ void test(int maxAge){
}
}
*/
- bookLists =Novel.getNovelsOnShelf();
+ bookLists = Novel.getNovelsOnShelf();
flag = new boolean[bookLists.size()];
zhengliShelf();
initData();
- // mChkAdapter.notifyDataSetChanged();
+ // mChkAdapter.notifyDataSetChanged();
}
}
- private void initZhengliDialog( ) {
+ private void initZhengliDialog() {
zhengliShelf();
llShelfBottom.setVisibility(View.VISIBLE);
- Main2Activity main2Activity = (Main2Activity)activity;
+ Main2Activity main2Activity = (Main2Activity) activity;
main2Activity.switchShelfZhengli(false);
}
- @Override
- public void onResume() {
- super.onResume();
- getUpdatedData(); //TODO: 更新书的状态,是不有更新
- if(bottomSheetDialog!=null){
- bottomSheetDialog.hide();
- }
- }
+ CheckAdapter mChkAdapter;
-
-
- CheckAdapter mChkAdapter;
- void zhengliShelf(){
- mChkAdapter = new CheckAdapter(activity,bookLists,R.layout.recycle_list_item,new OnItemClickListener()
- {
+ void zhengliShelf() {
+ mChkAdapter = new CheckAdapter(activity, bookLists, R.layout.recycle_list_item, new OnItemClickListener() {
@Override
- public void onItemClick(View view, int position)
- {
+ public void onItemClick(View view, int position) {
}
@Override
- public void onItemLongClick(View view, int position)
- {
+ public void onItemLongClick(View view, int position) {
}
@Override
- public void onLinearOutClick(View view, int position ,int llId) {
+ public void onLinearOutClick(View view, int position, int llId) {
}
});
- mRecyclerView.setLayoutManager(new GridLayoutManager(activity,3));
- mRecyclerView.setAdapter(mChkAdapter );
+ mRecyclerView.setLayoutManager(new GridLayoutManager(activity, 3));
+ mRecyclerView.setAdapter(mChkAdapter);
}
@@ -563,12 +554,14 @@ void test(int maxAge){
private List mDatas = new ArrayList();
private OnItemClickListener mOnItemClickListener;
private int listItemID;
- public CheckAdapter(Context context,List mDatas,int listItemID,OnItemClickListener clickLitener) {
+
+ public CheckAdapter(Context context, List mDatas, int listItemID, OnItemClickListener clickLitener) {
this.context = context;
this.mDatas = mDatas;
this.mOnItemClickListener = clickLitener;
this.listItemID = listItemID;
}
+
public CheckAdapter(Context context, OnItemClickListener clickLitener) {
this.context = context;
this.mOnItemClickListener = clickLitener;
@@ -577,9 +570,9 @@ void test(int maxAge){
@Override
public int getItemViewType(int position) {
- if(mDatas.size() == 0){
+ if (mDatas.size() == 0) {
return EMPTY_VIEW;
- } else if(mDatas.get(position) == null){
+ } else if (mDatas.get(position) == null) {
return PROGRESS_VIEW;
} else {
return super.getItemViewType(position);
@@ -587,8 +580,7 @@ void test(int maxAge){
}
@Override
- public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
- {
+ public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
context).inflate(listItemID, parent,
false));
@@ -596,60 +588,51 @@ void test(int maxAge){
}
-
- public void setParameters(List mDatas,int listItemID ) {
+ public void setParameters(List mDatas, int listItemID) {
this.mDatas = mDatas;
this.listItemID = listItemID;
}
- public void setOnItemClickLitener(OnItemClickListener mOnItemClickLitener)
- {
+ public void setOnItemClickLitener(OnItemClickListener mOnItemClickLitener) {
this.mOnItemClickListener = mOnItemClickLitener;
}
@Override
- public void onBindViewHolder(MyViewHolder holder, int position)
- {
+ public void onBindViewHolder(MyViewHolder holder, int position) {
holder.tvTitle.setText(mDatas.get(position).getName());
- if(holder.tvAuthor!=null) holder.tvAuthor.setText(mDatas.get(position).getAuthor());
- if(holder.tvCate!=null) holder.tvCate.setText(mDatas.get(position).getNovelType());
- if(holder.tvDesc!=null) holder.tvDesc.setText(mDatas.get(position).getDesc ());
- if(holder.checkBox!=null) holder.checkBox.setVisibility(View.VISIBLE);
+ if (holder.tvAuthor != null) holder.tvAuthor.setText(mDatas.get(position).getAuthor());
+ if (holder.tvCate != null) holder.tvCate.setText(mDatas.get(position).getNovelType());
+ if (holder.tvDesc != null) holder.tvDesc.setText(mDatas.get(position).getDesc());
+ if (holder.checkBox != null) holder.checkBox.setVisibility(View.VISIBLE);
if (holder.imageView != null && !TextUtils.isEmpty(mDatas.get(position).getCover())) {
- loader.displayImage(context, NetUtil.getCoverUrl(mDatas.get(position).getCover()) ,holder.imageView);
+ loader.displayImage(context, NetUtil.getCoverUrl(mDatas.get(position).getCover()), holder.imageView);
}
- if( mDatas.get(position).isTop()){
+ if (mDatas.get(position).isTop()) {
holder.imageTop.setVisibility(View.VISIBLE);
- }else{
+ } else {
holder.imageTop.setVisibility(View.GONE);
}
// 如果设置了回调,则设置点击事件
- if (mOnItemClickListener != null)
- {
+ if (mOnItemClickListener != null) {
holder.checkBox.setOnCheckedChangeListener(null);//先设置一次CheckBox的选中监听器,传入参数null
holder.checkBox.setChecked(flag[position]);//用数组中的值设置CheckBox的选中状态
- holder.itemView.setOnClickListener(new View.OnClickListener()
- {
+ holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
- public void onClick(View v)
- {
- holder.checkBox.setChecked( !holder.checkBox.isChecked());
+ public void onClick(View v) {
+ holder.checkBox.setChecked(!holder.checkBox.isChecked());
}
});
- holder.itemView.setOnLongClickListener(new View.OnLongClickListener()
- {
+ holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
- public boolean onLongClick(View v)
- {
+ public boolean onLongClick(View v) {
return false;
}
});
-
//再设置一次CheckBox的选中监听器,当CheckBox的选中状态发生改变时,把改变后的状态储存在数组中
holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
@@ -662,12 +645,12 @@ void test(int maxAge){
}
@Override
- public int getItemCount()
- {
+ public int getItemCount() {
return mDatas.size();
}
+
public void addData(int position) {
- // mDatas.add(position, "Insert One");
+ // mDatas.add(position, "Insert One");
notifyItemInserted(position);
}
@@ -675,8 +658,8 @@ void test(int maxAge){
mDatas.remove(position);
notifyItemRemoved(position);
}
- class MyViewHolder extends RecyclerView.ViewHolder
- {
+
+ class MyViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.id_check_box)
CheckBox checkBox;
@BindView(R.id.imageView)
@@ -695,8 +678,8 @@ void test(int maxAge){
@Nullable
@BindView(R.id.desc)
TextView tvDesc;
- public MyViewHolder(View view)
- {
+
+ public MyViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
//tvTitle = (TextView) view.findViewById(R.id.title);
@@ -706,4 +689,30 @@ void test(int maxAge){
}
}
+ @Override
+ public void onResume() {
+ super.onResume();
+ getUpdatedData(); //TODO: 更新书的状态,是不有更新
+ if (bottomSheetDialog != null) {
+ bottomSheetDialog.hide();
+ }
+ MobclickAgent.onPageStart(TAG);
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ MobclickAgent.onPageEnd(TAG);
+ }
+
+ //----------toutiao ad
+
+
+
+
+
}
+
+
+
+
diff --git a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_bangdan.java b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_bangdan.java
index 32845a8..b069c73 100644
--- a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_bangdan.java
+++ b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_bangdan.java
@@ -19,6 +19,7 @@ import com.novelbook.android.adapter.BandanAdapter;
import com.novelbook.android.utils.Constants;
import com.novelbook.android.utils.GsonUtil;
import com.novelbook.android.utils.OnItemClickListener;
+import com.umeng.analytics.MobclickAgent;
import java.util.ArrayList;
import java.util.Arrays;
@@ -123,7 +124,8 @@ public class Fragment_bangdan extends BasicFragment {
BookSubscribe.getPaihangBangByCate( Constants.SEX,cid,new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() {
@Override
public void onSuccess(String result) {
-
+ Log.d(TAG, String.format("init data HttpMethods successed on init, trycnt %s " ,error_try));
+ error_try =0;
// mFirstPage= gson.fromJson(result, FirstPage.class);
try {
mMoreBlocks = GsonUtil.parserNovleBlocks(result,"ranks");
@@ -138,8 +140,14 @@ public class Fragment_bangdan extends BasicFragment {
@Override
public void onFault(String errorMsg) {
//失败
- Log.d(TAG, "error on : " + errorMsg);
- handler.sendEmptyMessage(1);
+
+ Log.d(TAG, String.format("init data HttpMethods error on init, trycnt %s " ,error_try ));
+ if(error_try mFragments;
- private ArrayList mFragments_cp;
+ // private ArrayList mFragments_cp;
ArrayList mList;
String[] mTitle;
Fragment_jingxuan fragment_jingxuan;
@@ -111,8 +112,8 @@ public class Fragment_bookStore extends BasicFragment {
mFragments.add(fragment_jingxuan);
mFragments.add(fragmentCates);
mFragments.add(fragment_bangdans);
- mFragments_cp = new ArrayList<>();
- mFragments_cp.addAll(mFragments);
+ // mFragments_cp = new ArrayList<>();
+ // mFragments_cp.addAll(mFragments);
// mFragments.add(new Fragment_shudan());
Log.d(TAG,"initial fragments in tabs ");
}
@@ -144,7 +145,16 @@ public class Fragment_bookStore extends BasicFragment {
}
-
+ @Override
+ public void onResume() {
+ super.onResume();
+ MobclickAgent.onPageStart(TAG);
+ }
+ @Override
+ public void onPause(){
+ super.onPause();
+ MobclickAgent.onPageEnd(TAG);
+ }
diff --git a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_booklist.java b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_booklist.java
index 83ad2a4..5a57207 100644
--- a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_booklist.java
+++ b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_booklist.java
@@ -30,6 +30,7 @@ import com.novelbook.android.utils.Constants;
import com.novelbook.android.utils.GsonUtil;
import com.novelbook.android.utils.OnItemClickListener;
import com.novelbook.android.adapter.BookListAdapter;
+import com.umeng.analytics.MobclickAgent;
import org.json.JSONObject;
import org.litepal.LitePal;
@@ -379,6 +380,12 @@ public class Fragment_booklist extends BasicFragment {
initData();
}
}
+ MobclickAgent.onPageStart(TAG);
}
+ @Override
+ public void onPause(){
+ super.onPause();
+ MobclickAgent.onPageEnd(TAG);
+ }
}
diff --git a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_jingxuan.java b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_jingxuan.java
index a20dce4..8d9d4bf 100644
--- a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_jingxuan.java
+++ b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_jingxuan.java
@@ -42,6 +42,7 @@ import com.novelbook.android.utils.ImageUtil;
import com.novelbook.android.utils.MyViewPager;
import com.novelbook.android.utils.OnItemClickListener;
import com.novelbook.android.adapter.BookListAdapter;
+import com.umeng.analytics.MobclickAgent;
import com.youth.banner.Banner;
import com.youth.banner.BannerConfig;
import com.youth.banner.Transformer;
@@ -156,7 +157,8 @@ public class Fragment_jingxuan extends BasicFragment implements OnBannerListener
BookSubscribe.getFirstPage(Constants.SEX,new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() {
@Override
public void onSuccess(String result) {
-
+ Log.d(TAG, String.format("init data HttpMethods successed on init, trycnt %s " ,error_try));
+ error_try=0;
// mFirstPage= gson.fromJson(result, FirstPage.class);
try {
@@ -171,8 +173,8 @@ public class Fragment_jingxuan extends BasicFragment implements OnBannerListener
@Override
public void onFault(String errorMsg) {
//失败
- Log.d(TAG, "error on get firstpage: " + errorMsg);
- handler.sendEmptyMessage(1);
+ // Log.d(TAG, String.format("init data HttpMethods error on init, trycnt %s " ,error_try ));
+ retryErorr(1);
}
}, getActivity()));
@@ -276,6 +278,7 @@ public class Fragment_jingxuan extends BasicFragment implements OnBannerListener
@Override
public void initViews() {
+
gridItemSpace = getResources().getDimensionPixelSize(R.dimen._10dp);
}
@@ -659,5 +662,14 @@ public class Fragment_jingxuan extends BasicFragment implements OnBannerListener
}
}
-
+ @Override
+ public void onResume() {
+ super.onResume();
+ MobclickAgent.onPageStart(TAG);
+ }
+ @Override
+ public void onPause(){
+ super.onPause();
+ MobclickAgent.onPageEnd(TAG);
+ }
}
\ No newline at end of file
diff --git a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_jingxuan_tuijian.java b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_jingxuan_tuijian.java
index 9dcd3c3..8e755f7 100644
--- a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_jingxuan_tuijian.java
+++ b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_jingxuan_tuijian.java
@@ -10,6 +10,7 @@ import android.widget.TextView;
import com.novelbook.android.R;
import com.novelbook.android.db.Novel;
+import com.umeng.analytics.MobclickAgent;
import java.util.List;
@@ -133,5 +134,14 @@ public class Fragment_jingxuan_tuijian extends BasicFragment {
}
-
+ @Override
+ public void onResume() {
+ super.onResume();
+ MobclickAgent.onPageStart(TAG);
+ }
+ @Override
+ public void onPause(){
+ super.onPause();
+ MobclickAgent.onPageEnd(TAG);
+ }
}
diff --git a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_paihang.java b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_paihang.java
index 8754c84..31e9d91 100644
--- a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_paihang.java
+++ b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_paihang.java
@@ -30,6 +30,7 @@ import com.novelbook.android.utils.OnItemClickListener;
import com.novelbook.android.adapter.BookListAdapter;
import com.flyco.tablayout.CommonTabLayout;
import com.flyco.tablayout.listener.CustomTabEntity;
+import com.umeng.analytics.MobclickAgent;
import org.json.JSONArray;
import org.json.JSONObject;
@@ -186,7 +187,8 @@ public static final String TAG = Fragment_paihang.class.getSimpleName();
OnSuccessAndFaultListener successAndFaultListener = new OnSuccessAndFaultListener() {
@Override
public void onSuccess(String result) {
-
+ error_try=0;
+ Log.d(TAG, String.format("init data HttpMethods successed on init, trycnt %s " ,error_try));
// mFirstPage= gson.fromJson(result, FirstPage.class);
try {
JSONObject jsonObject = new JSONObject(result);
@@ -204,8 +206,10 @@ public static final String TAG = Fragment_paihang.class.getSimpleName();
@Override
public void onFault(String errorMsg) {
//失败
- Log.d(TAG, "error on get firstpage: " + errorMsg);
- handler.sendEmptyMessage(1);
+
+ // Log.d(TAG, String.format("init data HttpMethods error on init, trycnt %s " ,error_try ));
+ // getSearchTabTtitle();
+ retryErorr(0);
}
};
showProgressDialog(false, "正在加载...");
@@ -402,13 +406,6 @@ public static final String TAG = Fragment_paihang.class.getSimpleName();
//------------滑动监听
- @Override
- public void onResume() {
- super.onResume();
- //mNestedScrollView.smoothScrollBy(1,1);
- // tvHint.setVisibility(isShowHint? View.VISIBLE:View.GONE);
- // tmp=0;
- }
@Override
@@ -417,5 +414,14 @@ public static final String TAG = Fragment_paihang.class.getSimpleName();
}
-
+ @Override
+ public void onResume() {
+ super.onResume();
+ MobclickAgent.onPageStart(TAG);
+ }
+ @Override
+ public void onPause(){
+ super.onPause();
+ MobclickAgent.onPageEnd(TAG);
+ }
}
diff --git a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_shudan.java b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_shudan.java
index 28055bf..05aba17 100644
--- a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_shudan.java
+++ b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_shudan.java
@@ -15,6 +15,7 @@ import com.novelbook.android.Activity_createShudan;
import com.novelbook.android.Activity_shudan_my;
import com.novelbook.android.R;
import com.flyco.tablayout.SlidingTabLayout;
+import com.umeng.analytics.MobclickAgent;
import java.util.ArrayList;
@@ -181,5 +182,14 @@ public class Fragment_shudan extends BasicFragment {
if( bottomSheetDialog !=null ){
bottomSheetDialog.dismiss();
}
+ MobclickAgent.onPageStart(TAG);
+ }
+
+
+
+ @Override
+ public void onPause(){
+ super.onPause();
+ MobclickAgent.onPageEnd(TAG);
}
}
diff --git a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_shudan_list.java b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_shudan_list.java
index f05d97e..33b2d30 100644
--- a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_shudan_list.java
+++ b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_shudan_list.java
@@ -13,6 +13,7 @@ import com.novelbook.android.db.Novel;
import com.novelbook.android.db.BookDan;
import com.novelbook.android.utils.OnItemClickListener;
import com.novelbook.android.adapter.BookListAdapter;
+import com.umeng.analytics.MobclickAgent;
import java.util.ArrayList;
import java.util.List;
@@ -109,13 +110,8 @@ public class Fragment_shudan_list extends BasicFragment {
initialBookList();
}
- @Override
- public void onResume() {
- super.onResume();
- }
-
@Override
public void onAttach(Context context) {
super.onAttach(context);
diff --git a/zhuike/src/main/java/com/novelbook/android/Main2Activity.java b/zhuike/src/main/java/com/novelbook/android/Main2Activity.java
index 151670f..723f4ec 100644
--- a/zhuike/src/main/java/com/novelbook/android/Main2Activity.java
+++ b/zhuike/src/main/java/com/novelbook/android/Main2Activity.java
@@ -13,6 +13,7 @@ import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.widget.AppCompatSpinner;
+import android.util.DisplayMetrics;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
@@ -23,6 +24,7 @@ import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
+import android.view.WindowManager;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
@@ -46,6 +48,7 @@ import com.novelbook.android.utils.PageFactory;
import org.json.JSONObject;
+import org.litepal.util.Const;
import java.util.Date;
@@ -97,6 +100,13 @@ public class Main2Activity extends Activity_base
initialSexOption();
// checkUpdate(true);
CommonUtil.getSearchTabTtitle(this);
+ DisplayMetrics metric = new DisplayMetrics();
+ WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
+ wm.getDefaultDisplay().getMetrics(metric);
+ Constants.SCREEN_WIDTH_PIX = metric.widthPixels;
+ // mHeight = metric.heightPixels;
+ // mHeight = CommonUtil.getDpi(context);
+ Constants.SCREEN_HEIGHT_PIX = CommonUtil.getScreenHeight(this) - CommonUtil.statusBarDiff(this);
}
@@ -249,38 +259,8 @@ public class Main2Activity extends Activity_base
}
-/* @Override
- public void onBackPressed() {
- DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
- if (drawer.isDrawerOpen(GravityCompat.START)) {
- drawer.closeDrawer(GravityCompat.START);
- } else {
- super.onBackPressed();
- }
- }*/
-
- /* @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- // Handle action bar item clicks here. The action bar will
- // automatically handle clicks on the Home/Up button, so long
- // as you specify a parent activity in AndroidManifest.xml.
- int id = item.getItemId();
-
- //noinspection SimplifiableIfStatement
- if (id == R.id.action_settings) {
- return true;
- }
- if(id==R.id.menuSearch){
- Intent intent = new Intent(this,Activity_Search.class);
- startActivity(intent);
-
- }
-
- return super.onOptionsItemSelected(item);
- }*/
-
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
diff --git a/zhuike/src/main/java/com/novelbook/android/MarkActivity.java b/zhuike/src/main/java/com/novelbook/android/MarkActivity.java
index 804cc1f..31268ce 100644
--- a/zhuike/src/main/java/com/novelbook/android/MarkActivity.java
+++ b/zhuike/src/main/java/com/novelbook/android/MarkActivity.java
@@ -40,10 +40,10 @@ public class MarkActivity extends Activity_base {
SlidingTabLayout tabLayout;
// @Bind(R.id.lv_catalogue)
// ListView lv_catalogue;
- @BindView(R.id.btnSort)
+ /*@BindView(R.id.btnSort)
ImageButton ibSort;
@BindView(R.id.btnRefresh)
- ImageButton btnRefresh;
+ ImageButton btnRefresh;*/
private PageFactory pageFactory;
@@ -60,12 +60,20 @@ public class MarkActivity extends Activity_base {
@Override
protected void initViews() {
- if(getFactory().getNovle().isLocalBook()) {
+ /* if(getFactory().getNovle().isLocalBook()) {
// btnRefresh.setEnabled(false);
btnRefresh.setVisibility(View.GONE);
- }
+ }*/
+ }
+ @Override
+ public boolean onPrepareOptionsMenu(Menu menu) {
+ Log.e(TAG, "onPrepareOptionsMenu");
+ if(getFactory().getNovle().isLocalBook()) {
+ // btnRefresh.setEnabled(false);
+ menu.findItem(R.id.action_refresh).setVisible(false);
+ }
+ return super.onPrepareOptionsMenu(menu);
}
-
@Override
protected void setTitle() {
@@ -107,7 +115,7 @@ public class MarkActivity extends Activity_base {
protected void initListener() {
}
- @OnClick({R.id.btnSort,R.id.btnRefresh})
+ /*@OnClick({R.id.btnSort,R.id.btnRefresh})
void Onclick(View view){
if(view.getId() == R.id.btnSort){
Log.d(TAG, "Onclick: sorted");
@@ -131,7 +139,7 @@ public class MarkActivity extends Activity_base {
}}
}
- }
+ }*/
private Sortcat sortcat=null;
private Sortmark sortmark=null;
@@ -176,6 +184,25 @@ public class MarkActivity extends Activity_base {
intent.putExtra(Activity_ChgSource.EXTR_cate,true);
startActivity(intent);
finish();
+ }else
+ if (id == R.id.action_sort) {
+ Log.d(TAG, "Onclick: sorted");
+
+ if(sortcat!=null){
+ sortcat.sortList();
+ }
+ if(sortmark!=null){
+ sortmark.sortList();
+ }
+ }else
+ if (id == R.id.action_refresh) {
+ if(sortcat!=null){
+ sortcat.refresh();
+ }
+ if(sortmark!=null){
+ sortmark.refresh();
+
+ }
}
return super.onOptionsItemSelected(item);
}
diff --git a/zhuike/src/main/java/com/novelbook/android/MyApp.java b/zhuike/src/main/java/com/novelbook/android/MyApp.java
index 7a1d62e..b87d348 100644
--- a/zhuike/src/main/java/com/novelbook/android/MyApp.java
+++ b/zhuike/src/main/java/com/novelbook/android/MyApp.java
@@ -5,6 +5,10 @@ import android.app.Application;
import android.content.Context;
import android.util.Log;
+import com.bytedance.sdk.openadsdk.TTAdConfig;
+import com.bytedance.sdk.openadsdk.TTAdConstant;
+import com.bytedance.sdk.openadsdk.TTAdSdk;
+import com.novelbook.android.AD.toutiao.TTAdManagerHolder;
import com.novelbook.android.netutils.HttpMethods;
import com.novelbook.android.netutils.NetUtil;
import com.novelbook.android.utils.Config;
@@ -36,14 +40,23 @@ public class MyApp extends Application {
LogcatHelper.getInstance(this).start();
// BlurKit.init(this);
LitePal.initialize(this);
- // splashAdManager = new SplashAdManager(this);
- initApi();
+ splashAdManager = new SplashAdManager(this);
+ initUmengApi();
+ initAD();
}
- public void initApi(){
+ private void initUmengApi(){
UMConfigure.init(applicationContext,UMConfigure.DEVICE_TYPE_PHONE,null);
MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.AUTO);
}
+ private void initAD(){
+ initAD_ChuanShanJia();
+ }
+ private void initAD_ChuanShanJia(){
+ TTAdManagerHolder.init(applicationContext);
+ }
+
+
public boolean exit() {
System.exit(-1);
@@ -60,6 +73,8 @@ public class MyApp extends Application {
oList.add(activity);//把当前Activity添加到集合中
}
}
+
+
/**
* 销毁单个Activity
*/
@@ -82,4 +97,8 @@ public class MyApp extends Application {
}
}
+ public List getActivityList(){
+ return oList;
+ }
+
}
diff --git a/zhuike/src/main/java/com/novelbook/android/ReadActivity.java b/zhuike/src/main/java/com/novelbook/android/ReadActivity.java
index 64c42b3..1c982cb 100644
--- a/zhuike/src/main/java/com/novelbook/android/ReadActivity.java
+++ b/zhuike/src/main/java/com/novelbook/android/ReadActivity.java
@@ -18,21 +18,37 @@ import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Display;
import android.view.KeyEvent;
+import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
+import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.FrameLayout;
+import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
+import com.androidquery.callback.AQuery2;
+import com.androidquery.callback.ImageOptions;
+import com.bytedance.sdk.openadsdk.AdSlot;
+import com.bytedance.sdk.openadsdk.TTAdConstant;
+import com.bytedance.sdk.openadsdk.TTAdDislike;
+import com.bytedance.sdk.openadsdk.TTAdNative;
+import com.bytedance.sdk.openadsdk.TTAppDownloadListener;
+import com.bytedance.sdk.openadsdk.TTBannerAd;
+import com.bytedance.sdk.openadsdk.TTImage;
+import com.bytedance.sdk.openadsdk.TTNativeAd;
+import com.novelbook.android.AD.SplashAdManager;
+import com.novelbook.android.AD.toutiao.TTAdManagerHolder;
+import com.novelbook.android.AD.toutiao.TToast;
import com.novelbook.android.db.Chapter;
import com.novelbook.android.db.Novel;
import com.novelbook.android.db.BookMarks;
@@ -52,6 +68,7 @@ import org.litepal.LitePal;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
+import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@@ -106,8 +123,8 @@ public class ReadActivity extends Activity_base implements AdInterface {
@BindView(R.id.appbar)
AppBarLayout appbar;
- @BindView(R.id.llTopAd)
- LinearLayout llTopAd;
+// @BindView(R.id.banner_container)
+// FrameLayout mBannerContainer;
@BindView(R.id.imgLoading)
pl.droidsonroids.gif.GifImageView imgLoading;
@@ -151,7 +168,7 @@ public class ReadActivity extends Activity_base implements AdInterface {
@Override
protected void initViews() {
-
+
}
@Override
@@ -179,7 +196,7 @@ public class ReadActivity extends Activity_base implements AdInterface {
pageFactory = PageFactory.getInstance(getApplicationContext());
pageFactory.clear();
pageFactory.setAd(this);
- llTopAd.setVisibility(View.GONE);
+ mBannerContainer.setVisibility(View.GONE);
// showProgress (false,"读取目录信息");
/* int slept = 0;
@@ -406,6 +423,7 @@ public class ReadActivity extends Activity_base implements AdInterface {
}
pageFactory.prePage();
+ SplashAdManager.plusPage(ReadActivity.this);
if (pageFactory.isfirstPage() || !pageFactory.isReady()) {
return false;
}
@@ -426,6 +444,7 @@ public class ReadActivity extends Activity_base implements AdInterface {
}
pageFactory.nextPage();
+ SplashAdManager.plusPage(ReadActivity.this);
if (pageFactory.islastPage() || !pageFactory.isReady()) {
return false;
}
@@ -489,7 +508,7 @@ public class ReadActivity extends Activity_base implements AdInterface {
}*/
hideReadSetting();
-
+ pageFactory.updateTime();
}
@@ -891,7 +910,7 @@ public class ReadActivity extends Activity_base implements AdInterface {
@OnClick({R.id.tv_progress, R.id.rl_progress, R.id.tv_pre, R.id.sb_progress, R.id.tv_next, R.id.tv_directory,
R.id.tv_dayornight,R.id.tv_pagemode, R.id.tv_setting, R.id.bookpop_bottom, /*R.id.rl_bottom,*/R.id.tv_stop_read
- ,R.id.llTopAd,R.id.btnRefresh})
+ ,R.id.btnRefresh})
public void onClick(View view) {
pageFactory.setPageWidget(bookpage);
// if( pageFactory.isReady())
@@ -943,11 +962,11 @@ public class ReadActivity extends Activity_base implements AdInterface {
isSpeaking = false;
hideReadSetting();
}*/
- case R.id.llTopAd:
+ /* case R.id.mBannerContainer:
Toast.makeText(this,"ad is clicked ",Toast.LENGTH_LONG).show();
Log.d(TAG,"Ad is clicked");
- break;
+ break;*/
case R.id.btnRefresh:
pageFactory.retryChapt(pageFactory.getCurrentChapter());
btnRefresh.setVisibility(View.GONE);
@@ -976,13 +995,13 @@ public class ReadActivity extends Activity_base implements AdInterface {
- final int contentAdHight=350;
+ final int contentAdHight=100;
@Override
public void showAd(boolean showAd ,int adHeight,int adY) {
hideSystemUI();
- llTopAd.setVisibility(View.GONE);
+ mBannerContainer.setVisibility(View.GONE);
if(!Constants.SHOWAD){
return;
}
@@ -992,16 +1011,351 @@ public class ReadActivity extends Activity_base implements AdInterface {
if(adHeight >contentAdHight){
- FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) llTopAd.getLayoutParams();
- params.setMargins(20, adY, 20, 10);
- llTopAd.setLayoutParams(params);
- llTopAd.setVisibility(View.VISIBLE);
+ FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) mBannerContainer.getLayoutParams();
+
+ Log.d(TAG, String.format("loadBannerAd:width %s, height %s ",Constants.SCREEN_WIDTH_PIX-50,adHeight));
+
+ if(adHeight>620){
+ loadNativeBannerAd(mBannerContainer,BuildConfig.AD_SLOT_TOUTIAO_BANNER_NATIVE_ID);
+ params.setMargins(20, adY-20, 20, 50);
+ }else{
+ loadBannerAd(mBannerContainer,BuildConfig.AD_SLOT_TOUTIAO_BANNER_ID, Constants.SCREEN_WIDTH_PIX-50,adHeight);
+ params.setMargins(20, adY, 20, 10);
+ }
+
+
+ mBannerContainer.setLayoutParams(params);
+ mBannerContainer.setVisibility(View.VISIBLE);
}
}
+ /*private void loadBannerAd(String codeId,int width,int height) {
+ //step4:创建广告请求参数AdSlot,具体参数含义参考文档
+ *//* if(height >390){
+ width =(int)(height*1.78);
+ if(width > Constants.SCREEN_WIDTH_PIX-50 ){
+ width= Constants.SCREEN_WIDTH_PIX-50;
+ height =(int)(width/1.78);
+ }
+ }else if(height >150){
+ width =(int)(height*1.78);
+ }*//*
+ width =990;
+ //height=150;
+ height=height > 500 ? 500: height;
+ Log.d(TAG, String.format("loadBannerAd:finial width %s, height %s ",width,height));
+ AdSlot adSlot = new AdSlot.Builder()
+ .setCodeId(codeId) //广告位id
+ .setSupportDeepLink(true)
+ .setImageAcceptedSize(width, height)
+ .build();
+ //step5:请求广告,对请求回调的广告作渲染处理
+ mTTAdNative.loadBannerAd(adSlot, new TTAdNative.BannerAdListener() {
+
+ @Override
+ public void onError(int code, String message) {
+ TToast.show(ReadActivity.this, "load error : " + code + ", " + message);
+ mBannerContainer.removeAllViews();
+ }
+
+ @Override
+ public void onBannerAdLoad(final TTBannerAd ad) {
+ if (ad == null) {
+ return;
+ }
+ View bannerView = ad.getBannerView();
+ if (bannerView == null) {
+ return;
+ }
+ //设置轮播的时间间隔 间隔在30s到120秒之间的值,不设置默认不轮播
+ ad.setSlideIntervalTime(30 * 1000);
+ mBannerContainer.removeAllViews();
+ mBannerContainer.addView(bannerView);
+ //设置广告互动监听回调
+ ad.setBannerInteractionListener(new TTBannerAd.AdInteractionListener() {
+ @Override
+ public void onAdClicked(View view, int type) {
+ TToast.show(ReadActivity.this, "广告被点击");
+ }
+
+ @Override
+ public void onAdShow(View view, int type) {
+ TToast.show(ReadActivity.this, "广告展示");
+ }
+ });
+ //(可选)设置下载类广告的下载监听
+ bindDownloadListener(ad);
+ //在banner中显示网盟提供的dislike icon,有助于广告投放精准度提升
+ ad.setShowDislikeIcon(new TTAdDislike.DislikeInteractionCallback() {
+ @Override
+ public void onSelected(int position, String value) {
+ TToast.show(ReadActivity.this, "点击 " + value);
+ //用户选择不喜欢原因后,移除广告展示
+ mBannerContainer.removeAllViews();
+ }
+
+ @Override
+ public void onCancel() {
+ TToast.show(ReadActivity.this, "点击取消 ");
+ }
+ });
+
+ //获取网盟dislike dialog,您可以在您应用中本身自定义的dislike icon 按钮中设置 mTTAdDislike.showDislikeDialog();
+ *//*mTTAdDislike = ad.getDislikeDialog(new TTAdDislike.DislikeInteractionCallback() {
+ @Override
+ public void onSelected(int position, String value) {
+ TToast.show(mContext, "点击 " + value);
+ }
+
+ @Override
+ public void onCancel() {
+ TToast.show(mContext, "点击取消 ");
+ }
+ });
+ if (mTTAdDislike != null) {
+ XXX.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mTTAdDislike.showDislikeDialog();
+ }
+ });
+ } *//*
+
+ }
+ });
+ }
+ private boolean mHasShowDownloadActive = false;
+ private void bindDownloadListener(TTBannerAd ad) {
+ ad.setDownloadListener(new TTAppDownloadListener() {
+ @Override
+ public void onIdle() {
+ TToast.show(ReadActivity.this, "点击图片开始下载", Toast.LENGTH_LONG);
+ }
+
+ @Override
+ public void onDownloadActive(long totalBytes, long currBytes, String fileName, String appName) {
+ if (!mHasShowDownloadActive) {
+ mHasShowDownloadActive = true;
+ TToast.show(ReadActivity.this, "下载中,点击图片暂停", Toast.LENGTH_LONG);
+ }
+ }
+
+ @Override
+ public void onDownloadPaused(long totalBytes, long currBytes, String fileName, String appName) {
+ TToast.show(ReadActivity.this, "下载暂停,点击图片继续", Toast.LENGTH_LONG);
+ }
+
+ @Override
+ public void onDownloadFailed(long totalBytes, long currBytes, String fileName, String appName) {
+ TToast.show(ReadActivity.this, "下载失败,点击图片重新下载", Toast.LENGTH_LONG);
+ }
+
+ @Override
+ public void onInstalled(String fileName, String appName) {
+ TToast.show(ReadActivity.this, "安装完成,点击图片打开", Toast.LENGTH_LONG);
+ }
+
+ @Override
+ public void onDownloadFinished(long totalBytes, String fileName, String appName) {
+ TToast.show(ReadActivity.this, "点击图片安装", Toast.LENGTH_LONG);
+ }
+ });
+ }
+
+*/
+
+ /* //-------------native toutiao ad
+ private void loadNativeBannerAd(String codeId) {
+ //step4:创建广告请求参数AdSlot,注意其中的setNativeAdtype方法,具体参数含义参考文档
+ final AdSlot adSlot = new AdSlot.Builder()
+ .setCodeId(codeId)
+ .setSupportDeepLink(true)
+ .setImageAcceptedSize(690, 388)
+ .setNativeAdType(AdSlot.TYPE_BANNER) //请求原生广告时候,请务必调用该方法,设置参数为TYPE_BANNER或TYPE_INTERACTION_AD
+ .setAdCount(1)
+ .build();
+
+ //step5:请求广告,对请求回调的广告作渲染处理
+ mTTAdNative.loadNativeAd(adSlot, new TTAdNative.NativeAdListener() {
+ @Override
+ public void onError(int code, String message) {
+ TToast.show(ReadActivity.this, "load error : " + code + ", " + message);
+ }
+
+ @Override
+ public void onNativeAdLoad(List ads) {
+ if (ads.get(0) == null) {
+ return;
+ }
+ View bannerView = LayoutInflater.from(ReadActivity.this).inflate(R.layout.ad_toutiao_native_ad , mBannerContainer, false);
+ if (bannerView == null) {
+ return;
+ }
+ if (mCreativeButton != null) {
+ //防止内存泄漏
+ mCreativeButton = null;
+ }
+ mBannerContainer.removeAllViews();
+ mBannerContainer.addView(bannerView);
+ //绑定原生广告的数据
+ setAdData(bannerView, ads.get(0));
+ }
+ });
+ }
+
+ @SuppressWarnings("RedundantCast")
+ private void setAdData(View nativeView, TTNativeAd nativeAd) {
+ ((TextView) nativeView.findViewById(R.id.tv_native_ad_title)).setText(nativeAd.getTitle());
+ ((TextView) nativeView.findViewById(R.id.tv_native_ad_desc)).setText(nativeAd.getDescription());
+ ImageView imgDislike = nativeView.findViewById(R.id.img_native_dislike);
+ bindDislikeAction(nativeAd, imgDislike);
+ if (nativeAd.getImageList() != null && !nativeAd.getImageList().isEmpty()) {
+ TTImage image = nativeAd.getImageList().get(0);
+ if (image != null && image.isValid()) {
+ mAQuery.id(nativeView.findViewById(R.id.iv_native_image)).image(image.getImageUrl());
+ }
+ }
+ TTImage icon = nativeAd.getIcon();
+ if (icon != null && icon.isValid()) {
+ ImageOptions options = new ImageOptions();
+ mAQuery.id((nativeView.findViewById(R.id.iv_native_icon))).image(icon.getImageUrl(), options);
+ }
+ mCreativeButton = (Button) nativeView.findViewById(R.id.btn_native_creative);
+ //可根据广告类型,为交互区域设置不同提示信息
+ switch (nativeAd.getInteractionType()) {
+ case TTAdConstant.INTERACTION_TYPE_DOWNLOAD:
+ //如果初始化ttAdManager.createAdNative(getApplicationContext())没有传入activity 则需要在此传activity,否则影响使用Dislike逻辑
+ nativeAd.setActivityForDownloadApp(this);
+ mCreativeButton.setVisibility(View.VISIBLE);
+ nativeAd.setDownloadListener(mDownloadListener); // 注册下载监听器
+ break;
+ case TTAdConstant.INTERACTION_TYPE_DIAL:
+ mCreativeButton.setVisibility(View.VISIBLE);
+ mCreativeButton.setText("立即拨打");
+ break;
+ case TTAdConstant.INTERACTION_TYPE_LANDING_PAGE:
+ case TTAdConstant.INTERACTION_TYPE_BROWSER:
+ mCreativeButton.setVisibility(View.VISIBLE);
+ mCreativeButton.setText("查看详情");
+ break;
+ default:
+ mCreativeButton.setVisibility(View.GONE);
+ TToast.show(ReadActivity.this, "交互类型异常");
+ }
+
+ //可以被点击的view, 也可以把nativeView放进来意味整个广告区域可被点击
+ List clickViewList = new ArrayList<>();
+ clickViewList.add(nativeView);
+
+ //触发创意广告的view(点击下载或拨打电话)
+ List creativeViewList = new ArrayList<>();
+ //如果需要点击图文区域也能进行下载或者拨打电话动作,请将图文区域的view传入
+ //creativeViewList.add(nativeView);
+ creativeViewList.add(mCreativeButton);
+
+ //重要! 这个涉及到广告计费,必须正确调用。convertView必须使用ViewGroup。
+ nativeAd.registerViewForInteraction((ViewGroup) nativeView, clickViewList, creativeViewList, imgDislike, new TTNativeAd.AdInteractionListener() {
+ @Override
+ public void onAdClicked(View view, TTNativeAd ad) {
+ if (ad != null) {
+ TToast.show(ReadActivity.this, "广告" + ad.getTitle() + "被点击");
+ }
+ }
+
+ @Override
+ public void onAdCreativeClick(View view, TTNativeAd ad) {
+ if (ad != null) {
+ TToast.show(ReadActivity.this, "广告" + ad.getTitle() + "被创意按钮被点击");
+ }
+ }
+
+ @Override
+ public void onAdShow(TTNativeAd ad) {
+ if (ad != null) {
+ TToast.show(ReadActivity.this, "广告" + ad.getTitle() + "展示");
+ }
+ }
+ });
+
+ }
+
+ //接入网盟的dislike 逻辑,有助于提示广告精准投放度
+ private void bindDislikeAction(TTNativeAd ad, View dislikeView) {
+ final TTAdDislike ttAdDislike = ad.getDislikeDialog(this);
+ if (ttAdDislike != null) {
+ ttAdDislike.setDislikeInteractionCallback(new TTAdDislike.DislikeInteractionCallback() {
+ @Override
+ public void onSelected(int position, String value) {
+ mBannerContainer.removeAllViews();
+ }
+
+ @Override
+ public void onCancel() {
+
+ }
+ });
+ }
+ dislikeView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (ttAdDislike != null)
+ ttAdDislike.showDislikeDialog();
+ }
+ });
+ }
+
+ private final TTAppDownloadListener mDownloadListener = new TTAppDownloadListener() {
+ @Override
+ public void onIdle() {
+ if (mCreativeButton != null) {
+ mCreativeButton.setText("开始下载");
+ }
+ }
+
+
+ @Override
+ public void onDownloadActive(long totalBytes, long currBytes, String fileName, String appName) {
+ if (mCreativeButton != null) {
+ if (totalBytes <= 0L) {
+ mCreativeButton.setText("下载中 percent: 0");
+ } else {
+ mCreativeButton.setText("下载中 percent: " + (currBytes * 100 / totalBytes));
+ }
+ }
+ }
+
+
+ @Override
+ public void onDownloadPaused(long totalBytes, long currBytes, String fileName, String appName) {
+ if (mCreativeButton != null) {
+ mCreativeButton.setText("下载暂停 percent: " + (currBytes * 100 / totalBytes));
+ }
+ }
+
+ @Override
+ public void onDownloadFailed(long totalBytes, long currBytes, String fileName, String appName) {
+ if (mCreativeButton != null) {
+ mCreativeButton.setText("重新下载");
+ }
+ }
+
+ @Override
+ public void onInstalled(String fileName, String appName) {
+ if (mCreativeButton != null) {
+ mCreativeButton.setText("点击打开");
+ }
+ }
+
+ @Override
+ public void onDownloadFinished(long totalBytes, String fileName, String appName) {
+ if (mCreativeButton != null) {
+ mCreativeButton.setText("点击安装");
+ }
+ }
+ };*/
}
diff --git a/zhuike/src/main/java/com/novelbook/android/dialog/SettingDialog.java b/zhuike/src/main/java/com/novelbook/android/dialog/SettingDialog.java
index 2e5cd43..3cc9acd 100644
--- a/zhuike/src/main/java/com/novelbook/android/dialog/SettingDialog.java
+++ b/zhuike/src/main/java/com/novelbook/android/dialog/SettingDialog.java
@@ -5,6 +5,7 @@ import android.content.Context;
import android.graphics.Typeface;
import android.os.Build;
import android.os.Bundle;
+import android.util.Log;
import android.view.Display;
import android.view.Gravity;
import android.view.View;
@@ -13,7 +14,7 @@ import android.widget.SeekBar;
import android.widget.TextView;
-import com.baidu.android.common.logging.Log;
+
import com.novelbook.android.utils.CommonUtil;
import com.novelbook.android.utils.Config;
import com.novelbook.android.R;
@@ -266,7 +267,7 @@ public class SettingDialog extends Dialog {
mSettingListener.changeTypeFace(tface);
}
}catch (Exception e){
- Log.e("SettingDialog",e.getMessage());
+ Log.e("SettingDialog", "setTypeface: ",e );
}
}
diff --git a/zhuike/src/main/java/com/novelbook/android/netutils/RetryInterceptor.java b/zhuike/src/main/java/com/novelbook/android/netutils/RetryInterceptor.java
index 3c22f64..5f5db2f 100644
--- a/zhuike/src/main/java/com/novelbook/android/netutils/RetryInterceptor.java
+++ b/zhuike/src/main/java/com/novelbook/android/netutils/RetryInterceptor.java
@@ -45,8 +45,9 @@ public class RetryInterceptor implements Interceptor {
{
int i=0;
while(response==null && i<3){
- request = chain.request();
+ response = doRequest(chain, request);
i++;
+ Log.d(TAG, String.format("HttpMethods intercept:a retried %s, response is null? %s",i, response == null));
}
if(response==null) {
throw new IOException();
@@ -70,8 +71,15 @@ public class RetryInterceptor implements Interceptor {
{
int i=0;
while(response==null && i<3){
- request = chain.request();
+
+ try {
+ Thread.sleep(10);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ response = doRequest(chain, request);
i++;
+ Log.d(TAG, String.format("HttpMethods intercept:b retried %s,%s,response is null? %s",i,request.url(), response == null));
}
if(response==null) {
throw new IOException();
@@ -129,13 +137,19 @@ public class RetryInterceptor implements Interceptor {
response = doRequest(chain, newRequest);
- Log.d(TAG, String.format("HttpMethods intercept: response is null? %s", response == null));
+ Log.d(TAG, String.format("HttpMethods intercept: %s, response is null? %s",newRequest.url(), response == null));
- int i=0;
- while((response==null || !response.isSuccessful() )&& i<3){
- request = chain.request();
+ /* int i=0;
+ while((response==null || !response.isSuccessful() )&& i<5){
+ try {
+ Thread.sleep(10);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ response = doRequest(chain, newRequest);
i++;
- }
+ Log.d(TAG, String.format("HttpMethods intercept:C retried %s,%s, response is null? %s",i,newRequest.url(), response == null));
+ }*/
if (response != null) {
Log.d(TAG, String.format("HttpMethods intercept: response .code? %s", response.code()));
diff --git a/zhuike/src/main/java/com/novelbook/android/utils/Constants.java b/zhuike/src/main/java/com/novelbook/android/utils/Constants.java
index b9c9f72..17ce34f 100644
--- a/zhuike/src/main/java/com/novelbook/android/utils/Constants.java
+++ b/zhuike/src/main/java/com/novelbook/android/utils/Constants.java
@@ -9,10 +9,15 @@ public class Constants {
public static final String BLOCK_TITLE_NOVELS = "ns";
public static final String HOT_KEYS = "keywords";
public static final int NOVEL_SPAN_CNT =3 ; //grid columns
- public static final boolean SHOWAD =false ;
+
public static final int MAXAGE_MAX =60*60*24*28; //28 天 ;
public static final int MAXAGE_MULU = 60*60*24*7*2; //2周;;
public static final String VERSION_ADDRESS ="version.xml";
+ public static final boolean SHOWAD =true ;
+ public static final long AD_SPLASH_INVTERVAL = 5*60*1000;//间隔5分钟
+ public static final int AD_SPLASH_PAGES = 15;
+ public static int SCREEN_HEIGHT_PIX =0 ;
+ public static int SCREEN_WIDTH_PIX = 0;
public static long LAST_G = 0;//主目录API上次访问时间
public static long MAXAGE_G = 3600;//主目录API上次访问时间
public static String[] HOT_KEYS_VALUE = {};
diff --git a/zhuike/src/main/java/com/novelbook/android/utils/PageFactory.java b/zhuike/src/main/java/com/novelbook/android/utils/PageFactory.java
index 318a520..408f470 100644
--- a/zhuike/src/main/java/com/novelbook/android/utils/PageFactory.java
+++ b/zhuike/src/main/java/com/novelbook/android/utils/PageFactory.java
@@ -988,7 +988,7 @@ private void hideSysUI(){
private void showAd(int adHeight,int adY) {
- boolean showAd = getCurrentPage().getPageNo() > 2
+ boolean showAd = getCurrentPage().getPageNo() > 1
&&NetWorkUtil.isNetworkConnected(mContext);
if (mAd != null) {
@@ -1154,7 +1154,7 @@ private void hideSysUI(){
this.mBookUtil.getTargetSites();
}
public void initBookUtil() {
- mBookUtil = null;
+ mBookUtil = new BookUtil();
}
/**
* 打开书本
@@ -1168,7 +1168,7 @@ private void hideSysUI(){
if(book.isLocalBook()){ //离线书籍重新初始化加载mBookUtil
mBookUtil = new BookUtil();
mBookUtil.setNovel(book);
- }else if(mBookUtil==null){
+ }else if(getNovle()==null){
Log.d(TAG, "prepare book: preparing in openBook method" + book.getName());
prepareBook(book);
}
diff --git a/zhuike/src/main/res/drawable-v21/toutiao_splash_banner.png b/zhuike/src/main/res/drawable-v21/toutiao_splash_banner.png
new file mode 100644
index 0000000..71d1c7e
Binary files /dev/null and b/zhuike/src/main/res/drawable-v21/toutiao_splash_banner.png differ
diff --git a/zhuike/src/main/res/drawable-v21/toutiao_splash_bg.xml b/zhuike/src/main/res/drawable-v21/toutiao_splash_bg.xml
new file mode 100644
index 0000000..8701461
--- /dev/null
+++ b/zhuike/src/main/res/drawable-v21/toutiao_splash_bg.xml
@@ -0,0 +1,13 @@
+
+
+ -
+
+
+
+
+
+
diff --git a/zhuike/src/main/res/layout/activity_setup.xml b/zhuike/src/main/res/layout/activity_setup.xml
index a2ca493..d13eee1 100644
--- a/zhuike/src/main/res/layout/activity_setup.xml
+++ b/zhuike/src/main/res/layout/activity_setup.xml
@@ -42,12 +42,17 @@
/>
+
@@ -64,7 +69,7 @@
@@ -89,7 +94,7 @@
diff --git a/zhuike/src/main/res/layout/activitycache.xml b/zhuike/src/main/res/layout/activitycache.xml
index e8fd124..13031b1 100644
--- a/zhuike/src/main/res/layout/activitycache.xml
+++ b/zhuike/src/main/res/layout/activitycache.xml
@@ -22,22 +22,30 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/zhuike/src/main/res/layout/ad_toutiao_activity_splash.xml b/zhuike/src/main/res/layout/ad_toutiao_activity_splash.xml
new file mode 100644
index 0000000..4f1ef19
--- /dev/null
+++ b/zhuike/src/main/res/layout/ad_toutiao_activity_splash.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
diff --git a/zhuike/src/main/res/layout/ad_toutiao_native_ad.xml b/zhuike/src/main/res/layout/ad_toutiao_native_ad.xml
new file mode 100644
index 0000000..27b429c
--- /dev/null
+++ b/zhuike/src/main/res/layout/ad_toutiao_native_ad.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/zhuike/src/main/res/layout/book_activity_custom_title.xml b/zhuike/src/main/res/layout/book_activity_custom_title.xml
new file mode 100644
index 0000000..9b5ebd3
--- /dev/null
+++ b/zhuike/src/main/res/layout/book_activity_custom_title.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
diff --git a/zhuike/src/main/res/layout/content_book.xml b/zhuike/src/main/res/layout/content_book.xml
index 55812d9..edb5017 100644
--- a/zhuike/src/main/res/layout/content_book.xml
+++ b/zhuike/src/main/res/layout/content_book.xml
@@ -14,7 +14,7 @@
android:layout_height="match_parent"
android:orientation="vertical">
-
-
+ -->
@@ -207,7 +207,10 @@
-
+
+
+
-
+
@@ -21,4 +30,4 @@
/>
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/zhuike/src/main/res/layout/fragment_fragment__shelf.xml b/zhuike/src/main/res/layout/fragment_fragment__shelf.xml
index 4467c06..130839b 100644
--- a/zhuike/src/main/res/layout/fragment_fragment__shelf.xml
+++ b/zhuike/src/main/res/layout/fragment_fragment__shelf.xml
@@ -7,12 +7,20 @@
android:layout_marginRight="@dimen/marginRight"
android:orientation="vertical">
+
+
+
+
+
+
+
-
+
\ No newline at end of file
diff --git a/zhuike/src/main/res/layout/fragment_jingxuan.xml b/zhuike/src/main/res/layout/fragment_jingxuan.xml
index 00e5ba0..1266432 100644
--- a/zhuike/src/main/res/layout/fragment_jingxuan.xml
+++ b/zhuike/src/main/res/layout/fragment_jingxuan.xml
@@ -4,7 +4,12 @@
xmlns:tools="http://schemas.android.com/tools"
style="@style/llOutside.vertical"
tools:context=".Fragments.Fragment_jingxuan">
-
+
-
+ style="@style/buttonCates"/>-->
diff --git a/zhuike/src/main/res/layout/zactivity_read.xml b/zhuike/src/main/res/layout/zactivity_read.xml
index 0134469..5b4f91d 100644
--- a/zhuike/src/main/res/layout/zactivity_read.xml
+++ b/zhuike/src/main/res/layout/zactivity_read.xml
@@ -45,8 +45,8 @@
/>
-
-
-
+ -->
+
diff --git a/zhuike/src/main/res/menu/catalogemark.xml b/zhuike/src/main/res/menu/catalogemark.xml
index a0940ea..1db7ae8 100644
--- a/zhuike/src/main/res/menu/catalogemark.xml
+++ b/zhuike/src/main/res/menu/catalogemark.xml
@@ -1,10 +1,23 @@
\ No newline at end of file
diff --git a/zhuike/src/main/res/mipmap-hdpi/ic_launcher.png b/zhuike/src/main/res/mipmap-hdpi/ic_launcher.png
index 4b8ca1e..d8105f0 100644
Binary files a/zhuike/src/main/res/mipmap-hdpi/ic_launcher.png and b/zhuike/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/zhuike/src/main/res/mipmap-mdpi/ic_launcher.png b/zhuike/src/main/res/mipmap-mdpi/ic_launcher.png
index d6e07b3..3e3e9cf 100644
Binary files a/zhuike/src/main/res/mipmap-mdpi/ic_launcher.png and b/zhuike/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/zhuike/src/main/res/mipmap-xhdpi/ic_launcher.png b/zhuike/src/main/res/mipmap-xhdpi/ic_launcher.png
index 35ee17e..a5c4a70 100644
Binary files a/zhuike/src/main/res/mipmap-xhdpi/ic_launcher.png and b/zhuike/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/zhuike/src/main/res/mipmap-xxhdpi/ic_launcher.png b/zhuike/src/main/res/mipmap-xxhdpi/ic_launcher.png
index 2aeef7e..dc06243 100644
Binary files a/zhuike/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/zhuike/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/zhuike/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/zhuike/src/main/res/mipmap-xxxhdpi/ic_launcher.png
index 02f5967..da2d46c 100644
Binary files a/zhuike/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/zhuike/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/zhuike/src/main/res/values/dimens.xml b/zhuike/src/main/res/values/dimens.xml
index 48d17d1..d0fc361 100644
--- a/zhuike/src/main/res/values/dimens.xml
+++ b/zhuike/src/main/res/values/dimens.xml
@@ -48,6 +48,7 @@
10dp
40dp
240dp
+ 20dp
diff --git a/zhuike/src/main/res/values/strings.xml b/zhuike/src/main/res/values/strings.xml
index 80dea29..16c453d 100644
--- a/zhuike/src/main/res/values/strings.xml
+++ b/zhuike/src/main/res/values/strings.xml
@@ -42,7 +42,7 @@
Main5Activity
加入书架
立即阅读
- 下载管理
+ 缓存管理
榜
Main6Activity
Hello World from section: %1$d
@@ -136,6 +136,8 @@
设置
免责声明
全本缓存
+ 如意阅读
+ 广告
- 小燕—女青、中英、普通话
diff --git a/zhuike/src/main/res/values/styles.xml b/zhuike/src/main/res/values/styles.xml
index 52c2ae1..fe16df7 100644
--- a/zhuike/src/main/res/values/styles.xml
+++ b/zhuike/src/main/res/values/styles.xml
@@ -23,6 +23,18 @@
+
+
+
+
+
-
+
diff --git a/zhuike/src/main/res/xml/file_paths.xml b/zhuike/src/main/res/xml/file_paths.xml
new file mode 100644
index 0000000..ab1ce84
--- /dev/null
+++ b/zhuike/src/main/res/xml/file_paths.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/zhuike/zhuike.iml b/zhuike/zhuike.iml
index fb9a1d5..dc9cd64 100644
--- a/zhuike/zhuike.iml
+++ b/zhuike/zhuike.iml
@@ -106,17 +106,13 @@
-
-
-
-
@@ -126,104 +122,102 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+