add toutiao ad
|
@ -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,6 +59,7 @@ android {
|
|||
// 移除无用的resource文件
|
||||
shrinkResources true
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
|
||||
/* applicationVariants.all { variant ->
|
||||
variant.outputs.all { output ->
|
||||
def outFile = output.outputFile
|
||||
|
@ -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'
|
||||
}
|
||||
|
|
|
@ -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.* {*;}
|
|
@ -9,6 +9,9 @@
|
|||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
||||
<!-- chanshanjia-->
|
||||
<uses-permission android:name="android.permission.GET_TASKS"/>
|
||||
<!--<uses-permission android:name="android.permission.WAKE_LOCK" />-->
|
||||
|
||||
<application
|
||||
android:name=".MyApp"
|
||||
|
@ -26,71 +29,81 @@
|
|||
android:label="@string/title_activity_cate_books"
|
||||
android:launchMode="singleTask"
|
||||
android:parentActivityName=".activity_cates"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/ToolBarTheme.NoActionBar" />
|
||||
<activity
|
||||
android:name=".Activity_Search"
|
||||
android:screenOrientation="portrait"
|
||||
android:label="@string/title_activity_cates"
|
||||
android:launchMode="singleTask"
|
||||
android:parentActivityName=".Main2Activity"
|
||||
android:theme="@style/ToolBarTheme.NoActionBar" />
|
||||
<activity
|
||||
android:name=".Activity_paihangbang"
|
||||
android:screenOrientation="portrait"
|
||||
android:label="@string/title_activity_paihangbang"
|
||||
android:parentActivityName=".Main2Activity"
|
||||
android:theme="@style/ToolBarTheme.NoActionBar" />
|
||||
<activity
|
||||
android:name=".Activity_ChgSource"
|
||||
android:screenOrientation="portrait"
|
||||
android:label="@string/title_Activity_ChgSource" />
|
||||
<activity
|
||||
android:name=".BookActivity"
|
||||
android:label="@string/title_activity_book"
|
||||
android:launchMode="singleTask"
|
||||
android:screenOrientation="portrait"
|
||||
android:launchMode="standard"
|
||||
android:theme="@style/ToolBarTheme.NoActionBar" />
|
||||
<activity
|
||||
android:name=".ReadActivity"
|
||||
android:label="@string/app_name"
|
||||
android:screenOrientation="portrait"
|
||||
android:launchMode="singleTask"
|
||||
android:theme="@style/ToolBarTheme.NoActionBar" />
|
||||
<activity
|
||||
android:name=".Main2Activity"
|
||||
|
||||
android:launchMode="singleTop"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/ToolBarTheme.NoActionBar">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".FileActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/ToolBarTheme.NoActionBar" />
|
||||
<activity
|
||||
android:name=".MarkActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/ToolBarTheme.NoActionBar" />
|
||||
<activity
|
||||
android:name=".filechooser.FileChooserActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/ToolBarTheme.NoActionBar" />
|
||||
<activity
|
||||
android:name=".Activity_cache"
|
||||
android:screenOrientation="portrait"
|
||||
android:label="@string/title_download"
|
||||
android:theme="@style/ToolBarTheme.NoActionBar" />
|
||||
<activity
|
||||
android:name=".AD.AdvertisementViewActivity"
|
||||
android:label="@string/title_download"
|
||||
android:screenOrientation="portrait"
|
||||
android:label="@string/title_ad"
|
||||
android:theme="@style/ToolBarTheme.NoActionBar" />
|
||||
<activity
|
||||
android:name=".ActivitySetup"
|
||||
android:screenOrientation="portrait"
|
||||
android:label="@string/title_setup"
|
||||
android:theme="@style/ToolBarTheme.NoActionBar" />
|
||||
|
||||
<service
|
||||
android:name=".service.ServiceDownload"
|
||||
android:exported="false" /> <!-- qq ad -->
|
||||
<service
|
||||
android:exported="false" />
|
||||
<!-- qq ad -->
|
||||
<!-- <service
|
||||
android:name="com.qq.e.comm.DownloadService"
|
||||
android:exported="false" />
|
||||
|
||||
|
@ -108,7 +121,7 @@
|
|||
|
||||
<uses-library
|
||||
android:name="org.apache.http.legacy"
|
||||
android:required="false" />
|
||||
android:required="false" />-->
|
||||
|
||||
<provider
|
||||
android:name="android.support.v4.content.FileProvider"
|
||||
|
@ -119,6 +132,38 @@
|
|||
android:name="android.support.FILE_PROVIDER_PATHS"
|
||||
android:resource="@xml/gdt_file_path" />
|
||||
</provider> <!-- qq ad end -->
|
||||
|
||||
<!-- chuanshanjia ad -->
|
||||
<activity
|
||||
android:name=".AD.toutiao.SplashActivity"
|
||||
android:configChanges="keyboard|orientation|screenSize"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/Theme.Splash">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<uses-library
|
||||
android:name="org.apache.http.legacy"
|
||||
android:required="false" />
|
||||
|
||||
<provider
|
||||
android:name="com.bytedance.sdk.openadsdk.TTFileProvider"
|
||||
android:authorities="${applicationId}.TTFileProvider"
|
||||
android:exported="false"
|
||||
android:grantUriPermissions="true">
|
||||
<meta-data
|
||||
android:name="android.support.FILE_PROVIDER_PATHS"
|
||||
android:resource="@xml/file_paths" />
|
||||
</provider>
|
||||
<provider
|
||||
android:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider"
|
||||
android:authorities="${applicationId}.TTMultiProvider"
|
||||
android:exported="false" />
|
||||
<!-- chuanshanjia ad end-->
|
||||
<!--
|
||||
<provider
|
||||
android:name="android.support.v4.content.FileProvider"
|
||||
|
|
|
@ -47,7 +47,7 @@ public class Activity_ChgSource extends Activity_base {
|
|||
PageFactory pageFactory;
|
||||
boolean isFromCate;
|
||||
List<Site> 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<Site>();
|
||||
pageFactory =PageFactory.getInstance(getApplicationContext());
|
||||
new Thread() {
|
||||
@Override
|
||||
public void run() {
|
||||
super.run();
|
||||
while(pageFactory.getNovelSites()==null){
|
||||
try {
|
||||
Thread.sleep(100);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
mSites = new ArrayList<Site>(Arrays.asList(pageFactory.getNovelSites().getSites()));
|
||||
SiteAdapter mAdapter = new SiteAdapter(this, mSites, R.layout.recycle_list_one_item, new OnItemClickListener() {
|
||||
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<Site> mSites) {
|
||||
mDatas = mSites;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public class SiteViewHolder extends RecyclerView.ViewHolder {
|
||||
|
||||
@BindView(R.id.tvText)
|
||||
|
|
|
@ -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<Activity> 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<TTNativeAd> 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<View> clickViewList = new ArrayList<>();
|
||||
clickViewList.add(nativeView);
|
||||
|
||||
//触发创意广告的view(点击下载或拨打电话)
|
||||
List<View> 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("点击安装");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -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<DownloadTask> 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<DownloadTask>(){
|
||||
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<CacheAdapter.MyViewHolder> {
|
||||
class CacheAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||
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<DownloadTask> mDatas = new ArrayList<DownloadTask>();
|
||||
private OnItemClickLitener mOnItemClickLitener;
|
||||
private int listItemID;
|
||||
private String norecord ="还没有下载记录";
|
||||
|
||||
public CacheAdapter(Context context, List<DownloadTask> 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()));
|
||||
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;
|
||||
|
||||
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( "下载完成");
|
||||
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);
|
||||
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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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<error_try_max){
|
||||
error_try++;
|
||||
initData();
|
||||
}else {
|
||||
handler.sendEmptyMessage(msg);
|
||||
}
|
||||
}
|
||||
void initRetryCnt(){
|
||||
error_try=0;
|
||||
}
|
||||
|
||||
//---------toutiao ad------
|
||||
public void showBanner(FrameLayout bannerContainer , int adHeight ) {
|
||||
if(bannerContainer==null){
|
||||
return;
|
||||
}
|
||||
bannerContainer.setVisibility(View.GONE);
|
||||
if (!Constants.SHOWAD) {
|
||||
return;
|
||||
}
|
||||
|
||||
((Main2Activity) activity).loadBannerAd(bannerContainer, BuildConfig.AD_SLOT_TOUTIAO_BANNER_ID, Constants.SCREEN_WIDTH_PIX, adHeight);
|
||||
mBannerContainer.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@ import com.novelbook.android.adapter.MarkAdapter;
|
|||
import com.novelbook.android.db.BookMarks;
|
||||
import com.novelbook.android.db.Novel;
|
||||
import com.novelbook.android.utils.PageFactory;
|
||||
import com.umeng.analytics.MobclickAgent;
|
||||
|
||||
import org.litepal.LitePal;
|
||||
|
||||
|
@ -176,4 +177,15 @@ public class BookMarkFragment extends BasicFragment implements MarkActivity.Sor
|
|||
public void refresh() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
MobclickAgent.onPageStart(TAG);
|
||||
}
|
||||
@Override
|
||||
public void onPause(){
|
||||
super.onPause();
|
||||
MobclickAgent.onPageEnd(TAG);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,6 +24,7 @@ import com.novelbook.android.db.DownloadTask;
|
|||
import com.novelbook.android.db.Novel;
|
||||
import com.novelbook.android.netutils.NetUtil;
|
||||
import com.novelbook.android.utils.PageFactory;
|
||||
import com.umeng.analytics.MobclickAgent;
|
||||
|
||||
|
||||
import org.litepal.LitePal;
|
||||
|
@ -285,4 +286,15 @@ public class CatalogFragment extends BasicFragment implements MarkActivity.Sortc
|
|||
public void refresh() {
|
||||
refresh(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
MobclickAgent.onPageStart(TAG);
|
||||
}
|
||||
@Override
|
||||
public void onPause(){
|
||||
super.onPause();
|
||||
MobclickAgent.onPageEnd(TAG);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,6 +27,7 @@ import com.novelbook.android.netutils.OnSuccessAndFaultListener;
|
|||
import com.novelbook.android.netutils.OnSuccessAndFaultSub;
|
||||
import com.novelbook.android.utils.Constants;
|
||||
import com.novelbook.android.utils.ImageUtil;
|
||||
import com.umeng.analytics.MobclickAgent;
|
||||
|
||||
import org.json.JSONObject;
|
||||
|
||||
|
@ -57,7 +58,8 @@ public class FragmentCates extends BasicFragment {
|
|||
BookSubscribe.getCates(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 {
|
||||
JSONObject jsonObject = new JSONObject(result);
|
||||
|
@ -75,8 +77,8 @@ public class FragmentCates extends BasicFragment {
|
|||
@Override
|
||||
public void onFault(String errorMsg) {
|
||||
//失败
|
||||
Log.d(TAG, "error on get firstpage: " + errorMsg);
|
||||
handler.sendEmptyMessage(2);
|
||||
// Log.d(TAG, String.format("init data HttpMethods error on init, trycnt %s " ,error_try ));
|
||||
retryErorr(2);
|
||||
}
|
||||
}, getActivity()));
|
||||
|
||||
|
@ -295,4 +297,17 @@ public class FragmentCates extends BasicFragment {
|
|||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
|
||||
MobclickAgent.onPageStart(TAG);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause(){
|
||||
super.onPause();
|
||||
MobclickAgent.onPageEnd(TAG);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,11 +19,15 @@ import android.view.ViewGroup;
|
|||
import android.widget.Button;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.androidquery.callback.AQuery2;
|
||||
import com.novelbook.android.AD.toutiao.TTAdManagerHolder;
|
||||
import com.novelbook.android.BuildConfig;
|
||||
import com.novelbook.android.Main2Activity;
|
||||
import com.novelbook.android.R;
|
||||
import com.novelbook.android.db.Chapter;
|
||||
|
@ -44,6 +48,7 @@ import com.novelbook.android.utils.ImageUtil;
|
|||
import com.novelbook.android.utils.MyImageLoader;
|
||||
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;
|
||||
|
@ -64,9 +69,9 @@ import okhttp3.ResponseBody;
|
|||
|
||||
|
||||
public class Fragment_Shelf extends BasicFragment {
|
||||
public static final String TAG=Fragment_Shelf.class.getSimpleName();
|
||||
private boolean[] flag ;//此处添加一个boolean类型的数组
|
||||
private boolean isSelectAll =true;
|
||||
public static final String TAG = Fragment_Shelf.class.getSimpleName();
|
||||
private boolean[] flag;//此处添加一个boolean类型的数组
|
||||
private boolean isSelectAll = true;
|
||||
private MyImageLoader loader = new MyImageLoader();
|
||||
@BindView(R.id.llShelfBottom)
|
||||
LinearLayout llShelfBottom;
|
||||
|
@ -77,8 +82,12 @@ public class Fragment_Shelf extends BasicFragment {
|
|||
List<Novel> lstUpdate = new ArrayList<Novel>();
|
||||
private List<Novel> bookLists;
|
||||
// private ShelfAdapter adapter;
|
||||
private String noveIds ;
|
||||
private String noveIds;
|
||||
BottomSheetDialog bottomSheetDialog;
|
||||
|
||||
@BindView(R.id.banner_container)
|
||||
FrameLayout mBannerContainer;
|
||||
|
||||
public Fragment_Shelf() {
|
||||
// Required empty public constructor
|
||||
}
|
||||
|
@ -92,17 +101,18 @@ 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")
|
||||
|
@ -110,12 +120,11 @@ void test(int maxAge){
|
|||
.header("Cache-Control", "public, max-age=" + maxAge)
|
||||
.build();
|
||||
|
||||
if(maxAge==-1){
|
||||
request = new Request.Builder().url(url) .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) {
|
||||
|
@ -131,7 +140,7 @@ void test(int maxAge){
|
|||
});
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getLayoutRes() {
|
||||
|
@ -141,7 +150,7 @@ void test(int maxAge){
|
|||
/**
|
||||
* to get updated info from server,TODO: put it in service ,scheduled
|
||||
*/
|
||||
private void getUpdatedData(){
|
||||
private void getUpdatedData() {
|
||||
|
||||
|
||||
List<Integer> novelIds;
|
||||
|
@ -152,8 +161,8 @@ void test(int maxAge){
|
|||
// 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);
|
||||
}
|
||||
|
||||
|
@ -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()
|
||||
{
|
||||
mAdapter = new BookListAdapter(activity, bookLists, R.layout.recycle_list_item, new OnItemClickListener() {
|
||||
private long lastTimeMillis;
|
||||
private static final long MIN_CLICK_INTERVAL =1000;
|
||||
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) {
|
||||
|
||||
}
|
||||
});
|
||||
|
@ -252,8 +258,9 @@ void test(int maxAge){
|
|||
|
||||
((Main2Activity) activity).setShelfFragment(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
void initSwipeRefreshLayout(){
|
||||
void initSwipeRefreshLayout() {
|
||||
super.initSwipeRefreshLayout();
|
||||
mSwipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
|
||||
@Override
|
||||
|
@ -261,26 +268,29 @@ void test(int maxAge){
|
|||
|
||||
// 开始刷新,设置当前为刷新状态
|
||||
//swipeRefreshLayout.setRefreshing(true);
|
||||
pageNo=1;
|
||||
pageNo = 1;
|
||||
getUpdatedData();
|
||||
// TODO 获取数据
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initViews(){
|
||||
public void initViews() {
|
||||
|
||||
initReceyleView();
|
||||
|
||||
}
|
||||
protected void processArguments(){
|
||||
|
||||
protected void processArguments() {
|
||||
if (getArguments() != null) {
|
||||
Bundle bundle = getArguments() ;
|
||||
|
||||
Bundle bundle = getArguments();
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void fillData() {
|
||||
|
||||
|
@ -291,14 +301,14 @@ void test(int maxAge){
|
|||
public void initReceyleView() {
|
||||
// initData();
|
||||
// mRecyclerView.setLayoutManager(new LinearLayoutManager(this.activity));
|
||||
mRecyclerView.setLayoutManager(new GridLayoutManager(activity,3));
|
||||
mRecyclerView.setAdapter(mAdapter );
|
||||
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)
|
||||
|
@ -331,11 +341,11 @@ void test(int maxAge){
|
|||
});
|
||||
|
||||
|
||||
|
||||
bottomSheetDialog.show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data){
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
// bookLists = LitePal.findAll(Novel.class);
|
||||
// mAdapter.notifyDataSetChanged();
|
||||
initViews();
|
||||
|
@ -359,27 +369,27 @@ 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())
|
||||
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);
|
||||
TextView tvCache = (TextView) bottomSheetDialog.findViewById(R.id.tvCache);
|
||||
|
||||
tvCache.setText(FileUtils.getCacheSizeK(bookLists.get(position).getId()));
|
||||
|
||||
if(!bookLists.get(position).isLocalBook()) {
|
||||
if (!bookLists.get(position).isLocalBook()) {
|
||||
LinearLayout llClearCache = (LinearLayout) bottomSheetDialog.findViewById(R.id.llClearCache);
|
||||
|
||||
llClearCache.setOnClickListener(new View.OnClickListener() {
|
||||
|
@ -392,38 +402,38 @@ void test(int maxAge){
|
|||
|
||||
}
|
||||
});
|
||||
}else{
|
||||
} 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()){
|
||||
if (bookLists.get(position).isTop()) {
|
||||
bookLists.get(position).setToDefault("isTop");
|
||||
tvTop.setText("置顶显示");
|
||||
imgTop.setImageResource(R.mipmap.star_active);
|
||||
|
||||
}else{
|
||||
} 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);
|
||||
|
@ -433,10 +443,6 @@ void test(int maxAge){
|
|||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
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++) {
|
||||
flag[i] = isSelectAll;
|
||||
}
|
||||
isSelectAll =!isSelectAll;
|
||||
isSelectAll = !isSelectAll;
|
||||
mChkAdapter.notifyDataSetChanged();
|
||||
}else if(view.getId()== R.id.btnDelete){
|
||||
} else if (view.getId() == R.id.btnDelete) {
|
||||
List<Integer> toRemove = new ArrayList<Integer>();
|
||||
for (int i = 0; i < bookLists.size(); i++) {
|
||||
if(flag[i] ){
|
||||
if (flag[i]) {
|
||||
Novel nv = bookLists.get(i);
|
||||
if(nv.isLocalBook())
|
||||
{
|
||||
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{
|
||||
} else {
|
||||
Log.d(TAG, "shelfZhengliSubmit: to delete novel " + nv.getName());
|
||||
nv.setToDefault("isOnShelf");
|
||||
nv.setToDefault("isTop");
|
||||
|
@ -494,7 +498,7 @@ void test(int maxAge){
|
|||
}
|
||||
}
|
||||
*/
|
||||
bookLists =Novel.getNovelsOnShelf();
|
||||
bookLists = Novel.getNovelsOnShelf();
|
||||
flag = new boolean[bookLists.size()];
|
||||
zhengliShelf();
|
||||
initData();
|
||||
|
@ -504,50 +508,37 @@ void test(int maxAge){
|
|||
}
|
||||
|
||||
|
||||
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;
|
||||
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<Novel> mDatas = new ArrayList<Novel>();
|
||||
private OnItemClickListener mOnItemClickListener;
|
||||
private int listItemID;
|
||||
public CheckAdapter(Context context,List<Novel> mDatas,int listItemID,OnItemClickListener clickLitener) {
|
||||
|
||||
public CheckAdapter(Context context, List<Novel> 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<Novel> mDatas,int listItemID ) {
|
||||
public void setParameters(List<Novel> 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,10 +645,10 @@ void test(int maxAge){
|
|||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount()
|
||||
{
|
||||
public int getItemCount() {
|
||||
return mDatas.size();
|
||||
}
|
||||
|
||||
public void addData(int position) {
|
||||
// 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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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,9 +140,15 @@ public class Fragment_bangdan extends BasicFragment {
|
|||
@Override
|
||||
public void onFault(String errorMsg) {
|
||||
//失败
|
||||
Log.d(TAG, "error on : " + errorMsg);
|
||||
|
||||
Log.d(TAG, String.format("init data HttpMethods error on init, trycnt %s " ,error_try ));
|
||||
if(error_try<error_try_max){
|
||||
error_try++;
|
||||
initData();
|
||||
}else {
|
||||
handler.sendEmptyMessage(1);
|
||||
}
|
||||
}
|
||||
}, getActivity()));
|
||||
|
||||
|
||||
|
@ -166,6 +174,15 @@ public class Fragment_bangdan extends BasicFragment {
|
|||
public void setFTag() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
MobclickAgent.onPageStart(TAG);
|
||||
}
|
||||
@Override
|
||||
public void onPause(){
|
||||
super.onPause();
|
||||
MobclickAgent.onPageEnd(TAG);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@ import com.novelbook.android.netutils.OnSuccessAndFaultListener;
|
|||
import com.novelbook.android.netutils.OnSuccessAndFaultSub;
|
||||
import com.novelbook.android.utils.Constants;
|
||||
import com.novelbook.android.utils.GsonUtil;
|
||||
import com.umeng.analytics.MobclickAgent;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
@ -157,6 +158,8 @@ public class Fragment_bangdans extends BasicFragment {
|
|||
BookSubscribe.getPaihangBangCateList(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;
|
||||
try {
|
||||
|
||||
mCateList = GsonUtil.parserBangdanCate(result,"subCategories");
|
||||
|
@ -174,12 +177,21 @@ public class Fragment_bangdans extends BasicFragment {
|
|||
@Override
|
||||
public void onFault(String errorMsg) {
|
||||
//失败
|
||||
Log.d(TAG, "error on get firstpage: " + errorMsg);
|
||||
// Log.d(TAG, String.format("init data HttpMethods error on init, trycnt %s " ,error_try ));
|
||||
// getSearchTabTtitle();
|
||||
handler.sendEmptyMessage(0);
|
||||
retryErorr(0);
|
||||
}
|
||||
},getActivity()));
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
MobclickAgent.onPageStart(TAG);
|
||||
}
|
||||
@Override
|
||||
public void onPause(){
|
||||
super.onPause();
|
||||
MobclickAgent.onPageEnd(TAG);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@ import android.view.View;
|
|||
|
||||
import com.novelbook.android.R;
|
||||
import com.flyco.tablayout.SlidingTabLayout;
|
||||
import com.umeng.analytics.MobclickAgent;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
@ -28,7 +29,7 @@ public class Fragment_bookStore extends BasicFragment {
|
|||
SlidingTabLayout tabLayout;
|
||||
private FragmentStatePagerAdapter mAdapter =null;
|
||||
private ArrayList<BasicFragment> mFragments;
|
||||
private ArrayList<BasicFragment> mFragments_cp;
|
||||
// private ArrayList<BasicFragment> mFragments_cp;
|
||||
ArrayList<View> 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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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<Activity> getActivityList(){
|
||||
return oList;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
@ -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();
|
||||
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);
|
||||
llTopAd.setLayoutParams(params);
|
||||
llTopAd.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
|
||||
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<TTNativeAd> 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<View> clickViewList = new ArrayList<>();
|
||||
clickViewList.add(nativeView);
|
||||
|
||||
//触发创意广告的view(点击下载或拨打电话)
|
||||
List<View> 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("点击安装");
|
||||
}
|
||||
}
|
||||
};*/
|
||||
|
||||
}
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
i++;
|
||||
/* 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()));
|
||||
|
|
|
@ -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 = {};
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
After Width: | Height: | Size: 4.5 KiB |
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="@color/white"/>
|
||||
</shape>
|
||||
</item>
|
||||
<!-- <item android:bottom="25dp">
|
||||
<bitmap
|
||||
android:gravity="bottom|center_horizontal"
|
||||
android:src="@drawable/toutiao_splash_banner"/>
|
||||
</item>-->
|
||||
</layer-list>
|
|
@ -41,13 +41,18 @@
|
|||
android:text="@string/title_anounce"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
style="@style/buttonRightMore"
|
||||
android:text="详细"
|
||||
android:gravity="center_vertical"
|
||||
android:layout_marginRight="5dp"
|
||||
/>
|
||||
<TextView
|
||||
style="@style/tvRightMore"
|
||||
android:textSize="20sp"
|
||||
android:text=">"
|
||||
|
||||
android:text=" "
|
||||
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<View style="@style/llGraySplit.2dp.gray" />
|
||||
|
@ -64,7 +69,7 @@
|
|||
<TextView
|
||||
style="@style/NovelBlockTitle"
|
||||
android:id="@+id/tvVersion"
|
||||
android:text="1234455 "
|
||||
|
||||
android:gravity="right"
|
||||
android:layout_marginRight="5dp"
|
||||
/>
|
||||
|
@ -89,7 +94,7 @@
|
|||
<TextView
|
||||
style="@style/NovelBlockTitle"
|
||||
android:id="@+id/tvCache"
|
||||
android:text="1234455 "
|
||||
|
||||
android:gravity="right"
|
||||
android:layout_marginRight="5dp"
|
||||
/>
|
||||
|
|
|
@ -22,22 +22,30 @@
|
|||
</android.support.v7.widget.Toolbar>
|
||||
|
||||
</android.support.design.widget.AppBarLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:layout_marginTop="50dp"
|
||||
>
|
||||
<TextView
|
||||
android:layout_marginStart="@dimen/_20dp"
|
||||
android:id="@+id/tvMsg"
|
||||
android:textColor="@color/red"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/noRecord"
|
||||
|
||||
/>
|
||||
|
||||
|
||||
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/recycleView"
|
||||
style="@style/llOutside"
|
||||
android:layout_marginTop="50dp"
|
||||
android:layout_marginTop="5dp"
|
||||
android:divider="@color/list_item_divider"
|
||||
>
|
||||
</android.support.v7.widget.RecyclerView>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</android.support.design.widget.CoordinatorLayout>
|
|
@ -0,0 +1,18 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:background="#000000"
|
||||
tools:context=".AD.toutiao.SplashActivity">
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/splash_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="#000000"
|
||||
>
|
||||
</FrameLayout>
|
||||
</LinearLayout>
|
|
@ -0,0 +1,74 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_native_ad_title"
|
||||
android:layout_width="200dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="10dp"
|
||||
android:singleLine="true"
|
||||
android:textSize="14sp" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/iv_native_image"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/tv_native_ad_title"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:layout_marginLeft="10dp"
|
||||
android:layout_marginRight="10dp"
|
||||
android:scaleType="centerCrop" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/iv_native_icon"
|
||||
android:layout_width="15dp"
|
||||
android:layout_height="15dp"
|
||||
android:layout_below="@id/iv_native_image"
|
||||
android:layout_marginLeft="3dp"
|
||||
android:layout_marginStart="3dp" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/tv_source_desc_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:layout_below="@id/iv_native_image"
|
||||
android:layout_toRightOf="@id/iv_native_icon"
|
||||
android:layout_toEndOf="@id/iv_native_icon"
|
||||
tools:ignore="UseCompoundDrawables">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_native_ad_desc"
|
||||
android:layout_width="100dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:layout_marginLeft="5dp"
|
||||
android:layout_marginStart="5dp"
|
||||
android:layout_marginTop="15dp"
|
||||
android:ellipsize="end"
|
||||
android:singleLine="true"
|
||||
android:textSize="14sp" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/img_native_dislike"
|
||||
android:layout_width="20dp"
|
||||
android:layout_height="20dp"
|
||||
android:background="@drawable/tt_dislike_icon" />
|
||||
</LinearLayout>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_native_creative"
|
||||
android:layout_width="90dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_marginRight="14dp"
|
||||
android:layout_marginEnd="14dp"
|
||||
android:layout_alignTop="@+id/tv_source_desc_layout"
|
||||
android:textSize="10sp"
|
||||
/>
|
||||
|
||||
</RelativeLayout>
|
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/screen"
|
||||
android:layout_width="fill_parent" android:layout_height="fill_parent"
|
||||
android:orientation="vertical">
|
||||
<TextView android:id="@+id/left_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentLeft="true"
|
||||
/>
|
||||
</RelativeLayout>
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
<!-- <LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="50dp"
|
||||
android:layout_gravity="bottom"
|
||||
|
@ -64,7 +64,7 @@
|
|||
android:layout_weight="1" />
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
</LinearLayout>-->
|
||||
|
||||
|
||||
<LinearLayout style="@style/llGraySplit" />
|
||||
|
@ -207,7 +207,10 @@
|
|||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<FrameLayout
|
||||
style="@style/frmBannerContainer"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/banner_container"/>
|
||||
<LinearLayout style="@style/llGraySplit" />
|
||||
|
||||
<!--
|
||||
|
@ -293,6 +296,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvTonglei"
|
||||
style="@style/NovelBlockTitle"
|
||||
|
|
|
@ -35,6 +35,8 @@
|
|||
app:tl_indicator_bounce_enable ="true"
|
||||
/>-->
|
||||
<!-- app:tl_indicator_color="@color/crimson" -->
|
||||
|
||||
|
||||
<android.support.v4.view.ViewPager
|
||||
android:paddingTop="20dp"
|
||||
android:paddingLeft="2dp"
|
||||
|
|
|
@ -1,11 +1,20 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
style="@style/llOutside"
|
||||
android:orientation="vertical"
|
||||
tools:context=".Fragments.FragmentCates">
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/banner_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="0"
|
||||
android:layout_centerInParent="true"
|
||||
android:background="#D5D5D5" />
|
||||
<android.support.v4.widget.SwipeRefreshLayout
|
||||
android:id="@+id/swipeLayout"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
@ -21,4 +30,4 @@
|
|||
/>
|
||||
</android.support.v4.widget.SwipeRefreshLayout>
|
||||
|
||||
</FrameLayout>
|
||||
</LinearLayout>
|
|
@ -7,12 +7,20 @@
|
|||
android:layout_marginRight="@dimen/marginRight"
|
||||
android:orientation="vertical">
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/banner_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerInParent="true"
|
||||
android:background="#D5D5D5" />
|
||||
|
||||
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
|
||||
android:orientation="vertical">
|
||||
|
||||
<android.support.v4.widget.SwipeRefreshLayout
|
||||
android:id="@+id/swipeLayout"
|
||||
android:layout_width="match_parent"
|
||||
|
@ -30,6 +38,7 @@
|
|||
|
||||
/>
|
||||
</android.support.v4.widget.SwipeRefreshLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/llShelfBottom"
|
||||
android:layout_width="match_parent"
|
||||
|
|
|
@ -27,8 +27,22 @@
|
|||
-->
|
||||
|
||||
<!-- TODO: Update blank fragment layout -->
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
>
|
||||
<FrameLayout
|
||||
android:id="@+id/banner_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="0"
|
||||
android:layout_centerInParent="true"
|
||||
android:background="@color/white" />
|
||||
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/rvBangdan"
|
||||
android:layout_weight="1"
|
||||
android:divider="#ffff0000"
|
||||
android:dividerHeight="5dp"
|
||||
android:layout_width="match_parent"
|
||||
|
@ -37,5 +51,5 @@
|
|||
android:paddingBottom="30dp"
|
||||
android:layout_marginBottom="-2dp"
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
</android.support.v4.widget.SwipeRefreshLayout>
|
|
@ -4,7 +4,12 @@
|
|||
xmlns:tools="http://schemas.android.com/tools"
|
||||
style="@style/llOutside.vertical"
|
||||
tools:context=".Fragments.Fragment_jingxuan">
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/banner_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerInParent="true"
|
||||
android:background="#D5D5D5" />
|
||||
<android.support.v4.widget.SwipeRefreshLayout
|
||||
android:id="@+id/swipeLayout"
|
||||
android:layout_width="match_parent"
|
||||
|
|
|
@ -17,15 +17,15 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:contentDescription="@string/nav_header_desc"
|
||||
android:paddingTop="@dimen/nav_header_vertical_spacing" android:visibility="gone"
|
||||
|
||||
app:srcCompat="@mipmap/ic_launcher" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvUser"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="@dimen/nav_header_vertical_spacing"
|
||||
android:text="欢迎您的光临"
|
||||
|
||||
android:text="@string/app_name"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:gravity="center_horizontal"
|
||||
android:textColor="@color/white"
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
android:layout_height="?attr/actionBarSize"
|
||||
android:background="?attr/colorPrimary"
|
||||
app:popupTheme="@style/AppTheme.PopupOverlay">
|
||||
<ImageButton
|
||||
<!--<ImageButton
|
||||
android:id="@+id/btnRefresh"
|
||||
android:layout_weight="0"
|
||||
android:layout_gravity ="right|center_vertical"
|
||||
|
@ -32,11 +32,11 @@
|
|||
android:id="@+id/btnSort"
|
||||
android:layout_weight="0"
|
||||
android:layout_gravity ="right|center_vertical"
|
||||
android:layout_marginRight="10dp"
|
||||
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:srcCompat="@drawable/ic_format_line_spacing_black_24dp"
|
||||
style="@style/buttonCates"/>
|
||||
style="@style/buttonCates"/>-->
|
||||
</android.support.v7.widget.Toolbar>
|
||||
</android.support.design.widget.AppBarLayout>
|
||||
|
||||
|
|
|
@ -45,8 +45,8 @@
|
|||
/>
|
||||
<pl.droidsonroids.gif.GifImageView
|
||||
android:id="@+id/imgLoading"
|
||||
android:layout_width="30dp"
|
||||
android:layout_height="30dp"
|
||||
android:layout_width="35dp"
|
||||
android:layout_height="35dp"
|
||||
android:src="@mipmap/loading"
|
||||
android:scaleType="centerCrop"
|
||||
android:layout_gravity="center"
|
||||
|
@ -64,7 +64,7 @@
|
|||
android:text="@string/refresh"
|
||||
android:visibility="gone"
|
||||
/>
|
||||
<LinearLayout
|
||||
<!-- <LinearLayout
|
||||
android:id="@+id/llTopAd"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="150dp"
|
||||
|
@ -72,15 +72,13 @@
|
|||
android:layout_marginTop="520dp"
|
||||
android:visibility="gone">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:src="@color/whitesmoke"
|
||||
android:scaleType="centerCrop"
|
||||
|
||||
android:contentDescription="TODO" />
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>-->
|
||||
<FrameLayout
|
||||
style="@style/frmBannerContainer"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/banner_container"
|
||||
/>
|
||||
</FrameLayout>
|
||||
|
||||
|
||||
|
|
|
@ -1,10 +1,23 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<item
|
||||
android:id="@+id/action_sort"
|
||||
android:orderInCategory="20"
|
||||
android:title=""
|
||||
android:icon= "@drawable/ic_format_line_spacing_black_24dp"
|
||||
app:showAsAction="always" />
|
||||
<item
|
||||
android:id="@+id/action_refresh"
|
||||
android:orderInCategory="30"
|
||||
android:title=""
|
||||
android:icon= "@drawable/ic_refresh_black_24dp"
|
||||
app:showAsAction="always" />
|
||||
<item
|
||||
android:id="@+id/action_change_source"
|
||||
android:title="@string/action_change_source"
|
||||
android:orderInCategory="90"
|
||||
android:icon= "@drawable/ic_call_split_black_24dp"
|
||||
android:orderInCategory="40"
|
||||
app:showAsAction="always" />
|
||||
|
||||
</menu>
|
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 7.8 KiB |
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 9.0 KiB |
|
@ -48,6 +48,7 @@
|
|||
<dimen name="_10dp">10dp</dimen>
|
||||
<dimen name="toolbarHeight">40dp</dimen>
|
||||
<dimen name="app_bar_height_250">240dp</dimen>
|
||||
<dimen name="_20dp">20dp</dimen>
|
||||
|
||||
|
||||
<!-- Default screen margins, per the Android Design guidelines. -->
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
<string name="title_activity_main5">Main5Activity</string>
|
||||
<string name="title_on_shelf">加入书架</string>
|
||||
<string name="title_read">立即阅读</string>
|
||||
<string name="title_download">下载管理</string>
|
||||
<string name="title_download">缓存管理</string>
|
||||
<string name="title_activity_paihangbang">榜</string>
|
||||
<string name="title_activity_main6">Main6Activity</string>
|
||||
<string name="section_format">Hello World from section: %1$d</string>
|
||||
|
@ -136,6 +136,8 @@
|
|||
<string name="title_setup">设置</string>
|
||||
<string name="title_annouce">免责声明</string>
|
||||
<string name="cache_novel">全本缓存</string>
|
||||
<string name="title_navi">如意阅读</string>
|
||||
<string name="title_ad">广告</string>
|
||||
|
||||
<string-array name="voicer_cloud_entries">
|
||||
<item>小燕—女青、中英、普通话</item>
|
||||
|
|
|
@ -23,6 +23,18 @@
|
|||
|
||||
</style>
|
||||
|
||||
<!-- toutiao chuanshanjia-->
|
||||
<style name="Theme.Light" parent="Theme.AppCompat.Light">
|
||||
<item name="android:windowBackground">@color/white</item>
|
||||
</style>
|
||||
<style name="Theme.Splash" parent="Theme.Light">
|
||||
<!--<item name="android:windowBackground">@drawable/toutiao_splash_banner</item>-->
|
||||
<item name="windowActionBar">false</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
<item name="windowNoTitle">true</item>
|
||||
</style>
|
||||
<!-- toutiao chuanshanjia end -->
|
||||
|
||||
<style name="ToolBarTheme.NoActionBar">
|
||||
<item name="windowActionBar">false</item>
|
||||
<item name="windowNoTitle">true</item>
|
||||
|
@ -433,7 +445,12 @@
|
|||
<item name="android:clickable">true</item>
|
||||
</style>
|
||||
|
||||
|
||||
<style name="frmBannerContainer">
|
||||
<item name="android:layout_width">match_parent</item>
|
||||
<item name="android:layout_height">50dp</item>
|
||||
<item name="android:layout_centerInParent">true</item>
|
||||
<item name="android:background">@color/transparent</item>
|
||||
</style>
|
||||
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<paths xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<external-files-path name="external_files_path" path="Download" />
|
||||
<!--为了适配所有路径可以设置 path = "." -->
|
||||
</paths>
|
|
@ -106,17 +106,13 @@
|
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/legacy_multidex_aapt_derived_proguard_rules" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/legacy_multidex_main_dex_list" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifest-checker" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged-not-compiled-resources" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged_assets" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged_manifests" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/metadata_feature_manifest" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/prebuild" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/processed_res" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/proguard-files" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/proguard-rules" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/reload-dex" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res_stripped" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/resources" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shader_assets" />
|
||||
|
@ -126,104 +122,102 @@
|
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/reports" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
|
||||
</content>
|
||||
<orderEntry type="jdk" jdkName="Android API 28 Platform" jdkType="Android SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:design:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: :open_ad_sdk:@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:support-fragment:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:localbroadcastmanager:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:animated-vector-drawable:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: jp.wasabeef:glide-transformations:2.0.1@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.github.bumptech.glide:annotations:4.9.0@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: android.arch.lifecycle:viewmodel:1.1.1@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: __local_aars__:E.\reading\android\asProjects\zhuike\libs\juniversalchardet-1.0.3.jar:unspecified@jar" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-idling-resource:3.0.2@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:loader:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: android.arch.core:runtime:1.1.1@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: android.arch.lifecycle:extensions:1.1.1@aar" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:runner:1.0.2@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.github.bumptech.glide:disklrucache:4.9.0@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: android.arch.lifecycle:livedata-core:1.1.1@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.packetzoom:pz-android-sdk:3.2.43@aar" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: com.squareup:javawriter:2.1.1@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:cursoradapter:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.github.bumptech.glide:gifdecoder:4.9.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.squareup.okio:okio:1.17.2@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.squareup.retrofit2:adapter-rxjava2:2.5.0@jar" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-core:3.0.2@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: android.arch.lifecycle:runtime:1.1.1@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:support-compat:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: __local_aars__:E.\reading\android\asProjects\zhuike\libs\galaxy-v2.0.jar:unspecified@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: __local_aars__:E.\reading\android\asProjects\zhuike\libs\android-query-full.0.26.7.jar:unspecified@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: q.rorbin:badgeview:1.1.2@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:cardview-v7:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.google.android.gms:play-services-audience:16.0.0@aar" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: javax.inject:javax.inject:1@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.astuetz:pagerslidingtabstrip:1.0.1@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.youth.banner:banner:1.4.10@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.github.chengzipi:Searchbox:v1.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.litepal.android:java:3.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:support-vector-drawable:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:support-core-utils:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:recyclerview-v7:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:monitor:1.0.2@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:support-annotations:28.0.0@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: __local_aars__:D.\android\sdk\build-tools\28.0.3\renderscript\lib\renderscript-v8.jar:unspecified@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: io.alterac.blurkit:blurkit:1.1.1@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:interpolator:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:transition:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: android.arch.lifecycle:livedata:1.1.1@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:drawerlayout:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.google.android.gms:play-services-plus:16.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.flyco.tablayout:FlycoTabLayout_Lib:2.1.2@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:support-v4:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support.constraint:constraint-layout-solver:1.1.3@jar" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: net.sf.kxml:kxml2:2.3.0@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: io.reactivex.rxjava2:rxandroid:2.1.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.google.code.gson:gson:2.8.5@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:multidex:1.0.2@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.litepal.android:core:3.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.reactivestreams:reactive-streams:1.0.2@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.timqi.collapsibletextview:library:1.1.2@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.squareup.retrofit2:converter-gson:2.5.0@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:support-core-ui:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.squareup.okhttp3:logging-interceptor:3.14.0@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.umeng.umsdk:common:2.0.2@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:asynclayoutinflater:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support.constraint:constraint-layout:1.1.3@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.github.bumptech.glide:glide:4.9.0@aar" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: com.google.code.findbugs:jsr305:2.0.1@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: android.arch.core:common:1.1.1@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.squareup.retrofit2:retrofit:2.5.0@jar" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-core:1.3@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:viewpager:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: __local_aars__:E.\reading\android\asProjects\zhuike\libs\GDTSDK.union.4.40.910.jar:unspecified@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: pl.droidsonroids.gif:android-gif-drawable:1.2.16@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.google.android.gms:play-services-basement:16.0.1@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.github.ixiaow:multilayout:1.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: android.arch.lifecycle:common:1.1.1@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:customview:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:design:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:support-fragment:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:animated-vector-drawable:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: jp.wasabeef:glide-transformations:2.0.1@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.github.bumptech.glide:annotations:4.9.0@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: android.arch.lifecycle:viewmodel:1.1.1@aar" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-idling-resource:3.0.2@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: android.arch.core:runtime:1.1.1@aar" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:runner:1.0.2@aar" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: com.squareup:javawriter:2.1.1@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.squareup.okio:okio:1.17.2@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: q.rorbin:badgeview:1.1.2@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:cardview-v7:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.google.android.gms:play-services-audience:16.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.astuetz:pagerslidingtabstrip:1.0.1@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.youth.banner:banner:1.4.10@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.github.chengzipi:Searchbox:v1.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:support-vector-drawable:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:support-core-utils:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:monitor:1.0.2@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: io.alterac.blurkit:blurkit:1.1.1@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:interpolator:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:transition:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: android.arch.lifecycle:livedata:1.1.1@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:drawerlayout:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.umeng.umsdk:analytics:8.0.2@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.jakewharton:butterknife-annotations:9.0.0@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:documentfile:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.jakewharton:butterknife:9.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.google.code.gson:gson:2.8.5@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:slidingpanelayout:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: __local_aars__:E.\reading\android\asProjects\zhuike\libs\Msc.jar:unspecified@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:appcompat-v7:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.squareup.okhttp3:okhttp:3.14.0@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:multidex:1.0.2@aar" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support:multidex-instrumentation:1.0.2@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.litepal.android:core:3.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.reactivestreams:reactive-streams:1.0.2@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.packetzoom:pz-okhttp3-interceptor:3.2.43@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: io.reactivex.rxjava2:rxjava:2.2.7@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:collections:28.0.0@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.timqi.collapsibletextview:library:1.1.2@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.squareup.retrofit2:converter-gson:2.5.0@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:support-core-ui:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.umeng.umsdk:common:2.0.2@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.squareup.okhttp3:logging-interceptor:3.14.0@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:asynclayoutinflater:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support.constraint:constraint-layout:1.1.3@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:print:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.jakewharton:butterknife-runtime:9.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.github.bumptech.glide:glide:4.9.0@aar" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: com.google.code.findbugs:jsr305:2.0.1@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: android.arch.core:common:1.1.1@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:versionedparcelable:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.google.android.gms:play-services-base:16.0.1@aar" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: junit:junit:4.12@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.squareup.retrofit2:retrofit:2.5.0@jar" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-core:1.3@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:viewpager:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.google.android.gms:play-services-basement:16.0.1@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: pl.droidsonroids.gif:android-gif-drawable:1.2.16@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.github.ixiaow:multilayout:1.0.0@aar" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-integration:1.3@jar" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-library:1.3@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: android.arch.lifecycle:common:1.1.1@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:coordinatorlayout:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:customview:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:swiperefreshlayout:28.0.0@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: q.rorbin:VerticalTabLayout:1.2.5@aar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:support-media-compat:28.0.0@aar" level="project" />
|
||||
|
|