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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file