修正url过滤问题

This commit is contained in:
mwang 2019-07-05 23:21:37 +08:00
parent fcb43d9a33
commit c92fd2e52d
15 changed files with 315 additions and 279 deletions

View File

@ -17,8 +17,8 @@ android {
// applicationId "com.zhushou.yueshu"
minSdkVersion 19 //target 19 Android 4.4 4.1%
targetSdkVersion 28
versionCode 1
versionName "v1.0"
versionCode 6
versionName "v6.0"
// testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
@ -62,7 +62,7 @@ android {
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
// versionCode 1
// versionName "v1.0"
applicationVariants.all { variant ->
/* applicationVariants.all { variant ->
variant.outputs.all { output ->
def outFile = output.outputFile
if (outFile != null && outFile.name.endsWith(".apk")) {
@ -71,21 +71,24 @@ android {
outputFileName = fileName;
}
}
}
}*/
signingConfig signingConfigs.releaseConfig
}
}
//
productFlavors {
// googleplay {}
g {
/* g {
applicationId "com.zhushou.yueshu"
versionName "v1.0"
buildConfigField "String", "MAIN_HOST", '"http://g.xiaoshuofenxiang.com/api/"'
buildConfigField "String", "API_HOST", '""'
}
//
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}*/
/* google {
applicationId "com.zhushou.yueshu"
versionName "v1.0"
@ -93,10 +96,7 @@ android {
buildConfigField "String", "API_HOST", '""'
}*/
//
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
android {

View File

@ -197,8 +197,8 @@
<meta-data
android:name="UMENG_APPKEY"
android:value="5cd6238a570df375c3000cc9" /> <!-- <meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}"/> -->
<!--<meta-data android:name="UMENG_CHANNEL" android:value="debug" />-->
<meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}" />
<meta-data android:name="UMENG_CHANNEL" android:value="debug" />
<!--<meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}" />-->
<!-- google ad-->
<!-- Sample AdMob App ID: ca-app-pub-3940256099942544~3347511713 -->
<meta-data

View File

@ -9,6 +9,7 @@ import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.TextureView;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
@ -95,7 +96,17 @@ public class Activity_ChgSource extends Activity_base {
e.printStackTrace();
}
}
mSites = new ArrayList<Site>(Arrays.asList(pageFactory.getNovelSites().getSites()));
ArrayList<Site> tmp = new ArrayList<Site>(Arrays.asList(pageFactory.getNovelSites().getSites()));
for(Site site : tmp){
if(!TextUtils.isEmpty(site.getMuluUrl())){
mSites.add(site);
}
}
handler.sendEmptyMessage(1);
}}.start();;

View File

