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 @@ + + + + + + + + + + + + + + + + +