去除百度自动更新SDK

修复小米8等刘海屏 在搜索页无法正常使用的BUG
阅读页 对于大分辨率(2K)用户的滑动/点击优化
Monke 7 years ago
parent 8736ac544c
commit 287719d550

@ -1 +0,0 @@
MonkeyBook

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<resourceExtensions />
<wildcardResourcePatterns>
<entry name="!?*.java" />
<entry name="!?*.form" />
<entry name="!?*.class" />
<entry name="!?*.groovy" />
<entry name="!?*.scala" />
<entry name="!?*.flex" />
<entry name="!?*.kt" />
<entry name="!?*.clj" />
<entry name="!?*.aj" />
</wildcardResourcePatterns>
<annotationProcessing>
<profile default="true" name="Default" enabled="false">
<processorPath useClasspath="true" />
</profile>
</annotationProcessing>
</component>
</project>

@ -1,3 +0,0 @@
<component name="CopyrightManager">
<settings default="" />
</component>

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="PROJECT" charset="UTF-8" />
</component>
</project>

@ -1,62 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="EntryPointsManager">
<entry_points version="2.0" />
</component>
<component name="NullableNotNullManager">
<option name="myDefaultNullable" value="android.support.annotation.Nullable" />
<option name="myDefaultNotNull" value="android.support.annotation.NonNull" />
<option name="myNullables">
<value>
<list size="4">
<list size="7">
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
<item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
<item index="3" class="java.lang.String" itemvalue="android.support.annotation.Nullable" />
<item index="2" class="java.lang.String" itemvalue="javax.annotation.CheckForNull" />
<item index="3" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
<item index="4" class="java.lang.String" itemvalue="android.support.annotation.Nullable" />
<item index="5" class="java.lang.String" itemvalue="androidx.annotation.Nullable" />
<item index="6" class="java.lang.String" itemvalue="androidx.annotation.RecentlyNullable" />
</list>
</value>
</option>
<option name="myNotNulls">
<value>
<list size="4">
<list size="6">
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
<item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
<item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" />
<item index="4" class="java.lang.String" itemvalue="androidx.annotation.NonNull" />
<item index="5" class="java.lang.String" itemvalue="androidx.annotation.RecentlyNonNull" />
</list>
</value>
</option>
</component>
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
<OptionsSetting value="true" id="Add" />
<OptionsSetting value="true" id="Remove" />
<OptionsSetting value="true" id="Checkout" />
<OptionsSetting value="true" id="Update" />
<OptionsSetting value="true" id="Status" />
<OptionsSetting value="true" id="Edit" />
<ConfirmationsSetting value="0" id="Add" />
<ConfirmationsSetting value="0" id="Remove" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
<component name="masterDetails">
<states>
<state key="ProjectJDKs.UI">
<settings>
<last-edited>1.8</last-edited>
<splitter-proportions>
<option name="proportions">
<list>
<option value="0.2" />
</list>
</option>
</splitter-proportions>
</settings>
</state>
</states>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
</project>

@ -2,7 +2,7 @@
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/MonkeyBook.iml" filepath="$PROJECT_DIR$/MonkeyBook.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/MONKOVEL.iml" filepath="$PROJECT_DIR$/.idea/MONKOVEL.iml" />
<module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
<module fileurl="file://$PROJECT_DIR$/basemvplib/basemvplib.iml" filepath="$PROJECT_DIR$/basemvplib/basemvplib.iml" />
</modules>

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

@ -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">
<activity
android:name=".view.impl.WelcomeActivity"
android:screenOrientation="portrait">
@ -59,26 +60,9 @@
android:screenOrientation="portrait"
android:theme="@style/CAppTransparentTheme" />
<meta-data
android:name="BDAPPID"
android:value="@string/baidu_app_id" />
<meta-data
android:name="BDAPPKEY"
android:value="@string/baidu_app_key" />
<meta-data
android:name="UMENG_CHANNEL_VALUE"
android:value="${UMENG_CHANNEL_VALUE}" />
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/bdp_update_filepaths" />
</provider>
</application>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
@ -87,6 +71,5 @@
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-sdk android:minSdkVersion="8"></uses-sdk>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
</manifest>

@ -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;
}
}

@ -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<IMainPresenter> 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);
}

@ -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<ISearchPresenter> 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<ISearchPresenter> 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<ISearchPresenter> 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<ISearchPresenter> 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<ISearchPresenter> 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<ISearchPresenter> implements I
}
}
});
searchHistoryAdapter.setOnItemClickListener(new SearchHistoryAdapter.OnItemClickListener() {
@Override
public void itemClick(SearchHistoryBean searchHistoryBean) {
@ -190,28 +167,23 @@ public class SearchActivity extends MBaseActivity<ISearchPresenter> 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<ISearchPresenter> 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<ISearchPresenter> 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<ISearchPresenter> 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<ISearchPresenter> 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<ISearchPresenter> 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<ISearchPresenter> 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<ISearchPresenter> 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<ISearchPresenter> 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<ISearchPresenter> 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<ISearchPresenter> 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<SearchHistoryBean> datas) {
searchHistoryAdapter.replaceAll(datas);
@ -447,63 +400,54 @@ public class SearchActivity extends MBaseActivity<ISearchPresenter> implements I
tvSearchHistoryClean.setVisibility(View.INVISIBLE);
}
}
@Override
public void refreshSearchBook(List<SearchBookBean> 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<SearchBookBean> 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<ISearchPresenter> 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;
}
}
}

@ -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<BookContentView> 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();
}
}

@ -3,9 +3,6 @@
<string name="umeng_key">5954b3f999f0c76d1b001600</string>
<string name="baidu_app_id">9942412</string>
<string name="baidu_app_key">5cZ5UKGW2tqEXK0dUiv4ngLEQ7I4Bf6s</string>
<string name="net_error_10001">没有网络</string>
<string name="net_error_10002">网络连接超时</string>
<string name="net_error_10003">数据解析失败</string>

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>

@ -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'
}
}

@ -65,6 +65,11 @@ public abstract class BaseActivity<T extends IPresenter> extends RxAppCompatActi
}
}
@Override
protected void onPause() {
super.onPause();
}
/**
* PV
*/

@ -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'
}
}
}

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

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save