@ -334,11 +334,11 @@ public class CatalogFragment extends BasicFragment implements MarkActivity.Sortc
public void hideProgressSelf() {
Log.d(TAG, "prepare book hideProgress2 called" );
try{
/* try{
throw new Exception("who dismissed");
}catch (Exception e){
Log.e(TAG, "prepare book hideProgress2: ", e);
}
}*/
if (mProgressDialog2 == null)
return;

View File

@ -205,7 +205,7 @@ public class Fragment_Shelf extends BasicFragment {
@Override
public void onFault(String errorMsg) {
//失败
Log.d(TAG, "error on get firstpage: " + errorMsg);
Log.d(TAG, "error on get novel update list: " + errorMsg);
handler.sendEmptyMessage(1);
}
};
@ -793,6 +793,7 @@ public class Fragment_Shelf extends BasicFragment {
public void onResume() {
super.onResume();
getUpdatedData();
if (bottomSheetDialog != null) {
bottomSheetDialog.hide();
}

View File

@ -341,15 +341,15 @@ public void testUpdate(){
lastUpdateTime - nv.lastUpdateTime
) );
// isUpdated = isUpdated && !(!TextUtils.isEmpty(chapterName) && !TextUtils.isEmpty(nv.chapterName) && (chapterName.equals(nv.lastReadChaptName) ));
// boolean isLastReadchaptUpdated = !TextUtils.isEmpty(chapterName) && !TextUtils.isEmpty(nv.lastReadChaptName) && !(chapterName.equals(nv.lastReadChaptName));
boolean isLastReadchaptUpdated = TextUtils.isEmpty(nv.lastReadChaptName) || !(chapterName.equals(nv.lastReadChaptName)); //没看过最新章节
/* boolean isLastReadchaptUpdated = TextUtils.isEmpty(nv.lastReadChaptName) || !(chapterName.equals(nv.lastReadChaptName)); //没看过最新章节
boolean isLastChaptUpdated = !TextUtils.isEmpty(chapterName) && !TextUtils.isEmpty(nv.chapterName) && !(chapterName.equals(nv.chapterName));
Log.d("Novel", String.format( " server lastUpdateTime ,server chaptername %s,chaptername %s,lastreadchapt %s" , chapterName,nv.chapterName,nv.lastReadChaptName ) );
isUpdated = isUpdated && isLastReadchaptUpdated || isLastChaptUpdated ;
Log.d("Novel", String.format( " isupdated %s, server lastUpdateTime isLastReadchaptUpdated %s,isLastChaptUpdated %s" ,isUpdated,isLastReadchaptUpdated,isLastChaptUpdated ) );
*/
if(!isUpdated){
setToDefault("isUpdated");
}

View File

@ -249,30 +249,48 @@ public class BookUtil {
Log.d(TAG, String.format("prepare book %s get novel sites count %s .",mNovel.getName(), nvs.getSites().length) );
if(nvs.getSites().length ==0){
throw new RuntimeException("书本错误 code 001"); //无目标网站
throw new RuntimeException("书本错误 no site, code 001"); //无目标网站
// return;
}
mSite =null;
if(nvs.getSites().length > 0){
for (Site site:nvs.getSites() ) {
if(TextUtils.isEmpty(site.getMuluUrl())){
continue;
}
if(!TextUtils.isEmpty(mNovel.getDomain()) && site.getDomain().equals(mNovel.getDomain())){
mSite = site;
break;
}
}
if(mSite ==null)
if(mSite ==null) {
for (Site site : nvs.getSites()) {
if(TextUtils.isEmpty(site.getMuluUrl())){
continue;
}
if (site.getSelectedByDefault()) {
mSite = site;
break;
}
}
if(mSite ==null)
mSite =nvs.getSites()[0];
}
if(mSite ==null) {
for (Site site : nvs.getSites()) {
if(TextUtils.isEmpty(site.getMuluUrl())){
continue;
}
mSite = site;
break;
}
}
}
if(mSite!=null) {
getSiteRule();
}
}
private void setSiteInfo() {
@ -865,6 +883,10 @@ int muluRetryCount =0;
}
String url = mSite.getMuluUrl();
int maxAge= isForceRefresh ?0 : mNovel.getMaxAge();
if(!isHttpOrHttps(url)){
return ;
}
Request request = getTagRequest(url,REUtil.getDomain(url),maxAge);
mMuluStatus = MuluStatus.isDownloading;
@ -1761,6 +1783,14 @@ int muluRetryCount =0;
return block;
}
boolean isHttpOrHttps(String url){
if(TextUtils.isEmpty(url) || !url.toLowerCase().startsWith("http") && !url.toLowerCase().startsWith("https")){
Log.d(TAG, String.format("prepare book isHttpOrHttps: url % is bad for request ",url));
return false ;
}
return true;
}
Map<Integer,Integer> fileRetryCnt = new HashMap<Integer,Integer>();
private void loadChaptContent(final int chapterIndex) throws JSONException, InterruptedException {
/* 章节内容没有缓存在本地
@ -1797,6 +1827,11 @@ private void loadChaptContent(final int chapterIndex) throws JSONException, Inte
JSONObject siteJson = new JSONObject();
siteJson.put("chapterContentRegex", mSiteRule.getChapterContentRegex());
siteJson.put("chapterContentDumpRegex", mSiteRule.getChapterContentDumpRegex());
if(!isHttpOrHttps(url)){
return ;
}
Request request = getTagRequest(url, refUrl,-1);
@ -1921,6 +1956,7 @@ private void loadChaptContent(final int chapterIndex) throws JSONException, Inte
*/
private Request getTagRequest(String url, String refUrl ,int maxAge) {
try {
Request.Builder builder = new Request.Builder()
.tag(mNovel.getNovelId()) //标记 请求的tag,切换小说或离开小说界面(BookActivity) 取消未执行完毕的 此tag的所有请求
.url(url)
@ -1949,7 +1985,10 @@ private void loadChaptContent(final int chapterIndex) throws JSONException, Inte
builder.header("Cache-Control", "public, max-age=" + maxAge);
}
return builder.build();
}catch (Exception er){
}
return null;
}
private String getRequestHeader(Request request) {

View File

@ -22,7 +22,9 @@ import java.util.List;
public class GsonUtil {
private static Gson gson = new Gson();
public static Novel getNovel(String json){
public static List<String>
/*public static Novel getNovel(String json){
Novel nv = new Novel();
try {
JSONObject jsonObject = new JSONObject(json);
@ -41,8 +43,7 @@ public class GsonUtil {
e.printStackTrace();
}
return nv;
}
public static List<String> parserStringBlocks(String result,String blockName ) throws JSONException {
}*/parserStringBlocks(String result,String blockName ) throws JSONException {
JSONObject jsonObject = new JSONObject(result);
JSONArray array = jsonObject.getJSONArray(blockName);
List<String> lst = new ArrayList<String>();

View File

@ -1,6 +1,7 @@
package com.novelbook.android.utils;
import android.text.TextUtils;
import android.util.Log;
import com.novelbook.android.db.Chapter;
@ -279,6 +280,9 @@ public class NovelParseUtil {
private static String access(String url,int maxAge, SiteRule siteRule) {
if(TextUtils.isEmpty(url) || !url.toLowerCase().startsWith("http") || !url.toLowerCase().startsWith("https")){
return "";
}
Request.Builder builder = new Request.Builder()
// .tag(mNovel.getNovelId()) //标记 请求的tag,切换小说或离开小说界面(BookActivity) 取消未执行完毕的 此tag的所有请求
.url(url)

View File

@ -1155,7 +1155,7 @@ private void hideSysUI(){
// Log.d(TAG, strLine);
// Log.d(TAG,"最后字符 。。。" +strLine.charAt(strLine.length()-1) + "");
lastLine =strLine;
strLine = strLine.replace("<EFBFBD>","");
// strLine = strLine.replace("<EFBFBD>","");
if(lineNo==trPage.getNativeBannerStartLine()){
if(showAd && mAd!=null){
@ -1165,7 +1165,7 @@ private void hideSysUI(){
// mAd.showNativeBannerInLines(trPage.getNativeBannerHeight(),(int)y);
}
y+=trPage.getNativeBannerHeight() +m_fontSize +lineSpace ;
Log.d(TAG, String.format("onDraw showNativeBannerInLines : lineno %s,strline %s ",lineNo,strLine));
// Log.d(TAG, String.format("onDraw showNativeBannerInLines : lineno %s,strline %s ",lineNo,strLine));
space = m_fontSize + lineSpace;
// y-=lineSpace;
if (strLine.length() > 0 && (strLine.charAt(strLine.length() - 1) + "").equals("\n")) {
@ -1197,7 +1197,7 @@ private void hideSysUI(){
// Log.d(TAG,String.format("getNavigationBarSize mHeight is %s ,last line height %s, power %s, %s", //
// mHeight,y,mHeight - CommonUtil.convertDpToPixel(mContext,10) + mBorderWidth - statusMarginBottom, lastLine));
// lastLine =lastLine.trim().replace(Constants.BAD_CHAR,"");
Log.d(TAG, String.format("onDraw: last line lenth %s,%s, ",lastLine.length() ,lastLine));
// Log.d(TAG, String.format("onDraw: last line lenth %s,%s, ",lastLine.length() ,lastLine));
float adHeight = mHeight -y - space -marginHeight-statusMarginBottom;
float adY =y ;//+space;
adY= lastLine.length()==0 ?adY-m_fontSize - lineSpace :adY;
@ -1218,7 +1218,7 @@ private void hideSysUI(){
// showAd((int) adHeight, (int) adY);
Log.d(TAG, String.format("loadBannerAd: AD is requested, adtype %s, adHeight %s, ady %s",mAdType,adHeight,adY));
// Log.d(TAG, String.format("loadBannerAd: AD is requested, adtype %s, adHeight %s, ady %s",mAdType,adHeight,adY));
}
// Log.d(TAG,String.format("ad + statusMarginBottom %s ",200+ statusMarginBottom));
// Log.d(TAG,String.format("adHeight %s, adY %s",adHeight,adY));
@ -1245,11 +1245,11 @@ private void hideSysUI(){
c.drawText(strPercent, mWidth - nPercentWidth, botoomY, mBatterryPaint);//x y为坐标值
c.drawText(date, marginWidth ,botoomY, mBatterryPaint);
// 画电池
Log.d(TAG, String.format("updateBattery to draw: level1 %s ",level));
// Log.d(TAG, String.format("updateBattery to draw: level1 %s ",level));
// level = batteryInfoIntent.getIntExtra( "level" , 0 );
int scale = batteryInfoIntent.getIntExtra("scale", 100);
mBatteryPercentage = (float) level / scale;
Log.d(TAG, String.format("updateBattery to draw: level2 %s ",level));
// Log.d(TAG, String.format("updateBattery to draw: level2 %s ",level));
float rect1Left = marginWidth + dateWith + statusMarginBottom;//电池外框left位置
//画电池外框
@ -1324,11 +1324,11 @@ private void hideSysUI(){
}
public void showAd(){
Log.d(TAG, String.format("loadBannerAd showAd: mAdType %s ",mAdType ));
// Log.d(TAG, String.format("loadBannerAd showAd: mAdType %s ",mAdType ));
if(mStatus == Status.LASTPAGE || mAd==null ||currentPage==null || !Constants.AD_SETTING.isShowAdsense()){
return;
}
Log.d(TAG, String.format("loadBannerAd showAd: mAdType %s, pageNo %s",mAdType, currentPage.getPageNo()));
// Log.d(TAG, String.format("loadBannerAd showAd: mAdType %s, pageNo %s",mAdType, currentPage.getPageNo()));
if(mAdType ==AdTpye.BANNER){
mAd.showTopBanner(mAdHeight,mAdY);
}else if(mAdType == AdTpye.NATIVEINLINES){
@ -1374,7 +1374,7 @@ private void hideSysUI(){
}
}
Log.d(TAG, "prepare book prePage: to open prepage: ");
// Log.d(TAG, "prepare book prePage: to open prepage: ");
cancelPage = currentPage;
if(mBookPageWidget==null){
return;
@ -1384,13 +1384,13 @@ private void hideSysUI(){
if(mBookPageWidget==null){
return;
}
Log.d(TAG, " prePage() onDraw: mBookPageWidget.getNextPage() ");
// Log.d(TAG, " prePage() onDraw: mBookPageWidget.getNextPage() ");
onDraw(mBookPageWidget.getNextPage(),currentPage ,true,true);
}else{
if(mBookPageWidget==null){
return;
}
Log.d(TAG, " prePage() onDraw: mBookPageWidget.getNextPage() ");
// Log.d(TAG, " prePage() onDraw: mBookPageWidget.getNextPage() ");
currentPage = getPrePage();
onDraw(mBookPageWidget.getNextPage(),currentPage ,true,true);
@ -1411,7 +1411,7 @@ private void hideSysUI(){
return;
}
Log.d(TAG, "prepare book nextPage:chaptid " +mBookUtil.getChapterNo());
// Log.d(TAG, "prepare book nextPage:chaptid " +mBookUtil.getChapterNo());
if (currentPage.getEnd() >= mBookUtil.getChapterLen()) {
Log.d(TAG,"已经是本章最后一页了");
File file =new File( mBookUtil.fileChapterName(currentChapter+1));
@ -1470,9 +1470,9 @@ private void hideSysUI(){
if(mBookPageWidget==null){
return;
}
Log.d(TAG, "nextPage() onDraw: mBookPageWidget.getCurPage() ");
// Log.d(TAG, "nextPage() onDraw: mBookPageWidget.getCurPage() ");
// onDraw(mBookPageWidget.getCurPage(),currentPage ,true,false);
Log.d(TAG, "nextpage:set current bitmap ..ondraw");
// Log.d(TAG, "nextpage:set current bitmap ..ondraw");
prePage = currentPage;
currentPage = getNextPage();
mLoadingChaptNo=0;
@ -1480,9 +1480,9 @@ private void hideSysUI(){
if(mBookPageWidget==null){
return;
}
Log.d(TAG, "nextPage() onDraw: mBookPageWidget.getNextPage() ");
// Log.d(TAG, "nextPage() onDraw: mBookPageWidget.getNextPage() ");
onDraw(mBookPageWidget.getNextPage(),currentPage ,true,true);
Log.d("nextPage","nextPagenext");
// Log.d("nextPage","nextPagenext");
HashMap<String,String> map = new HashMap<String,String>();
map.put("novel",bookName);
@ -1510,6 +1510,7 @@ private void hideSysUI(){
public void prepareBook(Novel book){
Log.d(TAG, "prepare book: start prepare book " + book.getName());
if(getNovel()!=null) {
@ -1517,11 +1518,11 @@ private void hideSysUI(){
try {
NetUtil.cancelRequest(getNovel().getNovelId());
} catch (Exception e) {
Log.e(TAG, "prepare book: error on canceling request " + e.getMessage());
// Log.e(TAG, "prepare book: error on canceling request " + e.getMessage());
e.printStackTrace();
}
}else{
Log.d(TAG, "prepare book: has been prepared, return.... " + book.getName());
// Log.d(TAG, "prepare book: has been prepared, return.... " + book.getName());
if(mBookUtil!=null) {
return;
}
@ -1663,8 +1664,8 @@ private void hideSysUI(){
public TRPage getNextPage(){
int nextPageNo =currentPage.getPageNo();
Log.e(TAG,String.format("prepare book getNextPage() currentChapter %s, chapters().size() %s,currentChaptPages .size() is %s,currentpage pageno is %s"
,currentChapter, getChapters().size(), currentChaptPages.size() , nextPageNo));
// Log.e(TAG,String.format("prepare book getNextPage() currentChapter %s, chapters().size() %s,currentChaptPages .size() is %s,currentpage pageno is %s"
// ,currentChapter, getChapters().size(), currentChaptPages.size() , nextPageNo));
if(nextPageNo==0){
drawStatus();
}
@ -1690,7 +1691,7 @@ private void hideSysUI(){
int prePageNo =currentPage.getPageNo()-1;
Log.d(TAG,String.format("currentPageno %s,total pagno %s",currentPage.getPageNo(),currentChaptPages.size()));
// Log.d(TAG,String.format("currentPageno %s,total pagno %s",currentPage.getPageNo(),currentChaptPages.size()));
if(prePageNo <=0){
@ -1726,7 +1727,7 @@ private void hideSysUI(){
if(currentChaptPages.size()==0){
return new TRPage();
}
Log.d(TAG, String.format("prepare book getPageForBegin: currentChaptPages count %s, chaptid %s, begin %s ",currentChaptPages.size(),currentChapter,begin));
// Log.d(TAG, String.format("prepare book getPageForBegin: currentChaptPages count %s, chaptid %s, begin %s ",currentChaptPages.size(),currentChapter,begin));
for(TRPage page : currentChaptPages)
{
if(page.getEnd() >=begin){
@ -1751,7 +1752,8 @@ private void hideSysUI(){
}
int adHeight = trpage.getNativeBannerHeight()+trpage.getBannerHeight();
calculateLineCount(adHeight );
Log.d(TAG, String.format("getNextChapterPage getNextLines: pageNo %s, adHeight %s, totalLines %s",trpage.getPageNo(),adHeight,mLineCount));
// Log.d(TAG, String.format("getNextChapterPage getNextLines: pageNo %s, adHeight %s, totalLines %s",trpage.getPageNo(),adHeight,mLineCount));
boolean newParagraph =false;
while (mBookUtil.next(true,chaptId) != -1){
char word = (char) mBookUtil.next(false,chaptId);
// Log.d(TAG, String.format(" loadchapt getNextLines() chaptId %s, word '%s'", chaptId,word ));
@ -1761,9 +1763,10 @@ private void hideSysUI(){
//判断是否换行
if ((word + "" ).equals("\n") ){// if ((word + "" ).equals("\r") && (((char) mBookUtil.next(true)) + "").equals("\n")){
// mBookUtil.next(false);
newParagraph =true;
if ( !line.isEmpty()){
if (showChapTitleOnTopWhenNextPage && lines.size() >0 && mBookUtil.isChapterTitle(line)) {
Log.d(TAG,String.format("title is %s\n,size is %s ,position is %s" ,line,line.length(),mBookUtil.getPosition(chaptId) ));
// Log.d(TAG,String.format("title is %s\n,size is %s ,position is %s" ,line,line.length(),mBookUtil.getPosition(chaptId) ));
//isFirstPage =true;
firstPageLine=1;
break;
@ -1788,6 +1791,14 @@ private void hideSysUI(){
continue;
}
if(newParagraph && line.length()==0) {
newParagraph = false;
if(!(word+"").equals(Constants.BAD_CHAR)){
line += Constants.BAD_CHAR + Constants.BAD_CHAR;
widthChar += 2* mPaint.measureText( Constants.BAD_CHAR + "");
}
}
width += widthChar;
// Log.d(TAG, String.format(" loadchapt getNextLines(),widthChar %s ,width %s,mVisibleWidth %s",widthChar, width ,mVisibleWidth ));
@ -1988,9 +1999,9 @@ private void hideSysUI(){
if(mBookPageWidget==null){
return;
}
Log.d(TAG, "currentPage onDraw: mBookPageWidget.getCurPage() ");
// Log.d(TAG, "currentPage onDraw: mBookPageWidget.getCurPage() ");
onDraw(mBookPageWidget.getCurPage(),currentPage ,updateChapter,false);
Log.d(TAG, "currentPage onDraw: mBookPageWidget.getNextPage() ");
// Log.d(TAG, "currentPage onDraw: mBookPageWidget.getNextPage() ");
onDraw(mBookPageWidget.getNextPage(),currentPage ,updateChapter,true);
}
@ -1999,7 +2010,7 @@ private void hideSysUI(){
hideSysUI();
if (currentPage != null && mBookPageWidget != null && !mBookPageWidget.isRunning()) {
Log.d(TAG, String.format("updateBattery: level old %s, new %s",level,mLevel));
// Log.d(TAG, String.format("updateBattery: level old %s, new %s",level,mLevel));
if (level != mLevel) {
level = mLevel;
currentPage(false);

View File

@ -176,7 +176,7 @@ int mPageMode =0;
protected void onDraw(Canvas canvas) {
// canvas.drawColor(0xFFAAAAAA);
canvas.drawColor(mBgColor);
Log.e("pagewidget onDraw","isMoveing isNext:" + isNext + " isRuning:" + isRuning);
// Log.e("pagewidget onDraw","isMoveing isNext:" + isNext + " isRuning:" + isRuning);
if (isRuning) {
mAnimationProvider.drawMove(canvas);
} else {
@ -196,7 +196,7 @@ int mPageMode =0;
int x = (int)event.getX();
int y = (int)event.getY();
Log.d(TAG, String.format("onTouchEvent: x %s,y %s ",x,y));
// Log.d(TAG, String.format("onTouchEvent: x %s,y %s ",x,y));
mAnimationProvider.setTouchPoint(x,y);
if (event.getAction() == MotionEvent.ACTION_DOWN){ //mAnimationProvider.setCancel(false); https://github.com/PeachBlossom/treader/issues/4
downX = (int) event.getX();
@ -219,7 +219,7 @@ int mPageMode =0;
if (!isMove) {
isMove = Math.abs(downX - x) > slop || Math.abs(downY - y) > slop;
}
Log.d(TAG, String.format("onTouchEvent:ACTION_MOVE isMove %s, isbusy %s",isMove,PageFactory.busy()));
// Log.d(TAG, String.format("onTouchEvent:ACTION_MOVE isMove %s, isbusy %s",isMove,PageFactory.busy()));
if(!PageFactory.busy())
if (isMove){
isMove = true;
@ -291,7 +291,7 @@ int mPageMode =0;
}
}else if (event.getAction() == MotionEvent.ACTION_UP){
//Log.e(TAG,"ACTION_UP");
Log.d(TAG, String.format("onTouchEvent:ACTION_UP isMove %s, isbusy %s",isMove,PageFactory.busy()));
// Log.d(TAG, String.format("onTouchEvent:ACTION_UP isMove %s, isbusy %s",isMove,PageFactory.busy()));
if (!isMove || PageFactory.busy()){
cancelPage = false;
//是否点击了中间
@ -337,7 +337,7 @@ int mPageMode =0;
if (!noNext) {
isRuning = true;
Log.d(TAG, "onTouchEvent: startanimation");
// Log.d(TAG, "onTouchEvent: startanimation");
mAnimationProvider.startAnimation(mScroller);
mTouchListener.showAdAfterIni();
this.postInvalidate();

View File

@ -87,7 +87,7 @@ public class SimulationAnimation extends AnimationProvider {
@Override
public void drawMove(Canvas canvas) {
Log.d(TAG, "isMoveing drawMove: ");
// Log.d(TAG, "isMoveing drawMove: ");
if (getDirection().equals(Direction.next)) {
calcPoints();
drawCurrentPageArea(canvas, mCurPageBitmap, mPath0);

View File

@ -38,7 +38,7 @@
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_margin="16dp"
android:layout_marginTop="20dp"
android:layout_marginTop="30dp"
android:background="@drawable/background_circle"
android:gravity="center"
android:text="@string/click_to_skip"

View File

@ -98,12 +98,12 @@
android:text="简介" />
</LinearLayout>
<com.timqi.collapsibletextview.CollapsibleTextView
xmlns:app="http://schemas.android.com/apk/res-auto"
<com.timqi.collapsibletextview.CollapsibleTextView xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/txtDesc2"
style="@style/TextViewDesc"
android:padding="5dp"
android:layout_marginLeft="20dp"
android:padding="5dp"
app:collapsedLines="3"
app:collapsedText=" 》》》"
app:expandedText=" 《《《"
@ -111,19 +111,19 @@
app:suffixTrigger="true"
/>
<TextView
android:visibility="gone"
android:id="@+id/txtDesc22"
style="@style/TextViewDesc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:text="一句话概括了书单的内容" />
android:text="一句话概括了书单的内容"
android:visibility="gone" />
</LinearLayout>
<LinearLayout style="@style/llGraySplit" />
<LinearLayout
@ -135,21 +135,19 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:visibility="visible"
>
android:visibility="visible">
<TextView
android:layout_width="5dp"
android:layout_height="wrap_content"
android:background="@color/colorAccent"
android:visibility="gone"
/>
android:visibility="gone" />
<TextView
style="@style/TextViewTitle"
android:layout_marginTop="5dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="目录" />
</LinearLayout>
@ -167,25 +165,26 @@
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_gravity="center"
android:layout_weight="0"
android:layout_marginRight="5dp"
android:layout_weight="0"
android:src="@mipmap/directory" />
<TextView
style="@style/TextViewDesc"
android:layout_width="20dp"
android:layout_height="wrap_content"
android:text="目录"
android:textSize="11sp"
android:visibility="gone"
android:text="目录" />
android:visibility="gone" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:layout_marginLeft="5dp"
>
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/txtLatestUpdate"
style="@style/TextViewDesc.small"
@ -194,12 +193,13 @@
android:text=""
/>
<TextView
android:layout_marginTop="2dp"
android:id="@+id/txtLatestCate"
style="@style/TextViewDesc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:text=""
/>
@ -209,7 +209,6 @@
</LinearLayout>
<!--
<LinearLayout
android:layout_width="match_parent"
@ -268,32 +267,37 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout style="@style/llGraySplit" />
<TextView
android:id="@+id/tvAuthorMore"
style="@style/NovelBlockTitle"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:layout_weight="1"
android:text=" 其他作品" />
<android.support.v7.widget.RecyclerView
android:id="@+id/rvBooklist"
android:divider="#ffff0000"
android:dividerHeight="10dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="#ffff0000"
android:dividerHeight="10dp"
android:nestedScrollingEnabled="false"
android:paddingBottom="2dp"
/>
android:paddingBottom="2dp" />
</LinearLayout>
<FrameLayout
android:layout_marginTop="1dp"
android:layout_marginBottom="1dp"
android:id="@+id/banner_container"
style="@style/frmBannerContainer"
android:layout_height="@dimen/nativeBannerHeight"
android:id="@+id/banner_container"/>
</LinearLayout>
android:layout_marginTop="1dp"
android:layout_marginBottom="1dp" />
<LinearLayout style="@style/llGraySplit" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -303,22 +307,22 @@
<TextView
android:id="@+id/tvTonglei"
style="@style/NovelBlockTitle"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:layout_weight="1"
android:text="同类推荐" />
<android.support.v7.widget.RecyclerView
android:id="@+id/rvBooklistRelated"
android:divider="#ffff0000"
android:dividerHeight="10dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="#ffff0000"
android:dividerHeight="10dp"
android:nestedScrollingEnabled="false"
android:paddingBottom="50dp"
/>
android:paddingBottom="50dp" />
</LinearLayout>
<LinearLayout style="@style/llGraySplit" />
</LinearLayout>

View File

@ -8,81 +8,39 @@
</facet>
<facet type="android" name="Android">
<configuration>
<option name="SELECTED_BUILD_VARIANT" value="gDebug" />
<option name="ASSEMBLE_TASK_NAME" value="assembleGDebug" />
<option name="COMPILE_JAVA_TASK_NAME" value="compileGDebugSources" />
<option name="SELECTED_BUILD_VARIANT" value="debug" />
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
<afterSyncTasks>
<task>generateGDebugSources</task>
<task>generateDebugSources</task>
</afterSyncTasks>
<option name="ALLOW_USER_CONFIGURATION" value="false" />
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res;file://$MODULE_DIR$/src/debug/res;file://$MODULE_DIR$/build/generated/res/resValues/g/debug" />
<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res;file://$MODULE_DIR$/src/debug/res;file://$MODULE_DIR$/build/generated/res/resValues/debug" />
<option name="TEST_RES_FOLDERS_RELATIVE_PATH" value="" />
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/build/intermediates/javac/gDebug/compileGDebugJavaWithJavac/classes" />
<output-test url="file://$MODULE_DIR$/build/intermediates/javac/gDebugUnitTest/compileGDebugUnitTestJavaWithJavac/classes" />
<output url="file://$MODULE_DIR$/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes" />
<output-test url="file://$MODULE_DIR$/build/intermediates/javac/debugUnitTest/compileDebugUnitTestJavaWithJavac/classes" />
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/g/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/gDebug/compileGDebugAidl/out" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/g/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/gDebug/compileGDebugRenderscript/out" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/g/debug" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/g/debug" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/gDebug/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/gDebug/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/gDebug/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/gDebug/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/gDebug/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/gDebug/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/gDebug/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/g/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/gDebugAndroidTest/compileGDebugAndroidTestAidl/out" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/g/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/gDebugAndroidTest/compileGDebugAndroidTestRenderscript/out" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/g/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/g/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestGDebug/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestGDebug/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestGDebug/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestGDebug/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestGDebug/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestGDebug/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestGDebug/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/test/g/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testGDebug/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testGDebug/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testGDebug/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testGDebug/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testGDebug/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testGDebug/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testGDebug/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/g/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/g/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/g/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/g/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/g/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/g/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/g/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestG/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestG/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestG/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestG/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestG/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestG/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestG/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testG/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testG/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testG/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testG/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testG/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testG/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testG/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debug/compileDebugAidl/out" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debug/compileDebugRenderscript/out" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debugAndroidTest/compileDebugAndroidTestAidl/out" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debugAndroidTest/compileDebugAndroidTestRenderscript/out" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/test/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
@ -130,17 +88,25 @@
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotation_processor_list" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/apk_list" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/build-info" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundle_manifest" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/check_manifest_result" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/compatible_screen_manifest" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/duplicate_classes_check" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-runtime-classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-verifier" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-apk" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant_app_manifest" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant_run_app_info_output_file" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant_run_main_apk_resources" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant_run_merged_manifests" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant_run_split_apk_resources" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/javac" />
<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/merged-not-compiled-resources" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifest-checker" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged_assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged_jni_libs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged_manifests" />
@ -148,17 +114,16 @@
<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/shader_assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/signing_config" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/split-apk" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/validate_signing_config" />
<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" />