|
@ -2,7 +2,7 @@
|
||||||
<litepal>
|
<litepal>
|
||||||
<dbname value="book" ></dbname>
|
<dbname value="book" ></dbname>
|
||||||
|
|
||||||
<version value="3" ></version>
|
<version value="4" ></version>
|
||||||
|
|
||||||
<list>
|
<list>
|
||||||
<mapping class="com.novelbook.android.db.Chapter"></mapping>
|
<mapping class="com.novelbook.android.db.Chapter"></mapping>
|
||||||
|
|
|
@ -521,7 +521,7 @@ public class BookActivity extends Activity_base {
|
||||||
|
|
||||||
boolean isLocalDbExist = LitePal.isExist(Novel.class, "novelId=?", novelId+"");
|
boolean isLocalDbExist = LitePal.isExist(Novel.class, "novelId=?", novelId+"");
|
||||||
|
|
||||||
|
showProgressDialog(false,"正在加载...");
|
||||||
BookSubscribe.getNovel(novelId, new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() {
|
BookSubscribe.getNovel(novelId, new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(String result) {
|
public void onSuccess(String result) {
|
||||||
|
|
|
@ -49,6 +49,7 @@ import com.novelbook.android.netsubscribe.BookSubscribe;
|
||||||
import com.novelbook.android.netutils.NetUtil;
|
import com.novelbook.android.netutils.NetUtil;
|
||||||
import com.novelbook.android.netutils.OnSuccessAndFaultListener;
|
import com.novelbook.android.netutils.OnSuccessAndFaultListener;
|
||||||
import com.novelbook.android.netutils.OnSuccessAndFaultSub;
|
import com.novelbook.android.netutils.OnSuccessAndFaultSub;
|
||||||
|
import com.novelbook.android.utils.Constants;
|
||||||
import com.novelbook.android.utils.ImageUtil;
|
import com.novelbook.android.utils.ImageUtil;
|
||||||
import com.novelbook.android.utils.MyImageLoader;
|
import com.novelbook.android.utils.MyImageLoader;
|
||||||
import com.novelbook.android.utils.OnItemClickListener;
|
import com.novelbook.android.utils.OnItemClickListener;
|
||||||
|
@ -244,6 +245,12 @@ public abstract class BasicFragment extends Fragment {
|
||||||
|
|
||||||
}
|
}
|
||||||
void showProgressDialog(boolean flag,String msg){
|
void showProgressDialog(boolean flag,String msg){
|
||||||
|
if(!Constants.showDialogOnUi){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(pageNo >1 && !Constants.showDialogOnUiPage){
|
||||||
|
return;
|
||||||
|
}
|
||||||
if(getActivity()==null){
|
if(getActivity()==null){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,6 +63,7 @@ public class CatalogFragment extends BasicFragment implements MarkActivity.Sortc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
boolean isAsc = true;
|
boolean isAsc = true;
|
||||||
|
boolean isFirstLoad = true;
|
||||||
@Override
|
@Override
|
||||||
protected void fillData() {
|
protected void fillData() {
|
||||||
catalogueList.clear();
|
catalogueList.clear();
|
||||||
|
@ -83,8 +84,9 @@ public class CatalogFragment extends BasicFragment implements MarkActivity.Sortc
|
||||||
catalogueAdapter.notifyDataSetChanged();
|
catalogueAdapter.notifyDataSetChanged();
|
||||||
|
|
||||||
int count= lv_catalogue.getCount();
|
int count= lv_catalogue.getCount();
|
||||||
if(count >=pageFactory.getCurrentChapter() ){
|
if(count >=pageFactory.getCurrentChapter()&& isFirstLoad){
|
||||||
lv_catalogue.setSelection(currentChp);
|
lv_catalogue.setSelection(currentChp);
|
||||||
|
isFirstLoad =false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* tvTitle.setText(pageFactory.getBookName());
|
/* tvTitle.setText(pageFactory.getBookName());
|
||||||
|
@ -150,7 +152,7 @@ public class CatalogFragment extends BasicFragment implements MarkActivity.Sortc
|
||||||
}
|
}
|
||||||
|
|
||||||
int slepttime = 0;
|
int slepttime = 0;
|
||||||
while (NetUtil.isNetworkConnected() &&( slepttime < 1000 && ( pageFactory.isReadingCatalogs() || pageFactory.getChapters().size() == 0))) {
|
while (NetUtil.isNetworkConnected() &&( slepttime < 100 && ( pageFactory.isReadingCatalogs() || pageFactory.getChapters().size() == 0))) {
|
||||||
try {
|
try {
|
||||||
Log.d(TAG, String .format("prepare book: to open book cate to sleep %s" , 50));
|
Log.d(TAG, String .format("prepare book: to open book cate to sleep %s" , 50));
|
||||||
sleep(50);
|
sleep(50);
|
||||||
|
@ -206,7 +208,9 @@ public class CatalogFragment extends BasicFragment implements MarkActivity.Sortc
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void initViews() {
|
protected void initViews() {
|
||||||
|
lv_catalogue.setFastScrollEnabled(true);
|
||||||
|
|
||||||
|
//lv_catalogue.setFastScrollStyle(R.style.FastScrollTheme); //不起作用
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -11,6 +11,7 @@ import android.support.design.widget.BottomSheetDialog;
|
||||||
import android.support.v7.widget.GridLayoutManager;
|
import android.support.v7.widget.GridLayoutManager;
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
import android.util.Log;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
@ -26,11 +27,17 @@ import com.novelbook.android.R;
|
||||||
import com.novelbook.android.db.Novel;
|
import com.novelbook.android.db.Novel;
|
||||||
|
|
||||||
import com.novelbook.android.filechooser.FileChooserActivity;
|
import com.novelbook.android.filechooser.FileChooserActivity;
|
||||||
|
import com.novelbook.android.netsubscribe.BookSubscribe;
|
||||||
import com.novelbook.android.netutils.NetUtil;
|
import com.novelbook.android.netutils.NetUtil;
|
||||||
|
import com.novelbook.android.netutils.OnSuccessAndFaultListener;
|
||||||
|
import com.novelbook.android.netutils.OnSuccessAndFaultSub;
|
||||||
|
import com.novelbook.android.utils.Constants;
|
||||||
|
import com.novelbook.android.utils.GsonUtil;
|
||||||
import com.novelbook.android.utils.MyImageLoader;
|
import com.novelbook.android.utils.MyImageLoader;
|
||||||
import com.novelbook.android.utils.OnItemClickListener;
|
import com.novelbook.android.utils.OnItemClickListener;
|
||||||
import com.novelbook.android.adapter.BookListAdapter;
|
import com.novelbook.android.adapter.BookListAdapter;
|
||||||
|
|
||||||
|
import org.json.JSONObject;
|
||||||
import org.litepal.LitePal;
|
import org.litepal.LitePal;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
@ -57,7 +64,7 @@ public class Fragment_Shelf extends BasicFragment {
|
||||||
RecyclerView mRecyclerView;
|
RecyclerView mRecyclerView;
|
||||||
// private List<Novel> mDatas;
|
// private List<Novel> mDatas;
|
||||||
private BookListAdapter mAdapter;
|
private BookListAdapter mAdapter;
|
||||||
|
List<Novel> lstUpdate = new ArrayList<Novel>();
|
||||||
private List<Novel> bookLists;
|
private List<Novel> bookLists;
|
||||||
// private ShelfAdapter adapter;
|
// private ShelfAdapter adapter;
|
||||||
|
|
||||||
|
@ -74,7 +81,9 @@ public class Fragment_Shelf extends BasicFragment {
|
||||||
return fragment;
|
return fragment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void loadNovelsOnShelf(){
|
||||||
|
bookLists = Novel.getNovelsOnShelf();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -82,6 +91,48 @@ public class Fragment_Shelf extends BasicFragment {
|
||||||
return R.layout.fragment_fragment__shelf;
|
return R.layout.fragment_fragment__shelf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* to get updated info from server
|
||||||
|
*/
|
||||||
|
private void getUpdatedData(){
|
||||||
|
List<Integer> novelIds;
|
||||||
|
OnSuccessAndFaultListener successAndFaultListener = new OnSuccessAndFaultListener() {
|
||||||
|
@Override
|
||||||
|
public void onSuccess(String result) {
|
||||||
|
|
||||||
|
// mFirstPage= gson.fromJson(result, FirstPage.class);
|
||||||
|
try {
|
||||||
|
|
||||||
|
lstUpdate = GsonUtil. parserJsonArray(result, Constants.BLOCK_TITLE_NOVELS);
|
||||||
|
if(lstUpdate.size()>0) {
|
||||||
|
for (Novel novel2 : lstUpdate) {
|
||||||
|
novel2.save();//更新本地信息
|
||||||
|
}
|
||||||
|
|
||||||
|
loadNovelsOnShelf();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
handler.sendEmptyMessage(1);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFault(String errorMsg) {
|
||||||
|
//失败
|
||||||
|
Log.d(TAG, "error on get firstpage: " + errorMsg);
|
||||||
|
handler.sendEmptyMessage(1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// BookSubscribe.getCateNovelList(cate, pageNo, tab1Pos+1, tab3Pos+1, new OnSuccessAndFaultSub(successAndFaultListener, getActivity()));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initData() {
|
public void initData() {
|
||||||
|
|
||||||
|
@ -89,9 +140,15 @@ public class Fragment_Shelf extends BasicFragment {
|
||||||
// mDatas = initData(mDatas,'X');
|
// mDatas = initData(mDatas,'X');
|
||||||
|
|
||||||
// bookLists = LitePal.where("isOnShelf=? or novelId=? ","1","").find(Novel.class);
|
// bookLists = LitePal.where("isOnShelf=? or novelId=? ","1","").find(Novel.class);
|
||||||
bookLists = Novel.getNovelsOnShelf();
|
loadNovelsOnShelf();
|
||||||
|
getUpdatedData();
|
||||||
flag = new boolean[bookLists.size()];
|
flag = new boolean[bookLists.size()];
|
||||||
|
|
||||||
|
if(bookLists.size()>0) { //TODO: to remove
|
||||||
|
bookLists.get(0).setUpdated(true);
|
||||||
|
// bookLists.get(bookLists.size()-1).setUpdated(true);
|
||||||
|
}
|
||||||
|
|
||||||
mAdapter = new BookListAdapter(activity,bookLists,R.layout.recycle_list_item,new OnItemClickListener()
|
mAdapter = new BookListAdapter(activity,bookLists,R.layout.recycle_list_item,new OnItemClickListener()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -134,10 +191,20 @@ public class Fragment_Shelf extends BasicFragment {
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
protected void fillData() {
|
protected void fillData() {
|
||||||
|
|
||||||
|
if(bookLists.size()==0){
|
||||||
|
// return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
mAdapter.setData(bookLists);
|
||||||
|
// mAdapter.notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initReceyleView() {
|
public void initReceyleView() {
|
||||||
initData();
|
// initData();
|
||||||
// mRecyclerView.setLayoutManager(new LinearLayoutManager(this.activity));
|
// mRecyclerView.setLayoutManager(new LinearLayoutManager(this.activity));
|
||||||
mRecyclerView.setLayoutManager(new GridLayoutManager(activity,3));
|
mRecyclerView.setLayoutManager(new GridLayoutManager(activity,3));
|
||||||
mRecyclerView.setAdapter(mAdapter );
|
mRecyclerView.setAdapter(mAdapter );
|
||||||
|
@ -238,13 +305,17 @@ public class Fragment_Shelf extends BasicFragment {
|
||||||
Novel nv = bookLists.get(i);
|
Novel nv = bookLists.get(i);
|
||||||
if(nv.isLocalBook())
|
if(nv.isLocalBook())
|
||||||
{
|
{
|
||||||
|
|
||||||
nv.delete();
|
nv.delete();
|
||||||
|
|
||||||
//TODO: remove cache on a new thread
|
//TODO: remove cache on a new thread
|
||||||
//Fileutil.deleteDir(file)
|
//Fileutil.deleteDir(file)
|
||||||
}else{
|
}else{
|
||||||
nv.setOnShelf(false);
|
Log.d(TAG, "shelfZhengliSubmit: to delete novel " + nv.getName());
|
||||||
nv.save();
|
nv.setToDefault("isOnShelf");
|
||||||
// nv.update(nv.getId()); //not work,,,If you set a default value to a field, the corresponding column won't be updated.
|
//nv.setOnShelf(false);
|
||||||
|
nv.update(nv.getId());
|
||||||
|
// nv.update(nv.getId()); //not work,,,If you set a default value to a field, the corresponding column won't be updated.
|
||||||
}
|
}
|
||||||
|
|
||||||
// flag = new boolean[bookLists.size()];
|
// flag = new boolean[bookLists.size()];
|
||||||
|
@ -389,12 +460,15 @@ public class Fragment_Shelf extends BasicFragment {
|
||||||
// 如果设置了回调,则设置点击事件
|
// 如果设置了回调,则设置点击事件
|
||||||
if (mOnItemClickListener != null)
|
if (mOnItemClickListener != null)
|
||||||
{
|
{
|
||||||
|
holder.checkBox.setOnCheckedChangeListener(null);//先设置一次CheckBox的选中监听器,传入参数null
|
||||||
|
holder.checkBox.setChecked(flag[position]);//用数组中的值设置CheckBox的选中状态
|
||||||
|
|
||||||
holder.itemView.setOnClickListener(new View.OnClickListener()
|
holder.itemView.setOnClickListener(new View.OnClickListener()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v)
|
public void onClick(View v)
|
||||||
{
|
{
|
||||||
|
holder.checkBox.setChecked( !holder.checkBox.isChecked());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -407,8 +481,7 @@ public class Fragment_Shelf extends BasicFragment {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
holder.checkBox.setOnCheckedChangeListener(null);//先设置一次CheckBox的选中监听器,传入参数null
|
|
||||||
holder.checkBox.setChecked(flag[position]);//用数组中的值设置CheckBox的选中状态
|
|
||||||
|
|
||||||
//再设置一次CheckBox的选中监听器,当CheckBox的选中状态发生改变时,把改变后的状态储存在数组中
|
//再设置一次CheckBox的选中监听器,当CheckBox的选中状态发生改变时,把改变后的状态储存在数组中
|
||||||
holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
||||||
|
|
|
@ -200,7 +200,7 @@ public class Fragment_booklist extends BasicFragment {
|
||||||
mMoreData = GsonUtil. parserJsonArray(jsonObject,Constants.BLOCK_TITLE_NOVELS);
|
mMoreData = GsonUtil. parserJsonArray(jsonObject,Constants.BLOCK_TITLE_NOVELS);
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace(); Log.e(TAG, "onSuccess: 解析失败",e );
|
||||||
}
|
}
|
||||||
handler.sendEmptyMessage(1);
|
handler.sendEmptyMessage(1);
|
||||||
|
|
||||||
|
@ -214,7 +214,7 @@ public class Fragment_booklist extends BasicFragment {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
showProgressDialog(false,"正在加载...");
|
||||||
|
|
||||||
Log.d(TAG,String.format("fn is %s",fn) );
|
Log.d(TAG,String.format("fn is %s",fn) );
|
||||||
|
|
||||||
|
@ -229,9 +229,11 @@ public class Fragment_booklist extends BasicFragment {
|
||||||
String resultstr = jsonObject.getString("rank") ;
|
String resultstr = jsonObject.getString("rank") ;
|
||||||
pageCount = jsonObject.getJSONObject("rank").getInt("pageCount");
|
pageCount = jsonObject.getJSONObject("rank").getInt("pageCount");
|
||||||
mMoreData = GsonUtil. parserJsonArray(resultstr,Constants.BLOCK_TITLE_NOVELS);
|
mMoreData = GsonUtil. parserJsonArray(resultstr,Constants.BLOCK_TITLE_NOVELS);
|
||||||
|
Log.d(TAG, "排行榜详细 onSuccess: pageCount " + pageCount);
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
Log.e(TAG, "onSuccess: 解析失败",e );
|
||||||
}
|
}
|
||||||
handler.sendEmptyMessage(1);
|
handler.sendEmptyMessage(1);
|
||||||
|
|
||||||
|
|
|
@ -212,7 +212,7 @@ final String TAG = Fragment_paihang.class.getSimpleName();
|
||||||
handler.sendEmptyMessage(1);
|
handler.sendEmptyMessage(1);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
showProgressDialog(false,"正在加载...");
|
||||||
BookSubscribe.getCateNovelList(cate, pageNo, tab1Pos+1, tab3Pos+1, new OnSuccessAndFaultSub(successAndFaultListener, getActivity()));
|
BookSubscribe.getCateNovelList(cate, pageNo, tab1Pos+1, tab3Pos+1, new OnSuccessAndFaultSub(successAndFaultListener, getActivity()));
|
||||||
|
|
||||||
|
|
||||||
|
@ -226,7 +226,7 @@ final String TAG = Fragment_paihang.class.getSimpleName();
|
||||||
else {
|
else {
|
||||||
initTabs();
|
initTabs();
|
||||||
}
|
}
|
||||||
//showProgressDialog(false,"加载。。。。");
|
showProgressDialog(false,"正在加载...");
|
||||||
new Thread(){
|
new Thread(){
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
|
|
@ -140,6 +140,8 @@ public class Main2Activity extends Activity_base
|
||||||
// toolbar= (Toolbar) findViewById(R.id.toolbar);
|
// toolbar= (Toolbar) findViewById(R.id.toolbar);
|
||||||
|
|
||||||
setSupportActionBar(toolbar);
|
setSupportActionBar(toolbar);
|
||||||
|
getSupportActionBar().setHomeButtonEnabled(false);
|
||||||
|
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
|
||||||
// toolbar.setNavigationIcon(R.mipmap.ic_launcher_round);//设置导航栏图标
|
// toolbar.setNavigationIcon(R.mipmap.ic_launcher_round);//设置导航栏图标
|
||||||
// toolbar.setLogo(R.mipmap.ic_launcher);//设置app logo
|
// toolbar.setLogo(R.mipmap.ic_launcher);//设置app logo
|
||||||
// toolbar.setTitle("Title");//设置主标题
|
// toolbar.setTitle("Title");//设置主标题
|
||||||
|
@ -310,8 +312,9 @@ private int bottomSelectedIndex;
|
||||||
boolean showTitle = bottomSelectedIndex !=1;
|
boolean showTitle = bottomSelectedIndex !=1;
|
||||||
String title = bottomSelectedIndex==0?"我的书架":"排行榜";
|
String title = bottomSelectedIndex==0?"我的书架":"排行榜";
|
||||||
// txtTitle.setVisibility(View.GONE);
|
// txtTitle.setVisibility(View.GONE);
|
||||||
// toggle.setDrawerIndicatorEnabled(showToggle);
|
toggle.setDrawerIndicatorEnabled(showToggle);
|
||||||
// toggle.syncState();
|
toggle.syncState();
|
||||||
|
|
||||||
|
|
||||||
//spinner.setVisibility( showSpinner?View.VISIBLE:View.GONE);
|
//spinner.setVisibility( showSpinner?View.VISIBLE:View.GONE);
|
||||||
rgSex.setVisibility( showSpinner?View.VISIBLE:View.GONE);
|
rgSex.setVisibility( showSpinner?View.VISIBLE:View.GONE);
|
||||||
|
@ -486,10 +489,14 @@ private int bottomSelectedIndex;
|
||||||
swithToolbarItems();
|
swithToolbarItems();
|
||||||
botoomNavigation.setVisibility(View.VISIBLE);
|
botoomNavigation.setVisibility(View.VISIBLE);
|
||||||
fragment_shelf.initReceyleView();
|
fragment_shelf.initReceyleView();
|
||||||
|
toggle.setDrawerIndicatorEnabled(true);
|
||||||
|
toggle.syncState();
|
||||||
|
|
||||||
}else {
|
}else {
|
||||||
toggle.setDrawerIndicatorEnabled(false);
|
toggle.setDrawerIndicatorEnabled(false);
|
||||||
|
|
||||||
toggle.syncState();
|
toggle.syncState();
|
||||||
|
|
||||||
supportInvalidateOptionsMenu();
|
supportInvalidateOptionsMenu();
|
||||||
isShelfZhengli = true;
|
isShelfZhengli = true;
|
||||||
botoomNavigation.setVisibility(View.GONE);
|
botoomNavigation.setVisibility(View.GONE);
|
||||||
|
|
|
@ -662,36 +662,7 @@ public class ReadActivity extends Activity_base implements SpeechSynthesizerLis
|
||||||
// return bookpage;
|
// return bookpage;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
/**
|
|
||||||
* 隐藏菜单。沉浸式阅读
|
|
||||||
*/
|
|
||||||
public void hideSystemUI() {
|
|
||||||
// Set the IMMERSIVE flag.
|
|
||||||
// Set the content to appear under the system bars so that the content
|
|
||||||
// doesn't resize when the system bars hide and show.
|
|
||||||
getWindow().getDecorView().setSystemUiVisibility(
|
|
||||||
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
|
|
||||||
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
|
|
||||||
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
|
||||||
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
|
|
||||||
| View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
|
|
||||||
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
|
|
||||||
);
|
|
||||||
|
|
||||||
getWindow().setNavigationBarColor(getResources().getColor(R.color.read_dialog_bg));
|
|
||||||
pageFactory.setBusy(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void showSystemUI() {
|
|
||||||
getWindow().getDecorView().setSystemUiVisibility(
|
|
||||||
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
|
|
||||||
// | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
|
|
||||||
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
|
||||||
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
|
|
||||||
| View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
|
|
||||||
);
|
|
||||||
pageFactory.setBusy(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
//显示书本进度
|
//显示书本进度
|
||||||
public void showProgressBar(float progress){
|
public void showProgressBar(float progress){
|
||||||
|
@ -751,15 +722,45 @@ public class ReadActivity extends Activity_base implements SpeechSynthesizerLis
|
||||||
|
|
||||||
Animation bottomAnim = AnimationUtils.loadAnimation(this, R.anim.dialog_enter);
|
Animation bottomAnim = AnimationUtils.loadAnimation(this, R.anim.dialog_enter);
|
||||||
Animation topAnim = AnimationUtils.loadAnimation(this, R.anim.dialog_top_enter);
|
Animation topAnim = AnimationUtils.loadAnimation(this, R.anim.dialog_top_enter);
|
||||||
rl_bottom.startAnimation(topAnim);
|
rl_bottom.startAnimation(topAnim);
|
||||||
appbar.startAnimation(topAnim);
|
appbar.startAnimation(topAnim);
|
||||||
// ll_top.startAnimation(topAnim);// ll_top.setVisibility(View.VISIBLE);
|
// ll_top.startAnimation(topAnim);// ll_top.setVisibility(View.VISIBLE);
|
||||||
rl_bottom.setVisibility(View.VISIBLE);
|
rl_bottom.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
appbar.setVisibility(View.VISIBLE);
|
appbar.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* 隐藏菜单。沉浸式阅读
|
||||||
|
*/
|
||||||
|
public void hideSystemUI() {
|
||||||
|
// Set the IMMERSIVE flag.
|
||||||
|
// Set the content to appear under the system bars so that the content
|
||||||
|
// doesn't resize when the system bars hide and show.
|
||||||
|
getWindow().getDecorView().setSystemUiVisibility(
|
||||||
|
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
|
||||||
|
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
|
||||||
|
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
||||||
|
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
|
||||||
|
| View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
|
||||||
|
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
|
||||||
|
// | View.SYSTEM_UI_FLAG_IMMERSIVE
|
||||||
|
);
|
||||||
|
|
||||||
|
getWindow().setNavigationBarColor(getResources().getColor(R.color.read_dialog_bg));
|
||||||
|
pageFactory.setBusy(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void showSystemUI() {
|
||||||
|
getWindow().getDecorView().setSystemUiVisibility(
|
||||||
|
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
|
||||||
|
// | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
|
||||||
|
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
||||||
|
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
|
||||||
|
// | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
|
||||||
|
);
|
||||||
|
pageFactory.setBusy(true);
|
||||||
|
}
|
||||||
private void hideReadSetting() {
|
private void hideReadSetting() {
|
||||||
isShow = false;
|
isShow = false;
|
||||||
Animation bottomAnim = AnimationUtils.loadAnimation(this, R.anim.dialog_exit);
|
Animation bottomAnim = AnimationUtils.loadAnimation(this, R.anim.dialog_exit);
|
||||||
|
|
|
@ -36,6 +36,7 @@ public class BookListAdapter extends RecyclerView.Adapter< RecyclerView.ViewHol
|
||||||
// private MyImageLoader loader = new MyImageLoader();
|
// private MyImageLoader loader = new MyImageLoader();
|
||||||
private Context context;
|
private Context context;
|
||||||
private List<Novel> mDatas ;
|
private List<Novel> mDatas ;
|
||||||
|
|
||||||
private OnItemClickListener mOnItemClickListener;
|
private OnItemClickListener mOnItemClickListener;
|
||||||
private int listItemID;
|
private int listItemID;
|
||||||
//private List<Novel> mBooks;
|
//private List<Novel> mBooks;
|
||||||
|
@ -193,8 +194,16 @@ public class BookListAdapter extends RecyclerView.Adapter< RecyclerView.ViewHol
|
||||||
if (holder.tvAuthor != null) holder.tvAuthor.setText(mDatas.get(position).getAuthor());
|
if (holder.tvAuthor != null) holder.tvAuthor.setText(mDatas.get(position).getAuthor());
|
||||||
if (holder.tvCate != null) holder.tvCate.setText(mDatas.get(position).getNovelType());
|
if (holder.tvCate != null) holder.tvCate.setText(mDatas.get(position).getNovelType());
|
||||||
if (holder.tvDesc != null) holder.tvDesc.setText(mDatas.get(position).getDesc());
|
if (holder.tvDesc != null) holder.tvDesc.setText(mDatas.get(position).getDesc());
|
||||||
|
if (holder.tvStatus != null) holder.tvStatus.setText(mDatas.get(position).getProgress());
|
||||||
if (holder.imageView != null && !TextUtils.isEmpty(mDatas.get(position).getCover())) {
|
if (holder.imageView != null && !TextUtils.isEmpty(mDatas.get(position).getCover())) {
|
||||||
ImageUtil.loadImage(context, mDatas.get(position).getCover(), holder.imageView);
|
ImageUtil.loadImage(context, mDatas.get(position).getCover(), holder.imageView);
|
||||||
|
} if (holder.imageUpdate != null) {
|
||||||
|
if( mDatas.get(position).isUpdated()){
|
||||||
|
holder.imageUpdate.setVisibility(View.VISIBLE);
|
||||||
|
}else{
|
||||||
|
holder.imageUpdate.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
if (holder.tvNum != null) holder.tvNum.setText("999");
|
if (holder.tvNum != null) holder.tvNum.setText("999");
|
||||||
// 如果设置了回调,则设置点击事件
|
// 如果设置了回调,则设置点击事件
|
||||||
|
@ -234,6 +243,12 @@ public class BookListAdapter extends RecyclerView.Adapter< RecyclerView.ViewHol
|
||||||
notifyItemRemoved(position);
|
notifyItemRemoved(position);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//to set booklist updated, used in shelf
|
||||||
|
public void setUpdate(List<Novel> lstUpdate) {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public class FooterViewHolder extends RecyclerView.ViewHolder {
|
public class FooterViewHolder extends RecyclerView.ViewHolder {
|
||||||
@BindView(R.id.pbLoad)
|
@BindView(R.id.pbLoad)
|
||||||
ProgressBar mPbLoad;
|
ProgressBar mPbLoad;
|
||||||
|
|
|
@ -14,6 +14,9 @@ import butterknife.ButterKnife;
|
||||||
public class MyViewHolder extends RecyclerView.ViewHolder {
|
public class MyViewHolder extends RecyclerView.ViewHolder {
|
||||||
@BindView(R.id.imageView)
|
@BindView(R.id.imageView)
|
||||||
ImageView imageView;
|
ImageView imageView;
|
||||||
|
@BindView(R.id.imageUpdated)
|
||||||
|
@Nullable
|
||||||
|
ImageView imageUpdate;
|
||||||
@BindView(R.id.title)
|
@BindView(R.id.title)
|
||||||
TextView tvTitle;
|
TextView tvTitle;
|
||||||
@Nullable
|
@Nullable
|
||||||
|
@ -23,10 +26,14 @@ public class MyViewHolder extends RecyclerView.ViewHolder {
|
||||||
@BindView(R.id.category)
|
@BindView(R.id.category)
|
||||||
TextView tvCate;
|
TextView tvCate;
|
||||||
@Nullable
|
@Nullable
|
||||||
|
@BindView(R.id.tvNovelStatus)
|
||||||
|
TextView tvStatus;
|
||||||
|
@Nullable
|
||||||
@BindView(R.id.desc)
|
@BindView(R.id.desc)
|
||||||
TextView tvDesc;
|
TextView tvDesc;
|
||||||
@Nullable
|
@Nullable
|
||||||
@BindView(R.id.tvCateNums)
|
@BindView(R.id.tvCateNums)
|
||||||
|
|
||||||
TextView tvNum;
|
TextView tvNum;
|
||||||
public MyViewHolder(View view) {
|
public MyViewHolder(View view) {
|
||||||
super(view);
|
super(view);
|
||||||
|
|
|
@ -34,6 +34,24 @@ public class Novel extends LitePalSupport implements Serializable{
|
||||||
private long lastUpdateTime;
|
private long lastUpdateTime;
|
||||||
private boolean isOnShelf; //是否入书架
|
private boolean isOnShelf; //是否入书架
|
||||||
private boolean isFinished; //是否完本
|
private boolean isFinished; //是否完本
|
||||||
|
private boolean isUpdated;
|
||||||
|
private boolean isTop;//置顶
|
||||||
|
|
||||||
|
public boolean isTop() {
|
||||||
|
return isTop;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTop(boolean top) {
|
||||||
|
isTop = top;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isUpdated() {
|
||||||
|
return isUpdated;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUpdated(boolean updated) {
|
||||||
|
isUpdated = updated;
|
||||||
|
}
|
||||||
|
|
||||||
public String getInfoUrl() {
|
public String getInfoUrl() {
|
||||||
return infoUrl;
|
return infoUrl;
|
||||||
|
|
|
@ -77,7 +77,7 @@ public interface HttpApi {
|
||||||
@GET("page/siteranks")
|
@GET("page/siteranks")
|
||||||
Observable<ResponseBody> getSiteRanks(@Query("sex") int Sex);
|
Observable<ResponseBody> getSiteRanks(@Query("sex") int Sex);
|
||||||
//http://xiaoshuofenxiang.com/api/page/siterank?fn=qidian-yuanchuangfengyunbang&pn=3
|
//http://xiaoshuofenxiang.com/api/page/siterank?fn=qidian-yuanchuangfengyunbang&pn=3
|
||||||
@GET("page/siterank?fn=qidian-yuanchuangfengyunbang&pn=3")
|
@GET("page/siterank")
|
||||||
Observable<ResponseBody> getSiteRankDetail(@Query("fn")String fn,@Query("pn")int pageNo,@Query("sex") int Sex);
|
Observable<ResponseBody> getSiteRankDetail(@Query("fn")String fn,@Query("pn")int pageNo,@Query("sex") int Sex);
|
||||||
@GET( "search/{keyword}/{pageno}")
|
@GET( "search/{keyword}/{pageno}")
|
||||||
Observable<ResponseBody> getSeachNolvelist(@Path("keyword")String keyWord,@Path("pageno")int pageNo,@Query("sex") int Sex);
|
Observable<ResponseBody> getSeachNolvelist(@Path("keyword")String keyWord,@Path("pageno")int pageNo,@Query("sex") int Sex);
|
||||||
|
|
|
@ -545,11 +545,15 @@ public class BookUtil {
|
||||||
int muluRetryCount =0;
|
int muluRetryCount =0;
|
||||||
|
|
||||||
void readChaptersAsync( ) {
|
void readChaptersAsync( ) {
|
||||||
|
if(mSite==null ||mSiteRule ==null){
|
||||||
|
Log.d(TAG,String.format("prepare book loadChapts failed---- %s ,mSite is null? %s ,mSiteRule ==null ? %s", mNovel.getName() ,mSite==null,mSiteRule ==null ));
|
||||||
|
return;
|
||||||
|
}
|
||||||
String url = mSite.getMuluUrl();
|
String url = mSite.getMuluUrl();
|
||||||
Request request = getTagRequest(url);
|
Request request = getTagRequest(url);
|
||||||
mMuluStatus = MuluStatus.isDownloading;
|
mMuluStatus = MuluStatus.isDownloading;
|
||||||
long startTime= new Date().getTime();
|
long startTime= new Date().getTime();
|
||||||
Log.d(TAG,String.format("loadChapts----start download %s 目录 from %s", mNovel.getName() ,url ));
|
Log.d(TAG,String.format("prepare book loadChapts----start download %s 目录 from %s", mNovel.getName() ,url ));
|
||||||
|
|
||||||
/* if(muluRetryCount<3){
|
/* if(muluRetryCount<3){
|
||||||
muluRetryCount++;
|
muluRetryCount++;
|
||||||
|
@ -654,7 +658,10 @@ int muluRetryCount =0;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
void buildChapters( String content ,String url){
|
void buildChapters( String content ,String url){
|
||||||
|
if(mSite==null ||mSiteRule ==null){
|
||||||
|
Log.d(TAG,String.format("prepare book buildChapters failed---- %s ,mSite is null? %s ,mSiteRule ==null ? %s", mNovel.getName() ,mSite==null,mSiteRule ==null ));
|
||||||
|
return;
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
JSONObject siteJson = new JSONObject();
|
JSONObject siteJson = new JSONObject();
|
||||||
|
|
||||||
|
|
|
@ -33,32 +33,55 @@ public class CommonUtil {
|
||||||
|
|
||||||
private static final String TAG= CommonUtil.class.getSimpleName();
|
private static final String TAG= CommonUtil.class.getSimpleName();
|
||||||
public static int getScreenHeight(Context context){
|
public static int getScreenHeight(Context context){
|
||||||
int diff = checkDeviceHasNavigationBar(context);
|
int diff = statusBarDiff(context);
|
||||||
|
int ret=0;
|
||||||
if(diff >0){
|
if(diff >0){
|
||||||
return getDpi(context) -diff; // return height for no navigation bar
|
ret = getRealScreenSize(context).y;// -diff; // return height for no navigation bar //有虚拟按键 honor 8 或 没有虚拟按键但顶部有其他占用高度的 mi8
|
||||||
|
Log.d(TAG, String.format("getNavigationBarSize:screen height is getRealScreenSize(context).y -diff = %s , diff is %s" ,ret ,diff));
|
||||||
|
}else {
|
||||||
|
ret = getAppUsableScreenSize(context).y; //return for with navigationbar //没有虚拟按键 mate20
|
||||||
|
Log.d(TAG, String.format("getNavigationBarSize:screen height is getAppUsableScreenSize(context).y =%s", ret));
|
||||||
}
|
}
|
||||||
return getScreenHeightWithOutBottomBar(context); //return for with navigationbar
|
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 获取是否存在NavigationBar
|
* 获取是否存在NavigationBar
|
||||||
* @param context
|
* @param context
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static int checkDeviceHasNavigationBar(Context context) {
|
public static int statusBarDiff(Context context) {
|
||||||
Point appUsableSize = getAppUsableScreenSize(context);
|
Point appUsableSize = getAppUsableScreenSize(context);
|
||||||
Point realScreenSize = getRealScreenSize(context);
|
Point realScreenSize = getRealScreenSize(context);
|
||||||
|
|
||||||
Log.d(TAG, String.format("getNavigationBarSize: usablesize.y %s,realScreenSize.y %s" +
|
Log.d(TAG, String.format("getNavigationBarSize:getDpi %s,getScreenHeightWithOutBottomBar %s, usablesize.y %s,realScreenSize.y %s" +
|
||||||
",realScreenSize.y -usablesize.y =%s, statusbar height %s"
|
",realScreenSize.y -usablesize.y =%s, statusbar height %s"
|
||||||
,appUsableSize.y ,realScreenSize.y, realScreenSize.y-appUsableSize.y ,getStatusBarHeight(context) ));
|
,getDpi(context) ,getScreenHeightWithOutBottomBar(context),appUsableSize.y ,realScreenSize.y, realScreenSize.y-appUsableSize.y ,getStatusBarHeight(context) ));
|
||||||
Point p = getNavigationBarSize(context);
|
Point p = getNavigationBarSize(context);
|
||||||
// Toast.makeText(context,String.format("getNavigationBarSize: usablesize.y %s,realScreenSize.y %s,diff %s",
|
// Toast.makeText(context,String.format("getNavigationBarSize: usablesize.y %s,realScreenSize.y %s,diff %s",
|
||||||
// appUsableSize.y ,realScreenSize.y,realScreenSize.y-appUsableSize.y - getStatusBarHeight(context)),Toast.LENGTH_LONG).show();
|
// appUsableSize.y ,realScreenSize.y,realScreenSize.y-appUsableSize.y - getStatusBarHeight(context)),Toast.LENGTH_LONG).show();
|
||||||
return realScreenSize.y-appUsableSize.y - getStatusBarHeight(context);
|
return realScreenSize.y-appUsableSize.y - getStatusBarHeight(context);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
//状态栏高度
|
||||||
|
public static int getStatusBarHeight(Context c) {
|
||||||
|
int resourceId = c.getResources()
|
||||||
|
.getIdentifier("status_bar_height", "dimen", "android");
|
||||||
|
if (resourceId > 0) {
|
||||||
|
return c.getResources().getDimensionPixelSize(resourceId);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
//返回值就是导航栏的高度,得到的值单位px
|
||||||
|
public float getNavigationBarHeight(Context c) {
|
||||||
|
float result = 0;
|
||||||
|
int resourceId = c.getResources().getIdentifier("navigation_bar_height", "dimen", "android");
|
||||||
|
if (resourceId > 0) {
|
||||||
|
result = c.getResources().getDimension(resourceId);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
public static Point getNavigationBarSize(Context context) {
|
public static Point getNavigationBarSize(Context context) {
|
||||||
Point appUsableSize = getAppUsableScreenSize(context);
|
Point appUsableSize = getAppUsableScreenSize(context);
|
||||||
Point realScreenSize = getRealScreenSize(context);
|
Point realScreenSize = getRealScreenSize(context);
|
||||||
|
@ -103,54 +126,6 @@ public class CommonUtil {
|
||||||
|
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
public static int getStatusBarHeight(Context c) {
|
|
||||||
int resourceId = c.getResources()
|
|
||||||
.getIdentifier("status_bar_height", "dimen", "android");
|
|
||||||
if (resourceId > 0) {
|
|
||||||
return c.getResources().getDimensionPixelSize(resourceId);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* public static boolean isNavigationBarShow(){
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
|
|
||||||
Display display = getActivity().getWindowManager().getDefaultDisplay();
|
|
||||||
Point size = new Point();
|
|
||||||
Point realSize = new Point();
|
|
||||||
display.getSize(size);
|
|
||||||
display.getRealSize(realSize);
|
|
||||||
boolean result = realSize.y!=size.y;
|
|
||||||
return realSize.y!=size.y;
|
|
||||||
}else {
|
|
||||||
boolean menu = ViewConfiguration.get(getActivity()).hasPermanentMenuKey();
|
|
||||||
boolean back = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);
|
|
||||||
if(menu || back) {
|
|
||||||
return false;
|
|
||||||
}else {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取是否有虚拟按键
|
|
||||||
* 通过判断是否有物理返回键反向判断是否有虚拟按键
|
|
||||||
* mate20 不行
|
|
||||||
* @param context
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
/* public static boolean checkDeviceHasNavigationBar2(Context context) {
|
|
||||||
|
|
||||||
boolean hasMenuKey = ViewConfiguration.get(context)
|
|
||||||
.hasPermanentMenuKey();
|
|
||||||
boolean hasBackKey = KeyCharacterMap
|
|
||||||
.deviceHasKey(KeyEvent.KEYCODE_BACK);
|
|
||||||
if (!hasMenuKey & !hasBackKey) {
|
|
||||||
// 做任何你需要做的,这个设备有一个导航栏
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取虚拟功能键高度
|
* 获取虚拟功能键高度
|
||||||
|
@ -200,7 +175,7 @@ public class CommonUtil {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取 虚拟按键的高度
|
* 获取 虚拟按键+ 顶部状态栏 + x 的高度
|
||||||
* @param context
|
* @param context
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
|
@ -451,5 +426,45 @@ public class CommonUtil {
|
||||||
|
|
||||||
return getDateString(time,"");
|
return getDateString(time,"");
|
||||||
}
|
}
|
||||||
|
/* public static boolean isNavigationBarShow(){
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
|
||||||
|
Display display = getActivity().getWindowManager().getDefaultDisplay();
|
||||||
|
Point size = new Point();
|
||||||
|
Point realSize = new Point();
|
||||||
|
display.getSize(size);
|
||||||
|
display.getRealSize(realSize);
|
||||||
|
boolean result = realSize.y!=size.y;
|
||||||
|
return realSize.y!=size.y;
|
||||||
|
}else {
|
||||||
|
boolean menu = ViewConfiguration.get(getActivity()).hasPermanentMenuKey();
|
||||||
|
boolean back = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);
|
||||||
|
if(menu || back) {
|
||||||
|
return false;
|
||||||
|
}else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取是否有虚拟按键
|
||||||
|
* 通过判断是否有物理返回键反向判断是否有虚拟按键
|
||||||
|
* mate20 不行
|
||||||
|
* @param context
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
/* public static boolean checkDeviceHasNavigationBar2(Context context) {
|
||||||
|
|
||||||
|
boolean hasMenuKey = ViewConfiguration.get(context)
|
||||||
|
.hasPermanentMenuKey();
|
||||||
|
boolean hasBackKey = KeyCharacterMap
|
||||||
|
.deviceHasKey(KeyEvent.KEYCODE_BACK);
|
||||||
|
if (!hasMenuKey & !hasBackKey) {
|
||||||
|
// 做任何你需要做的,这个设备有一个导航栏
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,4 +17,6 @@ public class Constants {
|
||||||
public static String[] lstProgress={"连载中","已完本","新书"};
|
public static String[] lstProgress={"连载中","已完本","新书"};
|
||||||
public static int retryCnt =10;
|
public static int retryCnt =10;
|
||||||
// public static List<String> lstProgress=null;
|
// public static List<String> lstProgress=null;
|
||||||
|
public static boolean showDialogOnUi =true;
|
||||||
|
public static boolean showDialogOnUiPage =false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,6 +69,8 @@ public class PageFactory implements ChangeSource{
|
||||||
private float mBorderWidth;
|
private float mBorderWidth;
|
||||||
// 上下与边缘的距离
|
// 上下与边缘的距离
|
||||||
private float marginHeight ;
|
private float marginHeight ;
|
||||||
|
//满屏 差异
|
||||||
|
private float screenHeihtDiff ;
|
||||||
// 左右与边缘的距离
|
// 左右与边缘的距离
|
||||||
private float measureMarginWidth ;
|
private float measureMarginWidth ;
|
||||||
// 左右与边缘的距离
|
// 左右与边缘的距离
|
||||||
|
@ -455,22 +457,24 @@ public static boolean busy(){
|
||||||
mWidth = metric.widthPixels;
|
mWidth = metric.widthPixels;
|
||||||
// mHeight = metric.heightPixels;
|
// mHeight = metric.heightPixels;
|
||||||
// mHeight = CommonUtil.getDpi(context);
|
// mHeight = CommonUtil.getDpi(context);
|
||||||
mHeight = CommonUtil.getScreenHeight(context);
|
mHeight = CommonUtil.getScreenHeight(context) - CommonUtil.statusBarDiff(context);
|
||||||
sdf = new SimpleDateFormat("HH:mm");//HH:mm为24小时制,hh:mm为12小时制
|
sdf = new SimpleDateFormat("HH:mm");//HH:mm为24小时制,hh:mm为12小时制
|
||||||
date = sdf.format(new java.util.Date());
|
date = sdf.format(new java.util.Date());
|
||||||
df = new DecimalFormat("#0.0");
|
df = new DecimalFormat("#0.0");
|
||||||
|
|
||||||
marginWidth = mContext.getResources().getDimension(R.dimen.readingMarginWidth);
|
marginWidth = mContext.getResources().getDimension(R.dimen.readingMarginWidth);
|
||||||
marginHeight = mContext.getResources().getDimension(R.dimen.readingMarginHeight);
|
marginHeight = mContext.getResources().getDimension(R.dimen.readingMarginHeight);
|
||||||
// Log.d(TAG, "PageFactory: marginHeight +" +marginHeight);
|
// Log.d(TAG, "getNavigationBarSize: orignal marginHeight +" +marginHeight);
|
||||||
// marginHeight = CommonUtil. getStatusBarHeight(mContext);
|
// marginHeight = CommonUtil. getStatusBarHeight(mContext);
|
||||||
Log.d(TAG, "PageFactory: marginHeight " +marginHeight);
|
|
||||||
statusMarginBottom = mContext.getResources().getDimension(R.dimen.reading_status_margin_bottom);
|
statusMarginBottom = mContext.getResources().getDimension(R.dimen.reading_status_margin_bottom);
|
||||||
|
screenHeihtDiff =CommonUtil.statusBarDiff(mContext);
|
||||||
|
Log.d(TAG, "getNavigationBarSize: screenHeihtDiff " +screenHeihtDiff);
|
||||||
lineSpace = context.getResources().getDimension(R.dimen.reading_line_spacing);
|
lineSpace = context.getResources().getDimension(R.dimen.reading_line_spacing);
|
||||||
paragraphSpace = context.getResources().getDimension(R.dimen.reading_paragraph_spacing);
|
paragraphSpace = context.getResources().getDimension(R.dimen.reading_paragraph_spacing);
|
||||||
mVisibleWidth = mWidth - marginWidth * 2;
|
mVisibleWidth = mWidth - marginWidth * 2;
|
||||||
mVisibleHeight = mHeight - marginHeight * 2;
|
mVisibleHeight = mHeight - marginHeight * 2;
|
||||||
|
mHeight +=screenHeihtDiff;
|
||||||
typeface = config.getTypeface();
|
typeface = config.getTypeface();
|
||||||
m_fontSize = config.getFontSize();
|
m_fontSize = config.getFontSize();
|
||||||
lineSpace =config.getLineSpace();
|
lineSpace =config.getLineSpace();
|
||||||
|
@ -686,8 +690,9 @@ public static boolean busy(){
|
||||||
// String strPercent = df.format(fPercent * 100) + "%";//进度文字
|
// String strPercent = df.format(fPercent * 100) + "%";//进度文字
|
||||||
String strPercent = String.format("%s/%s",currentPage.getPageNo(),currentChaptPages.size()) + "页";//进度文字
|
String strPercent = String.format("%s/%s",currentPage.getPageNo(),currentChaptPages.size()) + "页";//进度文字
|
||||||
int nPercentWidth = (int) mBatterryPaint.measureText("10/25页") + 50; //Paint.measureText直接返回參數字串所佔用的寬度
|
int nPercentWidth = (int) mBatterryPaint.measureText("10/25页") + 50; //Paint.measureText直接返回參數字串所佔用的寬度
|
||||||
c.drawText(strPercent, mWidth - nPercentWidth, mHeight - statusMarginBottom, mBatterryPaint);//x y为坐标值
|
float botoomY =mHeight - statusMarginBottom;// +screenHeihtDiff;
|
||||||
c.drawText(date, marginWidth ,mHeight - statusMarginBottom, mBatterryPaint);
|
c.drawText(strPercent, mWidth - nPercentWidth, botoomY, mBatterryPaint);//x y为坐标值
|
||||||
|
c.drawText(date, marginWidth ,botoomY, mBatterryPaint);
|
||||||
// 画电池
|
// 画电池
|
||||||
level = batteryInfoIntent.getIntExtra( "level" , 0 );
|
level = batteryInfoIntent.getIntExtra( "level" , 0 );
|
||||||
int scale = batteryInfoIntent.getIntExtra("scale", 100);
|
int scale = batteryInfoIntent.getIntExtra("scale", 100);
|
||||||
|
@ -696,8 +701,8 @@ public static boolean busy(){
|
||||||
//画电池外框
|
//画电池外框
|
||||||
float width = CommonUtil.convertDpToPixel(mContext,20) - mBorderWidth;
|
float width = CommonUtil.convertDpToPixel(mContext,20) - mBorderWidth;
|
||||||
float height = CommonUtil.convertDpToPixel(mContext,10);
|
float height = CommonUtil.convertDpToPixel(mContext,10);
|
||||||
rect1.set(rect1Left, mHeight - height - statusMarginBottom,rect1Left + width, mHeight - statusMarginBottom);
|
rect1.set(rect1Left, botoomY - height ,rect1Left + width, botoomY);
|
||||||
rect2.set(rect1Left + mBorderWidth, mHeight - height + mBorderWidth - statusMarginBottom, rect1Left + width - mBorderWidth, mHeight - mBorderWidth - statusMarginBottom);
|
rect2.set(rect1Left + mBorderWidth, botoomY - height + mBorderWidth , rect1Left + width - mBorderWidth, botoomY - mBorderWidth );
|
||||||
// c.save(Canvas.CLIP_SAVE_FLAG);
|
// c.save(Canvas.CLIP_SAVE_FLAG);
|
||||||
c.save();
|
c.save();
|
||||||
c.clipRect(rect2, Region.Op.DIFFERENCE);
|
c.clipRect(rect2, Region.Op.DIFFERENCE);
|
||||||
|
|
After Width: | Height: | Size: 780 B |
After Width: | Height: | Size: 605 B |
After Width: | Height: | Size: 672 B |
After Width: | Height: | Size: 677 B |
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:state_pressed="true" android:drawable="@drawable/slide_block_click" />
|
||||||
|
<item android:drawable="@drawable/slide_block" />
|
||||||
|
</selector>
|
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 975 B |
|
@ -8,9 +8,10 @@
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
|
||||||
<LinearLayout
|
<FrameLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<android.support.v7.widget.RecyclerView
|
<android.support.v7.widget.RecyclerView
|
||||||
|
@ -32,9 +33,11 @@
|
||||||
android:layout_weight="0"
|
android:layout_weight="0"
|
||||||
android:background="@color/white"
|
android:background="@color/white"
|
||||||
android:gravity="bottom"
|
android:gravity="bottom"
|
||||||
|
android:layout_gravity="bottom"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:visibility="gone"
|
android:visibility="visible"
|
||||||
android:paddingBottom="0dp"
|
android:paddingBottom="0dp"
|
||||||
|
|
||||||
>
|
>
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
|
@ -50,7 +53,7 @@
|
||||||
android:textColor="@color/colorAccent" />
|
android:textColor="@color/colorAccent" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</LinearLayout>
|
</FrameLayout>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,10 @@
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
|
||||||
style="@style/llOutside"
|
style="@style/llOutside"
|
||||||
tools:context=".Fragments.Fragment_booklist">
|
tools:context=".Fragments.Fragment_booklist"
|
||||||
|
|
||||||
|
android:clipToPadding="false"
|
||||||
|
>
|
||||||
<android.support.v4.widget.SwipeRefreshLayout
|
<android.support.v4.widget.SwipeRefreshLayout
|
||||||
android:id="@+id/swipeLayout"
|
android:id="@+id/swipeLayout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|
|
@ -10,19 +10,28 @@
|
||||||
android:layout_margin="0dp"
|
android:layout_margin="0dp"
|
||||||
android:padding="2dp">
|
android:padding="2dp">
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/imageView"
|
android:id="@+id/imageView"
|
||||||
style="@style/NovelImage"
|
style="@style/NovelImage"
|
||||||
|
|
||||||
android:src="@drawable/googleg_standard_color_18" />
|
android:src="@drawable/googleg_standard_color_18" />
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/imageUpdated"
|
||||||
|
android:layout_width="38dp"
|
||||||
|
android:layout_height="38dp"
|
||||||
|
android:layout_gravity="end"
|
||||||
|
android:layout_marginTop="2dp"
|
||||||
|
android:layout_marginRight="6dp"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:src="@drawable/ic_book_update_flag" />
|
||||||
<CheckBox
|
<CheckBox
|
||||||
android:id="@+id/id_check_box"
|
android:id="@+id/id_check_box"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="right"
|
android:layout_gravity="end"
|
||||||
android:layout_marginTop="5dp"
|
android:layout_marginTop="5dp"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
android:text=""/>
|
android:text=""/>
|
||||||
|
|
|
@ -19,7 +19,9 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:gravity="top"
|
android:gravity="top"
|
||||||
android:layout_weight="1">
|
android:layout_weight="1"
|
||||||
|
|
||||||
|
>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/title"
|
android:id="@+id/title"
|
||||||
|
@ -27,6 +29,7 @@
|
||||||
|
|
||||||
android:text=" "
|
android:text=" "
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_marginTop="2dp"
|
android:layout_marginTop="2dp"
|
||||||
android:layout_marginLeft="0dp"
|
android:layout_marginLeft="0dp"
|
||||||
|
@ -39,6 +42,13 @@
|
||||||
android:id="@+id/category"
|
android:id="@+id/category"
|
||||||
android:text=" "
|
android:text=" "
|
||||||
/>
|
/>
|
||||||
|
<TextView
|
||||||
|
style="@style/TextViewNovelType.Status"
|
||||||
|
android:id="@+id/tvNovelStatus"
|
||||||
|
android:text=""
|
||||||
|
android:layout_marginLeft="10dp"
|
||||||
|
|
||||||
|
/>
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/author"
|
android:id="@+id/author"
|
||||||
style="@style/TextViewNovelAuthor"
|
style="@style/TextViewNovelAuthor"
|
||||||
|
|
|
@ -5,18 +5,21 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:background="#000000"
|
android:background="#000000"
|
||||||
android:orientation="vertical">
|
|
||||||
|
|
||||||
|
android:orientation="vertical">
|
||||||
|
<!--android:clipToPadding="false"
|
||||||
|
android:fitsSystemWindows="true"
|
||||||
|
-->
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent"
|
||||||
|
>
|
||||||
<android.support.design.widget.AppBarLayout
|
<android.support.design.widget.AppBarLayout
|
||||||
android:id="@+id/appbar"
|
android:id="@+id/appbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_alignParentTop="true"
|
android:layout_alignParentTop="true"
|
||||||
android:clipToPadding="true"
|
|
||||||
android:fitsSystemWindows="true"
|
|
||||||
android:theme="@style/AppTheme.AppBarOverlay"
|
android:theme="@style/AppTheme.AppBarOverlay"
|
||||||
|
|
||||||
android:visibility="gone">
|
android:visibility="gone">
|
||||||
|
@ -26,7 +29,6 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/read_dialog_bg"
|
android:background="@color/read_dialog_bg"
|
||||||
|
|
||||||
android:fitsSystemWindows="true"
|
android:fitsSystemWindows="true"
|
||||||
android:minHeight="?attr/actionBarSize"
|
android:minHeight="?attr/actionBarSize"
|
||||||
app:popupTheme="@style/AppTheme.PopupOverlay" />
|
app:popupTheme="@style/AppTheme.PopupOverlay" />
|
||||||
|
@ -38,7 +40,9 @@
|
||||||
<com.novelbook.android.view.PageWidget
|
<com.novelbook.android.view.PageWidget
|
||||||
android:id="@+id/bookpage"
|
android:id="@+id/bookpage"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent" />
|
android:layout_height="match_parent"
|
||||||
|
|
||||||
|
/>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/llTopAd"
|
android:id="@+id/llTopAd"
|
||||||
|
|
After Width: | Height: | Size: 699 B |
After Width: | Height: | Size: 1.2 KiB |
|
@ -410,6 +410,19 @@
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="Toolbar"></style>
|
<style name="Toolbar"></style>
|
||||||
|
<style name="FastScrollTheme">
|
||||||
|
<item name="android:textColorPrimary">?android:textColorPrimaryInverse</item>
|
||||||
|
<item name="android:fastScrollThumbDrawable">@drawable/selector_slide_view</item>
|
||||||
|
<item name="android:fastScrollTrackDrawable">@android:color/transparent</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="TextViewNovelType.Status">
|
||||||
|
|
||||||
|
<item name="android:textColor">@color/mediumturquoise</item>
|
||||||
|
<item name="android:textSize">12sp</item>
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|