diff --git a/.idea/.name b/.idea/.name
deleted file mode 100644
index c45be16..0000000
--- a/.idea/.name
+++ /dev/null
@@ -1 +0,0 @@
-MonkeyBook
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index 96cc43e..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml
deleted file mode 100644
index e7bedf3..0000000
--- a/.idea/copyright/profiles_settings.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
deleted file mode 100644
index 97626ba..0000000
--- a/.idea/encodings.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 7158618..3179ac3 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,62 +1,33 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1.8
-
-
-
-
-
-
-
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
index 814aec0..078a3cb 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -2,7 +2,7 @@
-
+
diff --git a/app/build.gradle b/app/build.gradle
index b0e1e3c..1cf3f95 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -2,27 +2,18 @@ apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao'
android {
- compileSdkVersion 25
- buildToolsVersion '25.0.0'
+ compileSdkVersion 28
+ buildToolsVersion '28.0.3'
defaultConfig {
applicationId "com.monke.monkeybook"
minSdkVersion 17
- targetSdkVersion 25
- versionCode 9
- versionName "1.2.4"
+ targetSdkVersion 28
+ versionCode 10
+ versionName "1.2.5"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "debug"]
}
- productFlavors{
- baidu {
- manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
- }
- pyger{
- manifestPlaceholders = [UMENG_CHANNEL_VALUE: "pyger"]
- }
- }
-
lintOptions {
abortOnError false
}
@@ -31,16 +22,6 @@ android {
buildConfigField "boolean", "IS_RELEASE", "true"
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- applicationVariants.all { variant ->
- variant.outputs.each { output ->
- def outputFile = output.outputFile
- if (outputFile != null && outputFile.name.endsWith('.apk')) {
- //这里修改apk文件名
- def fileName = APP_NAME +"_"+"${variant.productFlavors[0].name}"+ "_v" + defaultConfig.versionName + "(" + defaultConfig.versionCode + ").apk"
- output.outputFile = new File(outputFile.parent, fileName)
- }
- }
- }
}
debug {
buildConfigField "boolean", "IS_RELEASE", "false"
@@ -59,41 +40,40 @@ repositories{
dependencies {
- compile fileTree(include: ['*.jar'], dir: 'libs')
- testCompile 'junit:junit:4.12'
- compile(name: 'autoupdatesdk-release', ext: 'aar')
- compile 'com.android.support:appcompat-v7:25.1.0'
- compile 'com.android.support:design:25.1.0'
- compile 'com.android.support:cardview-v7:25.1.0'
- compile 'com.android.support:support-compat:25.1.0'
- compile project(':basemvplib')
+ api fileTree(include: ['*.jar'], dir: 'libs')
+ testImplementation 'junit:junit:4.12'
+ api 'com.android.support:appcompat-v7:28.0.0'
+ api 'com.android.support:design:28.0.0'
+ api 'com.android.support:cardview-v7:28.0.0'
+ api 'com.android.support:support-compat:28.0.0'
+ api project(':basemvplib')
//GreenDao
- compile 'org.greenrobot:greendao:3.0.1'
- compile 'org.greenrobot:greendao-generator:3.0.0'
+ api 'org.greenrobot:greendao:3.0.1'
+ api 'org.greenrobot:greendao-generator:3.0.0'
//JSOUP
- compile 'org.jsoup:jsoup:1.10.2'
+ api 'org.jsoup:jsoup:1.10.2'
//沉浸式状态栏
- compile 'com.zhangmonke:ImmerseLayout:1.1.1'
+ api 'com.zhangmonke:ImmerseLayout:1.1.1'
//ProgressBar
- compile 'com.zhangmonke:MProgressBar:1.0.1'
+ api 'com.zhangmonke:MProgressBar:1.0.1'
//Glide
- compile 'com.github.bumptech.glide:glide:3.7.0'
+ api 'com.github.bumptech.glide:glide:3.7.0'
//AutofitTextView
- compile 'me.grantland:autofittextview:0.2.1'
+ api 'me.grantland:autofittextview:0.2.1'
//删除粒子效果
- compile 'tyrantgit:explosionfield:1.0.1'
+ api 'tyrantgit:explosionfield:1.0.1'
//View简易动画
- compile 'com.daimajia.easing:library:2.0@aar'
- compile 'com.daimajia.androidanimations:library:2.2@aar'
+ api 'com.daimajia.easing:library:2.0@aar'
+ api 'com.daimajia.androidanimations:library:2.2@aar'
//CircleImageView
- compile 'de.hdodenhof:circleimageview:2.1.0'
+ api 'de.hdodenhof:circleimageview:2.1.0'
//SwitchButton
- compile 'com.kyleduo.switchbutton:library:1.4.4'
- compile 'com.victor:lib:1.0.4'
- compile files('libs/commons-codec-1.10-sources.jar')
- compile files('libs/juniversalchardet-1.0.3.jar')
- compile files('libs/umeng-analytics-v6.1.1.jar')
- compile files('libs/utdid4all-1.0.4.jar')
+ api 'com.kyleduo.switchbutton:library:1.4.4'
+ api 'com.victor:lib:1.0.4'
+ api files('libs/commons-codec-1.10-sources.jar')
+ api files('libs/juniversalchardet-1.0.3.jar')
+ api files('libs/umeng-analytics-v6.1.1.jar')
+ api files('libs/utdid4all-1.0.4.jar')
}
greendao {
diff --git a/app/libs/autoupdatesdk-release.aar b/app/libs/autoupdatesdk-release.aar
deleted file mode 100644
index e6ae996..0000000
Binary files a/app/libs/autoupdatesdk-release.aar and /dev/null differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 530fef4..dc84cbe 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -10,7 +10,8 @@
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/CAppTheme"
- tools:replace="android:theme">
+ tools:replace="android:theme"
+ android:networkSecurityConfig="@xml/network_security_config">
@@ -59,26 +60,9 @@
android:screenOrientation="portrait"
android:theme="@style/CAppTransparentTheme" />
-
-
-
-
-
-
-
@@ -87,6 +71,5 @@
-
\ No newline at end of file
diff --git a/app/src/main/java/com/monke/monkeybook/utils/DensityUtil.java b/app/src/main/java/com/monke/monkeybook/utils/DensityUtil.java
index 05da73c..f7cf523 100644
--- a/app/src/main/java/com/monke/monkeybook/utils/DensityUtil.java
+++ b/app/src/main/java/com/monke/monkeybook/utils/DensityUtil.java
@@ -84,7 +84,18 @@ public class DensityUtil {
public static int getWindowWidth(Context context){
WindowManager wm = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
- int width = wm.getDefaultDisplay().getWidth();
+ DisplayMetrics dm = new DisplayMetrics();
+ wm.getDefaultDisplay().getMetrics(dm);
+ int width = dm.widthPixels;
return width;
}
+
+ public static int getWindowHeight(Context context){
+ WindowManager wm = (WindowManager) context
+ .getSystemService(Context.WINDOW_SERVICE);
+ DisplayMetrics dm = new DisplayMetrics();
+ wm.getDefaultDisplay().getMetrics(dm);
+ int height = dm.heightPixels;
+ return height;
+ }
}
diff --git a/app/src/main/java/com/monke/monkeybook/view/impl/MainActivity.java b/app/src/main/java/com/monke/monkeybook/view/impl/MainActivity.java
index 4eed296..52d9ad7 100644
--- a/app/src/main/java/com/monke/monkeybook/view/impl/MainActivity.java
+++ b/app/src/main/java/com/monke/monkeybook/view/impl/MainActivity.java
@@ -10,9 +10,6 @@ import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.Toast;
-
-import com.baidu.autoupdatesdk.BDAutoUpdateSDK;
-import com.baidu.autoupdatesdk.UICheckUpdateCallback;
import com.monke.monkeybook.BitIntentDataManager;
import com.monke.monkeybook.R;
import com.monke.monkeybook.base.MBaseActivity;
@@ -165,22 +162,6 @@ public class MainActivity extends MBaseActivity implements IMain
@Override
protected void firstRequest() {
- //通过百度API 判断是否有更新
- try {
- BDAutoUpdateSDK.uiUpdateAction(this, new UICheckUpdateCallback() {
- @Override
- public void onNoUpdateFound() {
-
- }
-
- @Override
- public void onCheckComplete() {
-
- }
- });
- } catch (Exception e) {
- e.printStackTrace();
- }
mPresenter.queryBookShelf(false);
}
diff --git a/app/src/main/java/com/monke/monkeybook/view/impl/SearchActivity.java b/app/src/main/java/com/monke/monkeybook/view/impl/SearchActivity.java
index e87ab3f..cafd1ec 100644
--- a/app/src/main/java/com/monke/monkeybook/view/impl/SearchActivity.java
+++ b/app/src/main/java/com/monke/monkeybook/view/impl/SearchActivity.java
@@ -1,6 +1,5 @@
//Copyright (c) 2017. 章钦豪. All rights reserved.
package com.monke.monkeybook.view.impl;
-
import android.animation.Animator;
import android.content.Context;
import android.content.Intent;
@@ -26,7 +25,6 @@ import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
-
import com.daimajia.androidanimations.library.Techniques;
import com.daimajia.androidanimations.library.YoYo;
import com.monke.immerselayout.StatusBarUtils;
@@ -37,6 +35,7 @@ import com.monke.monkeybook.bean.SearchHistoryBean;
import com.monke.monkeybook.presenter.ISearchPresenter;
import com.monke.monkeybook.presenter.impl.BookDetailPresenterImpl;
import com.monke.monkeybook.presenter.impl.SearchPresenterImpl;
+import com.monke.monkeybook.utils.DensityUtil;
import com.monke.monkeybook.utils.NetworkUtil;
import com.monke.monkeybook.view.ISearchView;
import com.monke.monkeybook.view.adapter.SearchBookAdapter;
@@ -44,16 +43,12 @@ import com.monke.monkeybook.view.adapter.SearchHistoryAdapter;
import com.monke.monkeybook.widget.flowlayout.TagFlowLayout;
import com.monke.monkeybook.widget.refreshview.OnLoadMoreListener;
import com.monke.monkeybook.widget.refreshview.RefreshRecyclerView;
-
import java.util.List;
-
import tyrantgit.explosionfield.ExplosionField;
-
public class SearchActivity extends MBaseActivity implements ISearchView {
private FrameLayout flSearchContent;
private EditText edtContent;
private TextView tvTosearch;
-
private LinearLayout llSearchHistory;
private TextView tvSearchHistoryClean;
private TagFlowLayout tflSearchHistory;
@@ -61,62 +56,50 @@ public class SearchActivity extends MBaseActivity implements I
private Animation animHistory;
private Animator animHistory5;
private ExplosionField explosionField;
-
private RefreshRecyclerView rfRvSearchBooks;
private SearchBookAdapter searchBookAdapter;
-
@Override
protected ISearchPresenter initInjector() {
return new SearchPresenterImpl();
}
-
@Override
protected void onCreateActivity() {
setContentView(R.layout.activity_search);
}
-
@Override
protected void initData() {
-
explosionField = ExplosionField.attach2Window(this);
searchHistoryAdapter = new SearchHistoryAdapter();
-
searchBookAdapter = new SearchBookAdapter();
}
-
@Override
protected void bindView() {
flSearchContent = (FrameLayout) findViewById(R.id.fl_search_content);
edtContent = (EditText) findViewById(R.id.edt_content);
tvTosearch = (TextView) findViewById(R.id.tv_tosearch);
-
llSearchHistory = (LinearLayout) findViewById(R.id.ll_search_history);
tvSearchHistoryClean = (TextView) findViewById(R.id.tv_search_history_clean);
tflSearchHistory = (TagFlowLayout) findViewById(R.id.tfl_search_history);
tflSearchHistory.setAdapter(searchHistoryAdapter);
-
rfRvSearchBooks = (RefreshRecyclerView) findViewById(R.id.rfRv_search_books);
rfRvSearchBooks.setRefreshRecyclerViewAdapter(searchBookAdapter, new LinearLayoutManager(this));
-
View viewRefreshError = LayoutInflater.from(this).inflate(R.layout.view_searchbook_refresherror, null);
viewRefreshError.findViewById(R.id.tv_refresh_again).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//刷新失败 ,重试
mPresenter.initPage();
- mPresenter.toSearchBooks(null,true);
+ mPresenter.toSearchBooks(null, true);
rfRvSearchBooks.startRefresh();
}
});
rfRvSearchBooks.setNoDataAndrRefreshErrorView(LayoutInflater.from(this).inflate(R.layout.view_searchbook_nodata, null),
viewRefreshError);
-
searchBookAdapter.setItemClickListener(new SearchBookAdapter.OnItemClickListener() {
@Override
public void clickAddShelf(View clickView, int position, SearchBookBean searchBookBean) {
mPresenter.addBookToShelf(searchBookBean);
}
-
@Override
public void clickItem(View animView, int position, SearchBookBean searchBookBean) {
Intent intent = new Intent(SearchActivity.this, BookDetailActivity.class);
@@ -126,10 +109,8 @@ public class SearchActivity extends MBaseActivity implements I
}
});
}
-
@Override
protected void bindEvent() {
-
tvSearchHistoryClean.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -142,14 +123,10 @@ public class SearchActivity extends MBaseActivity implements I
edtContent.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-
}
-
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
-
}
-
@Override
public void afterTextChanged(Editable s) {
edtContent.setSelection(edtContent.length());
@@ -160,7 +137,8 @@ public class SearchActivity extends MBaseActivity implements I
edtContent.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
- if (actionId == EditorInfo.IME_ACTION_SEARCH || (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
+ if (actionId == EditorInfo.IME_ACTION_SEARCH || (event != null && event.getKeyCode() ==
+ KeyEvent.KEYCODE_ENTER)) {
toSearch();
return true;
} else
@@ -182,7 +160,6 @@ public class SearchActivity extends MBaseActivity implements I
}
}
});
-
searchHistoryAdapter.setOnItemClickListener(new SearchHistoryAdapter.OnItemClickListener() {
@Override
public void itemClick(SearchHistoryBean searchHistoryBean) {
@@ -190,28 +167,23 @@ public class SearchActivity extends MBaseActivity implements I
toSearch();
}
});
-
bindKeyBoardEvent();
-
rfRvSearchBooks.setLoadMoreListener(new OnLoadMoreListener() {
@Override
public void startLoadmore() {
mPresenter.toSearchBooks(null, false);
}
-
@Override
public void loadMoreErrorTryAgain() {
mPresenter.toSearchBooks(null, true);
}
});
}
-
@Override
protected void firstRequest() {
super.firstRequest();
mPresenter.querySearchHistory();
}
-
//开始搜索
private void toSearch() {
if (edtContent.getText().toString().trim().length() > 0) {
@@ -219,7 +191,7 @@ public class SearchActivity extends MBaseActivity implements I
mPresenter.setHasSearch(true);
mPresenter.insertSearchHistory();
closeKeyBoard();
- //执行搜索请求
+ //执⾏搜索请求
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
@@ -232,7 +204,6 @@ public class SearchActivity extends MBaseActivity implements I
YoYo.with(Techniques.Shake).playOn(flSearchContent);
}
}
-
private void bindKeyBoardEvent() {
llSearchHistory.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
@@ -240,14 +211,19 @@ public class SearchActivity extends MBaseActivity implements I
Rect r = new Rect();
llSearchHistory.getWindowVisibleDisplayFrame(r);
FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) llSearchHistory.getLayoutParams();
-
int height = llSearchHistory.getContext().getResources().getDisplayMetrics().heightPixels;
+ if (height < r.bottom) { //⼩⽶8-Android9.0 刘海屏问题,可⻅区域⾼度会⼤于屏幕⾼度
+ r.bottom = height;
+ }
int diff = height - r.bottom;
if (diff != 0 && Math.abs(diff) != StatusBarUtils.getNavi_height()) {
if (layoutParams.bottomMargin != diff) {
- layoutParams.setMargins(0, 0, 0, Math.abs(diff));
- llSearchHistory.setLayoutParams(layoutParams);
- //打开输入
+ //华为可隐藏导航栏,在⼿动隐藏或显示导航栏 屏幕⾼度获取数值不会改变。
+ if (Math.abs(layoutParams.bottomMargin - Math.abs(diff)) != StatusBarUtils.getNavi_height()) {
+ layoutParams.setMargins(0, 0, 0, Math.abs(diff));
+ llSearchHistory.setLayoutParams(layoutParams);
+ }
+ //打开输⼊
if (llSearchHistory.getVisibility() != View.VISIBLE)
openOrCloseHistory(true);
}
@@ -262,7 +238,7 @@ public class SearchActivity extends MBaseActivity implements I
} else {
layoutParams.setMargins(0, 0, 0, 0);
llSearchHistory.setLayoutParams(layoutParams);
- //关闭输入
+ //关闭输⼊
if (llSearchHistory.getVisibility() == View.VISIBLE)
openOrCloseHistory(false);
}
@@ -270,24 +246,23 @@ public class SearchActivity extends MBaseActivity implements I
}
}
});
-
- getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
- @Override
- public void onGlobalLayout() {
- new Handler().postDelayed(new Runnable() {
- @Override
- public void run() {
- openKeyBoard();
- }
- }, 100);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
- getWindow().getDecorView().getViewTreeObserver().removeOnGlobalLayoutListener(this);
- } else
- getWindow().getDecorView().getViewTreeObserver().removeGlobalOnLayoutListener(this);
- }
- });
+ getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(new
+ ViewTreeObserver.OnGlobalLayoutListener() {
+ @Override
+ public void onGlobalLayout() {
+ new Handler().postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ openKeyBoard();
+ }
+ }, 100);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
+ getWindow().getDecorView().getViewTreeObserver().removeOnGlobalLayoutListener(this);
+ } else
+ getWindow().getDecorView().getViewTreeObserver().removeGlobalOnLayoutListener(this);
+ }
+ });
}
-
private void checkTvToSearch() {
if (llSearchHistory.getVisibility() == View.VISIBLE) {
tvTosearch.setText("搜索");
@@ -297,7 +272,6 @@ public class SearchActivity extends MBaseActivity implements I
mPresenter.setInput(false);
}
}
-
private void openOrCloseHistory(Boolean open) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
if (null != animHistory5) {
@@ -317,21 +291,16 @@ public class SearchActivity extends MBaseActivity implements I
edtContent.setCursorVisible(true);
checkTvToSearch();
}
-
@Override
public void onAnimationEnd(Animator animation) {
if (rfRvSearchBooks.getVisibility() != View.VISIBLE)
rfRvSearchBooks.setVisibility(View.VISIBLE);
}
-
@Override
public void onAnimationCancel(Animator animation) {
-
}
-
@Override
public void onAnimationRepeat(Animator animation) {
-
}
});
animHistory5.start();
@@ -345,24 +314,18 @@ public class SearchActivity extends MBaseActivity implements I
animHistory5.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
-
}
-
@Override
public void onAnimationEnd(Animator animation) {
llSearchHistory.setVisibility(View.GONE);
edtContent.setCursorVisible(false);
checkTvToSearch();
}
-
@Override
public void onAnimationCancel(Animator animation) {
-
}
-
@Override
public void onAnimationRepeat(Animator animation) {
-
}
});
animHistory5.start();
@@ -382,16 +345,13 @@ public class SearchActivity extends MBaseActivity implements I
edtContent.setCursorVisible(true);
checkTvToSearch();
}
-
@Override
public void onAnimationEnd(Animation animation) {
if (rfRvSearchBooks.getVisibility() != View.VISIBLE)
rfRvSearchBooks.setVisibility(View.VISIBLE);
}
-
@Override
public void onAnimationRepeat(Animation animation) {
-
}
});
llSearchHistory.startAnimation(animHistory);
@@ -403,41 +363,34 @@ public class SearchActivity extends MBaseActivity implements I
@Override
public void onAnimationStart(Animation animation) {
}
-
@Override
public void onAnimationEnd(Animation animation) {
llSearchHistory.setVisibility(View.GONE);
edtContent.setCursorVisible(false);
checkTvToSearch();
}
-
@Override
public void onAnimationRepeat(Animation animation) {
-
}
});
llSearchHistory.startAnimation(animHistory);
}
}
}
-
private void closeKeyBoard() {
InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(edtContent.getWindowToken(), 0);
}
-
private void openKeyBoard() {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
edtContent.requestFocus();
imm.showSoftInput(edtContent, InputMethodManager.RESULT_UNCHANGED_SHOWN);
}
-
@Override
public void insertSearchHistorySuccess(SearchHistoryBean searchHistoryBean) {
- //搜索历史插入或者修改成功
+ //搜索历史插⼊或者修改成功
mPresenter.querySearchHistory();
}
-
@Override
public void querySearchHistorySuccess(List datas) {
searchHistoryAdapter.replaceAll(datas);
@@ -447,63 +400,54 @@ public class SearchActivity extends MBaseActivity implements I
tvSearchHistoryClean.setVisibility(View.INVISIBLE);
}
}
-
@Override
public void refreshSearchBook(List books) {
searchBookAdapter.replaceAll(books);
}
-
@Override
public void refreshFinish(Boolean isAll) {
rfRvSearchBooks.finishRefresh(isAll, true);
}
-
@Override
public void loadMoreFinish(Boolean isAll) {
rfRvSearchBooks.finishLoadMore(isAll, true);
}
-
@Override
public void searchBookError(Boolean isRefresh) {
if (isRefresh) {
rfRvSearchBooks.refreshError();
} else {
-
rfRvSearchBooks.loadMoreError();
}
}
-
@Override
public void loadMoreSearchBook(final List books) {
searchBookAdapter.addAll(books);
}
-
@Override
protected void onDestroy() {
super.onDestroy();
explosionField.clear();
}
-
@Override
public EditText getEdtContent() {
return edtContent;
}
-
@Override
public void addBookShelfFailed(int code) {
Toast.makeText(this, NetworkUtil.getErrorTip(code), Toast.LENGTH_SHORT).show();
}
-
@Override
public SearchBookAdapter getSearchBookAdapter() {
return searchBookAdapter;
}
-
@Override
public void updateSearchItem(int index) {
if (index < searchBookAdapter.getItemcount()) {
- int startIndex = ((LinearLayoutManager) rfRvSearchBooks.getRecyclerView().getLayoutManager()).findFirstVisibleItemPosition();
- TextView tvAddShelf = (TextView) ((ViewGroup) rfRvSearchBooks.getRecyclerView()).getChildAt(index - startIndex).findViewById(R.id.tv_addshelf);
+ int startIndex = ((LinearLayoutManager)
+ rfRvSearchBooks.getRecyclerView().getLayoutManager()).findFirstVisibleItemPosition();
+ TextView tvAddShelf = (TextView) ((ViewGroup) rfRvSearchBooks.getRecyclerView()).getChildAt(index -
+ startIndex).findViewById(R.id.tv_addshelf);
if (tvAddShelf != null) {
if (searchBookAdapter.getSearchBooks().get(index).getAdd()) {
tvAddShelf.setText("已添加");
@@ -515,16 +459,16 @@ public class SearchActivity extends MBaseActivity implements I
}
}
}
-
@Override
public Boolean checkIsExist(SearchBookBean searchBookBean) {
Boolean result = false;
for (int i = 0; i < searchBookAdapter.getItemcount(); i++) {
- if (searchBookAdapter.getSearchBooks().get(i).getNoteUrl().equals(searchBookBean.getNoteUrl()) && searchBookAdapter.getSearchBooks().get(i).getTag().equals(searchBookBean.getTag())) {
+ if (searchBookAdapter.getSearchBooks().get(i).getNoteUrl().equals(searchBookBean.getNoteUrl()) &&
+ searchBookAdapter.getSearchBooks().get(i).getTag().equals(searchBookBean.getTag())) {
result = true;
break;
}
}
return result;
}
-}
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/monke/monkeybook/widget/contentswitchview/ContentSwitchView.java b/app/src/main/java/com/monke/monkeybook/widget/contentswitchview/ContentSwitchView.java
index 6feefcc..d9b435f 100644
--- a/app/src/main/java/com/monke/monkeybook/widget/contentswitchview/ContentSwitchView.java
+++ b/app/src/main/java/com/monke/monkeybook/widget/contentswitchview/ContentSwitchView.java
@@ -13,12 +13,15 @@ import android.view.View;
import android.view.ViewTreeObserver;
import android.widget.FrameLayout;
import android.widget.Toast;
+
import com.monke.monkeybook.ReadBookControl;
import com.monke.monkeybook.utils.DensityUtil;
+
import java.util.ArrayList;
import java.util.List;
public class ContentSwitchView extends FrameLayout implements BookContentView.SetDataListener {
+ private final int screenWidth = DensityUtil.getWindowWidth(getContext());
private final long animDuration = 300;
public final static int NONE = -1;
public final static int PREANDNEXT = 0;
@@ -32,9 +35,10 @@ public class ContentSwitchView extends FrameLayout implements BookContentView.Se
private BookContentView durPageView;
private List viewContents;
- public interface OnBookReadInitListener{
+ public interface OnBookReadInitListener {
public void success();
}
+
private OnBookReadInitListener bookReadInitListener;
public ContentSwitchView(Context context) {
@@ -74,11 +78,12 @@ public class ContentSwitchView extends FrameLayout implements BookContentView.Se
}
- public void bookReadInit(OnBookReadInitListener bookReadInitListener){
+ public void bookReadInit(OnBookReadInitListener bookReadInitListener) {
this.bookReadInitListener = bookReadInitListener;
durPageView.getTvContent().getViewTreeObserver().addOnGlobalLayoutListener(layoutInitListener);
}
- public void startLoading(){
+
+ public void startLoading() {
int height = durPageView.getTvContent().getHeight();
if (height > 0) {
if (loadDataListener != null && durHeight != height) {
@@ -100,15 +105,26 @@ public class ContentSwitchView extends FrameLayout implements BookContentView.Se
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
if (!isMoving) {
+ int durWidth = screenWidth > 1400 ? 10 : 0; //当分辨率过大时,添加横向滑动冗余值
switch (action) {
case MotionEvent.ACTION_DOWN:
startX = event.getX();
break;
case MotionEvent.ACTION_MOVE:
- if(viewContents.size() > 1){
+ if (viewContents.size() > 1) {
if (startX == -1)
startX = event.getX();
+
+ //处理分辨率过大,移动冗余值,当横向滑动值超过冗余值则开始滑动
int durX = (int) (event.getX() - startX);
+ if(durX>durWidth){
+ durX = durX - durWidth;
+ }else if(durX<-durWidth){
+ durX = durX + durWidth;
+ }else{
+ durX = 0;
+ }
+
if (durX > 0 && (state == PREANDNEXT || state == ONLYPRE)) {
int tempX = durX - getWidth();
if (tempX < -getWidth())
@@ -127,12 +143,14 @@ public class ContentSwitchView extends FrameLayout implements BookContentView.Se
}
}
break;
+ case MotionEvent.ACTION_CANCEL: //小米8长按传送门会引导手势进入action_cancel
case MotionEvent.ACTION_UP:
- if(startX == -1)
+ if (startX == -1)
startX = event.getX();
- if (event.getX() - startX > 0) {
+ if (event.getX() - startX > durWidth) {
if (state == PREANDNEXT || state == ONLYPRE) {
- if (event.getX() - startX > scrollX) {
+ //注意冗余值
+ if (event.getX() - startX + durWidth> scrollX) {
//向前翻页成功
initMoveSuccessAnim(viewContents.get(0), 0);
} else {
@@ -142,10 +160,11 @@ public class ContentSwitchView extends FrameLayout implements BookContentView.Se
//没有上一页
noPre();
}
- } else if (event.getX() - startX < 0) {
+ } else if (event.getX() - startX < -durWidth) {
if (state == PREANDNEXT || state == ONLYNEXT) {
int tempIndex = (state == PREANDNEXT ? 1 : 0);
- if (startX - event.getX() > scrollX) {
+ //注意冗余值
+ if (startX - event.getX() - durWidth > scrollX) {
//向后翻页成功
initMoveSuccessAnim(viewContents.get(tempIndex), -getWidth());
} else {
@@ -238,7 +257,7 @@ public class ContentSwitchView extends FrameLayout implements BookContentView.Se
viewContents.remove(viewContents.size() - 1);
}
state = ONLYNEXT;
- if(durPageView.getDurChapterIndex()-1>=0 || durPageView.getDurPageIndex()-1>=0){
+ if (durPageView.getDurChapterIndex() - 1 >= 0 || durPageView.getDurPageIndex() - 1 >= 0) {
addPrePage(durPageView.getDurChapterIndex(), durPageView.getChapterAll(), durPageView.getDurPageIndex(), durPageView.getPageAll());
if (state == NONE)
state = ONLYPRE;
@@ -254,7 +273,7 @@ public class ContentSwitchView extends FrameLayout implements BookContentView.Se
viewContents.remove(0);
}
state = ONLYPRE;
- if(durPageView.getDurChapterIndex()+1 <=durPageView.getChapterAll()-1 || durPageView.getDurPageIndex()+1 <= durPageView.getPageAll()-1){
+ if (durPageView.getDurChapterIndex() + 1 <= durPageView.getChapterAll() - 1 || durPageView.getDurPageIndex() + 1 <= durPageView.getPageAll() - 1) {
addNextPage(durPageView.getDurChapterIndex(), durPageView.getChapterAll(), durPageView.getDurPageIndex(), durPageView.getPageAll());
if (state == NONE)
state = ONLYNEXT;
@@ -431,7 +450,7 @@ public class ContentSwitchView extends FrameLayout implements BookContentView.Se
private ViewTreeObserver.OnGlobalLayoutListener layoutInitListener = new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
- if(bookReadInitListener !=null){
+ if (bookReadInitListener != null) {
bookReadInitListener.success();
}
durPageView.getTvContent().getViewTreeObserver().removeOnGlobalLayoutListener(layoutInitListener);
@@ -456,25 +475,25 @@ public class ContentSwitchView extends FrameLayout implements BookContentView.Se
return durPageView.getTvContent().getPaint();
}
- public int getContentWidth(){
+ public int getContentWidth() {
return durPageView.getTvContent().getWidth();
}
- public void changeBg(){
- for(BookContentView item : viewContents){
+ public void changeBg() {
+ for (BookContentView item : viewContents) {
item.setBg(readBookControl);
}
}
- public void changeTextSize(){
- for(BookContentView item : viewContents){
+ public void changeTextSize() {
+ for (BookContentView item : viewContents) {
item.setTextKind(readBookControl);
}
loadDataListener.initData(durPageView.getLineCount(durHeight));
}
- public boolean onKeyDown(int keyCode, KeyEvent event){
- if(readBookControl.getCanKeyTurn() && keyCode == KeyEvent.KEYCODE_VOLUME_DOWN){
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+ if (readBookControl.getCanKeyTurn() && keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
if (state == PREANDNEXT || state == ONLYNEXT) {
int tempIndex = (state == PREANDNEXT ? 1 : 0);
initMoveSuccessAnim(viewContents.get(tempIndex), -getWidth());
@@ -482,7 +501,7 @@ public class ContentSwitchView extends FrameLayout implements BookContentView.Se
noNext();
}
return true;
- }else if(readBookControl.getCanKeyTurn() && keyCode == KeyEvent.KEYCODE_VOLUME_UP){
+ } else if (readBookControl.getCanKeyTurn() && keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
if (state == PREANDNEXT || state == ONLYPRE) {
initMoveSuccessAnim(viewContents.get(0), 0);
} else {
@@ -493,10 +512,10 @@ public class ContentSwitchView extends FrameLayout implements BookContentView.Se
return false;
}
- public boolean onKeyUp(int keyCode, KeyEvent event){
- if(readBookControl.getCanKeyTurn() && keyCode == KeyEvent.KEYCODE_VOLUME_DOWN){
+ public boolean onKeyUp(int keyCode, KeyEvent event) {
+ if (readBookControl.getCanKeyTurn() && keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
return true;
- }else if(readBookControl.getCanKeyTurn() && keyCode == KeyEvent.KEYCODE_VOLUME_UP){
+ } else if (readBookControl.getCanKeyTurn() && keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
return true;
}
return false;
@@ -510,8 +529,8 @@ public class ContentSwitchView extends FrameLayout implements BookContentView.Se
this.bookReadInitListener = bookReadInitListener;
}
- public void loadError(){
- if(durPageView != null){
+ public void loadError() {
+ if (durPageView != null) {
durPageView.loadError();
}
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 948c713..1450a90 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -3,9 +3,6 @@
5954b3f999f0c76d1b001600
- 9942412
- 5cZ5UKGW2tqEXK0dUiv4ngLEQ7I4Bf6s
-
没有网络
网络连接超时
数据解析失败
diff --git a/app/src/main/res/xml/network_security_config.xml b/app/src/main/res/xml/network_security_config.xml
new file mode 100644
index 0000000..dca93c0
--- /dev/null
+++ b/app/src/main/res/xml/network_security_config.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/basemvplib/build.gradle b/basemvplib/build.gradle
index 56b0896..9954a35 100644
--- a/basemvplib/build.gradle
+++ b/basemvplib/build.gradle
@@ -1,12 +1,12 @@
apply plugin: 'com.android.library'
android {
- compileSdkVersion 25
- buildToolsVersion '25.0.0'
+ compileSdkVersion 28
+ buildToolsVersion '28.0.3'
defaultConfig {
minSdkVersion 14
- targetSdkVersion 25
+ targetSdkVersion 28
versionCode 2
versionName "1.1.0"
}
@@ -19,28 +19,28 @@ android {
}
dependencies {
- compile fileTree(dir: 'libs', include: ['*.jar'])
- testCompile 'junit:junit:4.12'
- compile 'com.android.support:appcompat-v7:25.1.0'
+ api fileTree(dir: 'libs', include: ['*.jar'])
+ testImplementation 'junit:junit:4.12'
+ api 'com.android.support:appcompat-v7:28.0.0'
//RxAndroid
- compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
- compile 'io.reactivex.rxjava2:rxjava:2.0.1'
+ api 'io.reactivex.rxjava2:rxandroid:2.1.0'
+ api 'io.reactivex.rxjava2:rxjava:2.2.5'
//Rxlifecycle
- compile 'com.trello.rxlifecycle2:rxlifecycle:2.0.1'
- compile 'com.trello.rxlifecycle2:rxlifecycle-android:2.0.1' // If you want to bind to Android-specific lifecycles
- compile 'com.trello.rxlifecycle2:rxlifecycle-components:2.0.1' // If you want pre-written Activities and Fragments you can subclass as providers
- compile 'com.trello.rxlifecycle2:rxlifecycle-navi:2.0.1' // If you want to use Navi for providers
- compile 'com.trello.rxlifecycle2:rxlifecycle-kotlin:2.0.1' // If you want to use Kotlin syntax
+ api 'com.trello.rxlifecycle2:rxlifecycle:2.0.1'
+ api 'com.trello.rxlifecycle2:rxlifecycle-android:2.0.1' // If you want to bind to Android-specific lifecycles
+ api 'com.trello.rxlifecycle2:rxlifecycle-components:2.0.1' // If you want pre-written Activities and Fragments you can subclass as providers
+ api 'com.trello.rxlifecycle2:rxlifecycle-navi:2.0.1' // If you want to use Navi for providers
+ api 'com.trello.rxlifecycle2:rxlifecycle-kotlin:2.0.1' // If you want to use Kotlin syntax
//Retrofit
- compile 'com.squareup.retrofit2:retrofit:2.2.0'
- compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'
- compile 'com.squareup.retrofit2:converter-scalars:2.2.0'
+ api 'com.squareup.retrofit2:retrofit:2.2.0'
+ api 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'
+ api 'com.squareup.retrofit2:converter-scalars:2.2.0'
//RxBus
- compile ('com.hwangjr.rxbus:rxbus:2.0.0-beta') {
+ api ('com.hwangjr.rxbus:rxbus:2.0.0-beta') {
exclude group: 'com.jakewharton.timber', module: 'timber'
}
}
\ No newline at end of file
diff --git a/basemvplib/src/main/java/com/monke/basemvplib/impl/BaseActivity.java b/basemvplib/src/main/java/com/monke/basemvplib/impl/BaseActivity.java
index 2ad438a..731ca71 100644
--- a/basemvplib/src/main/java/com/monke/basemvplib/impl/BaseActivity.java
+++ b/basemvplib/src/main/java/com/monke/basemvplib/impl/BaseActivity.java
@@ -65,6 +65,11 @@ public abstract class BaseActivity extends RxAppCompatActi
}
}
+ @Override
+ protected void onPause() {
+ super.onPause();
+ }
+
/**
* P层解绑V层
*/
diff --git a/build.gradle b/build.gradle
index 2cb82cc..43153d6 100644
--- a/build.gradle
+++ b/build.gradle
@@ -3,9 +3,14 @@ buildscript {
repositories {
jcenter()
mavenCentral()
+ maven {
+ url 'https://maven.google.com/'
+ name 'Google'
+ }
+ google()
}
dependencies {
- classpath 'com.android.tools.build:gradle:2.3.3'
+ classpath 'com.android.tools.build:gradle:3.2.1'
classpath 'org.greenrobot:greendao-gradle-plugin:3.0.0'
}
}
@@ -13,6 +18,10 @@ buildscript {
allprojects {
repositories {
jcenter()
+ maven {
+ url 'https://maven.google.com/'
+ name 'Google'
+ }
}
}
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index a047b7a..f6c35e4 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Fri May 26 22:05:25 CST 2017
+#Wed Jan 02 23:04:20 CST 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
diff --git a/projectFilesBackup/.idea/workspace.xml b/projectFilesBackup/.idea/workspace.xml
deleted file mode 100644
index f6d9b91..0000000
--- a/projectFilesBackup/.idea/workspace.xml
+++ /dev/null
@@ -1,3520 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1498441612398
-
- 1498441612398
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file