1368 lines
		
	
	
		
			48 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			1368 lines
		
	
	
		
			48 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | package com.novelbook.android; | |||
|  | 
 | |||
|  | import android.app.Activity; | |||
|  | import android.app.AlertDialog; | |||
|  | import android.content.BroadcastReceiver; | |||
|  | import android.content.Context; | |||
|  | import android.content.DialogInterface; | |||
|  | import android.content.Intent; | |||
|  | import android.content.IntentFilter; | |||
|  | import android.database.SQLException; | |||
|  | import android.graphics.Bitmap; | |||
|  | import android.graphics.Canvas; | |||
|  | import android.graphics.Color; | |||
|  | import android.graphics.Point; | |||
|  | import android.graphics.Typeface; | |||
|  | import android.os.Build; | |||
|  | import android.os.Environment; | |||
|  | import android.os.Handler; | |||
|  | import android.os.Message; | |||
|  | import android.support.annotation.Nullable; | |||
|  | import android.support.constraint.solver.GoalRow; | |||
|  | import android.support.design.widget.AppBarLayout; | |||
|  | import android.support.v7.widget.Toolbar; | |||
|  | import android.text.TextUtils; | |||
|  | import android.util.Log; | |||
|  | import android.view.Display; | |||
|  | import android.view.KeyEvent; | |||
|  | import android.view.LayoutInflater; | |||
|  | import android.view.Menu; | |||
|  | import android.view.MenuItem; | |||
|  | import android.view.View; | |||
|  | import android.view.ViewGroup; | |||
|  | import android.view.WindowManager; | |||
|  | import android.view.animation.Animation; | |||
|  | import android.view.animation.AnimationUtils; | |||
|  | import android.widget.Button; | |||
|  | import android.widget.FrameLayout; | |||
|  | 
 | |||
|  | import android.widget.ImageView; | |||
|  | import android.widget.LinearLayout; | |||
|  | import android.widget.RelativeLayout; | |||
|  | import android.widget.SeekBar; | |||
|  | import android.widget.TextView; | |||
|  | import android.widget.Toast; | |||
|  | 
 | |||
|  | import com.androidquery.callback.AQuery2; | |||
|  | import com.androidquery.callback.ImageOptions; | |||
|  | import com.bytedance.sdk.openadsdk.AdSlot; | |||
|  | import com.bytedance.sdk.openadsdk.TTAdConstant; | |||
|  | import com.bytedance.sdk.openadsdk.TTAdDislike; | |||
|  | import com.bytedance.sdk.openadsdk.TTAdNative; | |||
|  | import com.bytedance.sdk.openadsdk.TTAppDownloadListener; | |||
|  | import com.bytedance.sdk.openadsdk.TTBannerAd; | |||
|  | import com.bytedance.sdk.openadsdk.TTImage; | |||
|  | import com.bytedance.sdk.openadsdk.TTNativeAd; | |||
|  | import com.novelbook.android.AD.SplashAdManager; | |||
|  | import com.novelbook.android.AD.toutiao.TTAdManagerHolder; | |||
|  | import com.novelbook.android.AD.toutiao.TToast; | |||
|  | import com.novelbook.android.db.Chapter; | |||
|  | import com.novelbook.android.db.Novel; | |||
|  | import com.novelbook.android.db.BookMarks; | |||
|  | import com.novelbook.android.dialog.PageModeDialog; | |||
|  | import com.novelbook.android.dialog.SettingDialog; | |||
|  | 
 | |||
|  | import com.novelbook.android.utils.AdInterface; | |||
|  | import com.novelbook.android.utils.BrightnessUtil; | |||
|  | import com.novelbook.android.utils.Config; | |||
|  | import com.novelbook.android.utils.Constants; | |||
|  | import com.novelbook.android.utils.PageFactory; | |||
|  | import com.novelbook.android.view.PageWidget; | |||
|  | import com.umeng.analytics.MobclickAgent; | |||
|  | 
 | |||
|  | import org.litepal.LitePal; | |||
|  | 
 | |||
|  | import java.io.BufferedOutputStream; | |||
|  | import java.io.File; | |||
|  | import java.io.FileOutputStream; | |||
|  | import java.io.IOException; | |||
|  | import java.text.DecimalFormat; | |||
|  | import java.text.SimpleDateFormat; | |||
|  | import java.util.ArrayList; | |||
|  | import java.util.Date; | |||
|  | import java.util.HashMap; | |||
|  | import java.util.List; | |||
|  | import java.util.Map; | |||
|  | 
 | |||
|  | import butterknife.BindView; | |||
|  | import butterknife.OnClick; | |||
|  | 
 | |||
|  | 
 | |||
|  | public class ReadActivity extends  Activity_base implements   AdInterface { | |||
|  |     private static final String TAG = ReadActivity.class.getSimpleName(); | |||
|  |     private final static String EXTRA_BOOK = "book"; | |||
|  |     private final static String EXTRA_CHAPTER = "chapter"; | |||
|  |     private final static int MESSAGE_CHANGEPROGRESS = 1; | |||
|  | 
 | |||
|  |     @BindView(R.id.btnRefresh) | |||
|  |     Button btnRefresh; | |||
|  |     @BindView(R.id.bookpage) | |||
|  |     PageWidget bookpage; | |||
|  | //    @BindView(R.id.btn_return) | |||
|  | //    ImageButton btn_return; | |||
|  | //    @BindView(R.id.ll_top) | |||
|  | //    LinearLayout ll_top; | |||
|  |     @BindView(R.id.tv_progress) | |||
|  |     TextView tv_progress; | |||
|  |     @BindView(R.id.rl_progress) | |||
|  |     RelativeLayout rl_progress; | |||
|  |     @BindView(R.id.tv_pre) | |||
|  |     TextView tv_pre; | |||
|  |     @BindView(R.id.sb_progress) | |||
|  |     SeekBar sb_progress; | |||
|  |     @BindView(R.id.tv_next) | |||
|  |     TextView tv_next; | |||
|  |     @BindView(R.id.tv_directory) | |||
|  |     TextView tv_directory; | |||
|  |     @BindView(R.id.tv_dayornight) | |||
|  |     TextView tv_dayornight; | |||
|  |     @BindView(R.id.tv_pagemode) | |||
|  |     TextView tv_pagemode; | |||
|  |     @BindView(R.id.tv_setting) | |||
|  |     TextView tv_setting; | |||
|  |     @BindView(R.id.bookpop_bottom) | |||
|  |     LinearLayout bookpop_bottom; | |||
|  |     @BindView(R.id.rl_bottom) | |||
|  |     RelativeLayout rl_bottom; | |||
|  |     @BindView(R.id.tv_stop_read) | |||
|  |     TextView tv_stop_read; | |||
|  |     @BindView(R.id.rl_read_bottom) | |||
|  |     RelativeLayout rl_read_bottom; | |||
|  |     @BindView(R.id.toolbar) | |||
|  |     Toolbar toolbar; | |||
|  |     @BindView(R.id.appbar) | |||
|  |     AppBarLayout appbar; | |||
|  | 
 | |||
|  |     @BindView(R.id.tvUrl) | |||
|  |     TextView tvUrl; | |||
|  | 
 | |||
|  |       @BindView(R.id.top_banner_container) | |||
|  |       FrameLayout mTopBannerContainer; | |||
|  | 
 | |||
|  |     @BindView(R.id.imgLoading) | |||
|  |     pl.droidsonroids.gif.GifImageView imgLoading; | |||
|  |     @BindView(R.id.frmAD) | |||
|  |     LinearLayout frmAD; | |||
|  | 
 | |||
|  |    @BindView(R.id.native_banner_container ) | |||
|  |     FrameLayout mNative_status_banner_container; | |||
|  |   @BindView(R.id.banner_container ) | |||
|  |     FrameLayout mBannerContainer; | |||
|  | 
 | |||
|  |     @BindView(R.id.frmContainer ) | |||
|  |     FrameLayout frmContainer; | |||
|  | 
 | |||
|  |    @BindView(R.id.llShelfBottom) | |||
|  |     LinearLayout llShelf; | |||
|  |     private Config config; | |||
|  |     private WindowManager.LayoutParams lp; | |||
|  |     private Novel book; | |||
|  |     private  Chapter  mChapter; | |||
|  |     private PageFactory pageFactory; | |||
|  |     private int screenWidth, screenHeight; | |||
|  |     // popwindow是否显示 | |||
|  |     private Boolean isShow = false; | |||
|  |     private SettingDialog mSettingDialog; | |||
|  |     private PageModeDialog mPageModeDialog; | |||
|  |     private Boolean mDayOrNight; | |||
|  |     // 语音合成客户端 | |||
|  |   //  private SpeechSynthesizer mSpeechSynthesizer; | |||
|  |     private boolean isSpeaking = false; | |||
|  | 
 | |||
|  | 
 | |||
|  |     // 接收电池信息更新的广播 | |||
|  |     private BroadcastReceiver myReceiver = new BroadcastReceiver(){ | |||
|  |         @Override | |||
|  |         public void onReceive(Context context, Intent intent) { | |||
|  |             if (intent.getAction().equals(Intent.ACTION_BATTERY_CHANGED)) { | |||
|  |                 Log.e(TAG,Intent.ACTION_BATTERY_CHANGED); | |||
|  |                 int level = intent.getIntExtra("level", 0); | |||
|  |                 Log.d(TAG, String.format("updateBattery onReceive: Intent.ACTION_BATTERY_CHANGED level %s ",level)); | |||
|  | 
 | |||
|  |                 pageFactory.updateBattery(level); | |||
|  |             }else if (intent.getAction().equals(Intent.ACTION_TIME_TICK)){ | |||
|  |                 Log.e(TAG,Intent.ACTION_TIME_TICK); | |||
|  |                 pageFactory.updateTime(); | |||
|  |             } | |||
|  |         } | |||
|  |     }; | |||
|  | 
 | |||
|  |     @Override | |||
|  |     public int getLayoutRes() { | |||
|  |         return R.layout.zactivity_read; | |||
|  |     } | |||
|  | 
 | |||
|  |     @Override | |||
|  |     protected void initViews() { | |||
|  | 
 | |||
|  |     } | |||
|  | 
 | |||
|  |     @Override | |||
|  |     protected void setTitle() { | |||
|  | 
 | |||
|  |     } | |||
|  | 
 | |||
|  |     @Override | |||
|  |     protected void initData() { | |||
|  |         if(Build.VERSION.SDK_INT >= 14 && Build.VERSION.SDK_INT < 19){ | |||
|  |             bookpage.setLayerType(View.LAYER_TYPE_SOFTWARE, null); | |||
|  |         } | |||
|  | 
 | |||
|  |         toolbar.setTitle(""); | |||
|  |         setSupportActionBar(toolbar); | |||
|  |         //toolbar.setNavigationIcon(R.mipmap.return_button); | |||
|  |         toolbar.setNavigationOnClickListener(new View.OnClickListener() { | |||
|  |             @Override | |||
|  |             public void onClick(View v) { | |||
|  |                 finish(); | |||
|  |             } | |||
|  |         }); | |||
|  | 
 | |||
|  |         config = Config.getInstance(); | |||
|  |         pageFactory = PageFactory.getInstance(getApplicationContext()); | |||
|  |         pageFactory.clear(); | |||
|  |         pageFactory.setAd(this); | |||
|  |       //  mBannerContainer.setVisibility(View.GONE); | |||
|  | 
 | |||
|  |       //  showProgress (false,"读取目录信息"); | |||
|  |      /*   int slept = 0; | |||
|  |         while(slept <100 && (pageFactory.getChapters() == null || pageFactory.getChapters().size()==0)){ | |||
|  |             try { | |||
|  |                 Thread.sleep(50); | |||
|  |                 slept++; | |||
|  |             } catch (InterruptedException e) { | |||
|  |                 e.printStackTrace(); | |||
|  |             } | |||
|  |         } | |||
|  |         hideProgress() ;*/ | |||
|  | 
 | |||
|  |         IntentFilter mfilter = new IntentFilter(); | |||
|  |         mfilter.addAction(Intent.ACTION_BATTERY_CHANGED); | |||
|  |         mfilter.addAction(Intent.ACTION_TIME_TICK); | |||
|  |         registerReceiver(myReceiver, mfilter); | |||
|  | 
 | |||
|  |         mSettingDialog = new SettingDialog(this); | |||
|  |         mPageModeDialog = new PageModeDialog(this); | |||
|  |         //获取屏幕宽高 | |||
|  |         WindowManager manage = getWindowManager(); | |||
|  |         Display display = manage.getDefaultDisplay(); | |||
|  |         Point displaysize = new Point(); | |||
|  |         display.getSize(displaysize); | |||
|  |         screenWidth = displaysize.x; | |||
|  |         screenHeight = displaysize.y; | |||
|  |         //保持屏幕常亮 | |||
|  |         getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); | |||
|  |         //隐藏 | |||
|  |         hideSystemUI(); | |||
|  |         //改变屏幕亮度 | |||
|  |         if (!config.isSystemLight()) { | |||
|  |             BrightnessUtil.setBrightness(this, config.getLight()); | |||
|  |         } | |||
|  |         //获取intent中的携带的信息 | |||
|  |         Intent intent = getIntent(); | |||
|  |         if(intent.hasExtra(EXTRA_BOOK)){ | |||
|  |             book = (Novel) intent.getSerializableExtra(EXTRA_BOOK); | |||
|  |         } | |||
|  | 
 | |||
|  |         if(intent.hasExtra(EXTRA_CHAPTER)){ | |||
|  |             mChapter = ( Chapter ) intent.getSerializableExtra(EXTRA_CHAPTER); | |||
|  |         } | |||
|  |     //    mChapter = ( Chapter ) intent.getSerializableExtra(EXTRA_CHAPTER); | |||
|  |         bookpage.setPageMode(config.getPageMode()); | |||
|  |         pageFactory.setPageWidget(bookpage); | |||
|  |         sb_progress.setVisibility(book.isLocalBook()?View.VISIBLE:View.INVISIBLE); | |||
|  |         Log.d(TAG, String .format("prepare book: set pagewidget %s, to open book" ,  book.getName())); | |||
|  |         try { | |||
|  | 
 | |||
|  |             hideSystemUI(); | |||
|  |             pageFactory.openBook(book, this); | |||
|  | 
 | |||
|  |             /*showProgressDialog(true, "正在加载"); | |||
|  |             new Thread() { | |||
|  |                 @Override | |||
|  |                 public void run() { | |||
|  |                     super.run(); | |||
|  |                     int slepttime =0; | |||
|  |                     int chapid = book.getLastReadChapt(); | |||
|  | 
 | |||
|  |                     while( pageFactory.getChapters().size() ==0 ||(chapid-1 < pageFactory.getChapters().size() ) && pageFactory.getChapters().get(chapid-1).getId() ==0 ){ | |||
|  |                         try { | |||
|  | 
 | |||
|  |                             if(!NetUtil.isNetworkConnected()){ | |||
|  |                                 break; | |||
|  |                             } | |||
|  | 
 | |||
|  |                             sleep(50); | |||
|  |                             slepttime+=1; | |||
|  |                             if(pageFactory.getChapters().size()>0){ | |||
|  |                              //   Log.d(TAG, String .format("prepare Book: slept %s for loading chapter content %s,chapter.getid %s " , slepttime*50, chapid,pageFactory.getChapters().get(chapid-1).getId())); | |||
|  | 
 | |||
|  |                             }else{ | |||
|  |                              //   Log.d(TAG, String .format("prepare Book: slept %s for loading  pageFactory.getChapters().size() %s " , slepttime*50, pageFactory.getChapters().size())); | |||
|  | 
 | |||
|  |                             } | |||
|  |                         } catch (Exception e) { | |||
|  |                             e.printStackTrace(); | |||
|  |                         } | |||
|  |                         if(slepttime>40) | |||
|  |                         { | |||
|  |                             break; | |||
|  |                         } | |||
|  |                     } | |||
|  |                     Log.d(TAG, String .format("prepare Book: total slept %s for loading chapter content %s,  " , slepttime*50, chapid  )); | |||
|  | 
 | |||
|  |                     mHandler.sendEmptyMessage(1); | |||
|  | 
 | |||
|  |                 } | |||
|  |             }.start(); | |||
|  | */ | |||
|  | 
 | |||
|  |             hideSystemUI(); | |||
|  | 
 | |||
|  |         }catch (IOException e) { | |||
|  |             e.printStackTrace(); | |||
|  |             Toast.makeText(this, "打开电子书失败", Toast.LENGTH_SHORT).show(); | |||
|  |         } | |||
|  | 
 | |||
|  |         initDayOrNight(); | |||
|  | 
 | |||
|  | //        new Thread(){ | |||
|  | //            @Override | |||
|  | //            public void run() { | |||
|  | //                super.run(); | |||
|  | //                initialTts(); | |||
|  | //            } | |||
|  | //        }.start(); | |||
|  | //        initialTts(); | |||
|  | 
 | |||
|  |         initListener(); | |||
|  |     } | |||
|  | 
 | |||
|  | 
 | |||
|  |     protected void initListener() { | |||
|  |         sb_progress.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { | |||
|  |             float pro; | |||
|  |             // 触发操作,拖动 | |||
|  |             @Override | |||
|  |             public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { | |||
|  |                 pro = (float) (progress / 10000.0); | |||
|  |                 showProgressBar(pro); | |||
|  |             } | |||
|  | 
 | |||
|  |             // 表示进度条刚开始拖动,开始拖动时候触发的操作 | |||
|  |             @Override | |||
|  |             public void onStartTrackingTouch(SeekBar seekBar) { | |||
|  | 
 | |||
|  |             } | |||
|  | 
 | |||
|  |             // 停止拖动时候 | |||
|  |             @Override | |||
|  |             public void onStopTrackingTouch(SeekBar seekBar) { | |||
|  |                 pageFactory.changeProgress(pro); | |||
|  |             } | |||
|  |         }); | |||
|  | 
 | |||
|  |         mPageModeDialog.setOnCancelListener(new DialogInterface.OnCancelListener() { | |||
|  |             @Override | |||
|  |             public void onCancel(DialogInterface dialog) { | |||
|  |                 hideSystemUI(); | |||
|  |             } | |||
|  |         }); | |||
|  | 
 | |||
|  |         mPageModeDialog.setPageModeListener(new PageModeDialog.PageModeListener() { | |||
|  |             @Override | |||
|  |             public void changePageMode(int pageMode) { | |||
|  |                 bookpage.setPageMode(pageMode); | |||
|  |             } | |||
|  |         }); | |||
|  | 
 | |||
|  |         mSettingDialog.setOnCancelListener(new DialogInterface.OnCancelListener() { | |||
|  |             @Override | |||
|  |             public void onCancel(DialogInterface dialog) { | |||
|  |                 hideSystemUI(); | |||
|  |             } | |||
|  |         }); | |||
|  | 
 | |||
|  |         mSettingDialog.setSettingListener(new SettingDialog.SettingListener() { | |||
|  |             @Override | |||
|  |             public void changeSystemBright(Boolean isSystem, float brightness) { | |||
|  |                 if (!isSystem) { | |||
|  |                     BrightnessUtil.setBrightness(ReadActivity.this, brightness); | |||
|  |                 } else { | |||
|  |                     int bh = BrightnessUtil.getScreenBrightness(ReadActivity.this); | |||
|  |                     BrightnessUtil.setBrightness(ReadActivity.this, bh); | |||
|  |                 } | |||
|  |             } | |||
|  | 
 | |||
|  |             @Override | |||
|  |             public void changeFontSize(int fontSize) { | |||
|  |                 pageFactory.changeFontSize(fontSize); | |||
|  |                 showSystemUI(); | |||
|  |             } | |||
|  | 
 | |||
|  |             @Override | |||
|  |             public void changeTypeFace(Typeface typeface) { | |||
|  |                 pageFactory.changeTypeface(typeface); | |||
|  |             } | |||
|  | 
 | |||
|  |             @Override | |||
|  |             public void changeBookBg(int type) { | |||
|  |                 pageFactory.changeBookBg(type); | |||
|  |             } | |||
|  | 
 | |||
|  |             @Override | |||
|  |             public void changeLineHeight(int lineHeight) { | |||
|  |                 pageFactory.changeLineHight(lineHeight); | |||
|  |                 showSystemUI(); | |||
|  |             } | |||
|  |         }); | |||
|  | 
 | |||
|  |         pageFactory.setPageEvent(new PageFactory.PageEvent() { | |||
|  |             @Override | |||
|  |             public void changeProgress(float progress) { | |||
|  |                 Message message = new Message(); | |||
|  |                 message.what = MESSAGE_CHANGEPROGRESS; | |||
|  |                 message.obj = progress; | |||
|  |                 mHandler.sendMessage(message); | |||
|  |             } | |||
|  |         }); | |||
|  | 
 | |||
|  |         bookpage.setTouchListener(new PageWidget.TouchListener() { | |||
|  |             @Override | |||
|  |             public void center() { | |||
|  |                 if (isShow) { | |||
|  |                     hideReadSetting(); | |||
|  |                 } else { | |||
|  |                     showReadSetting(); | |||
|  |                 } | |||
|  |             } | |||
|  | 
 | |||
|  |             @Override | |||
|  |             public Boolean prePage() { | |||
|  | 
 | |||
|  |                 if (isShow) { | |||
|  |                     hideReadSetting(); | |||
|  |                     return false; | |||
|  |                 } | |||
|  |                 if (isShow || isSpeaking){ | |||
|  |                   //  return false; | |||
|  |                 } | |||
|  |              //   bookpage.setetCurPage(loadBitmapFromView(frmContainer)); | |||
|  |                // bookpage.setFrmContainer(frmContainer); | |||
|  | 
 | |||
|  |                 Bitmap bitmap =loadBitmapFromView(frmContainer); | |||
|  |                 hideAd(); | |||
|  |                 pageFactory.prePage(); | |||
|  |                 bookpage.setetCurPage( bitmap); | |||
|  |                 SplashAdManager.plusPage(ReadActivity.this); | |||
|  |                 if (pageFactory.isfirstPage() || !pageFactory.isReady()) { | |||
|  |                     return false; | |||
|  |                 } | |||
|  | 
 | |||
|  |                 return true; | |||
|  |             } | |||
|  | 
 | |||
|  |             @Override | |||
|  |             public Boolean nextPage() { | |||
|  |                 Log.e("setTouchListener", "nextPage"); | |||
|  |                 if (isShow) { | |||
|  |                     hideReadSetting(); | |||
|  |                     return false; | |||
|  | 
 | |||
|  |                 } | |||
|  |                 if (isShow || isSpeaking){ | |||
|  |                 //    return false; | |||
|  |                 } | |||
|  |             // | |||
|  |               //  bookpage.setFrmContainer(frmContainer); | |||
|  |                 Bitmap bitmap =loadBitmapFromView(frmContainer); | |||
|  | 
 | |||
|  |                 hideAd(); | |||
|  |                 pageFactory.nextPage(); | |||
|  |                 bookpage.setetCurPage(bitmap); | |||
|  |                 SplashAdManager.plusPage(ReadActivity.this); | |||
|  |                 Log.d(TAG, "onTouchEvent:set current bitmap set new bitmap"); | |||
|  |                 if (pageFactory.islastPage() || !pageFactory.isReady())   { | |||
|  |                     return false; | |||
|  |                 } | |||
|  |                 return true; | |||
|  |             } | |||
|  | 
 | |||
|  |             @Override | |||
|  |             public void cancel() { | |||
|  |                 pageFactory.cancelPage(); | |||
|  |             } | |||
|  | 
 | |||
|  |             @Override | |||
|  |             public Boolean canCancel() { | |||
|  |                // Log.d(TAG, "canCancel: cancelPage canCancel ?" + pageFactory.canCancelPage()); | |||
|  |                 return true;//pageFactory.canCancelPage(); | |||
|  |             } | |||
|  | 
 | |||
|  |             @Override | |||
|  |             public void showAdAfterIni() { | |||
|  |              //  if(frmAD.getVisibility()== View.INVISIBLE) | |||
|  |              //    frmAD.setVisibility(View.VISIBLE); | |||
|  |                  /* if(mBannerContainer.getVisibility()== View.GONE) | |||
|  |                       mBannerContainer.setVisibility(View.VISIBLE);*/ | |||
|  |               //  Log.d(TAG, "pageAnimation showAdAfterIni: "); | |||
|  |                 pageFactory.showAd(); | |||
|  |             } | |||
|  | 
 | |||
|  |             @Override | |||
|  |             public void hideAdBeforeIni() { | |||
|  |               //  hideAd(); | |||
|  |             } | |||
|  |         }); | |||
|  | 
 | |||
|  |     } | |||
|  |       void hideAd  () { | |||
|  | /*        if(frmAD.getVisibility()== View.VISIBLE) | |||
|  |             frmAD.setVisibility(View.INVISIBLE);*/ | |||
|  | //                if(mTopBannerContainer.getVisibility()== View.VISIBLE) | |||
|  | //                    mTopBannerContainer.setVisibility(View.INVISIBLE); | |||
|  |                 if(mBannerContainer.getVisibility()== View.VISIBLE) | |||
|  |                     mBannerContainer.setVisibility(View.GONE); | |||
|  |         // mBannerContainer.removeAllViews(); | |||
|  |         // Log.d(TAG, "pageAnimation hideAdBeforeIni: "); | |||
|  | 
 | |||
|  | 
 | |||
|  |     } | |||
|  | 
 | |||
|  | 
 | |||
|  | 
 | |||
|  |     public Bitmap getBitmapWithAd(){ | |||
|  |         return  loadBitmapFromView(frmContainer); | |||
|  |     } | |||
|  |     @Override | |||
|  |     protected   void attachAd(){ | |||
|  | 
 | |||
|  |        /* if(bookpage.isRunning()){ | |||
|  |             return; | |||
|  | 
 | |||
|  |         } | |||
|  |         Bitmap bitmap =loadBitmapFromView(frmContainer); | |||
|  |         savePicture(bitmap); | |||
|  |        pageFactory.getPageWidget(). setetCurPage(bitmap); | |||
|  |         pageFactory.getPageWidget().setPageMode(config.getPageMode()); | |||
|  |         Log.d(TAG, "attachAd: ad attached");*/ | |||
|  | 
 | |||
|  |     } | |||
|  | 
 | |||
|  |     private Bitmap loadBitmapFromView(View v) { | |||
|  |         int w=v.getWidth();int h=v.getHeight();Bitmap bmp=Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); | |||
|  |         Canvas c=new Canvas(bmp); | |||
|  |         c.drawColor(Color.WHITE);/** 如果不设置canvas画布为白色,则生成透明 */ | |||
|  |         v.layout(0,0,w,h); | |||
|  |         v.draw(c); | |||
|  |       //  savePicture(bmp,new Date().getTime()+".jpg"); | |||
|  |         return bmp; | |||
|  |     } | |||
|  | 
 | |||
|  | 
 | |||
|  | 
 | |||
|  |     public void savePicture(Bitmap bm) { | |||
|  |         String fileName =new Date().getTime()+".jpg"; | |||
|  |         if (bm == null) { | |||
|  |             Toast.makeText(this, "savePicture null !", Toast.LENGTH_SHORT).show(); | |||
|  |             Log.d("SSSSSSSSSSS", "savePicture: savePicture null "); | |||
|  |             return; | |||
|  |         } | |||
|  |       String  PATH_LOGCAT = Environment.getExternalStorageDirectory() | |||
|  |                 .getAbsolutePath() + File.separator + "anovelbmp"; | |||
|  |         File foder = new File(PATH_LOGCAT); | |||
|  |         if (!foder.exists()) { | |||
|  |             foder.mkdirs(); | |||
|  |         } | |||
|  |         File myCaptureFile = new File(foder, fileName); | |||
|  |         try { | |||
|  |             if (!myCaptureFile.exists()) { | |||
|  |                 myCaptureFile.createNewFile(); | |||
|  |             } | |||
|  |             BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile)); | |||
|  |             bm.compress(Bitmap.CompressFormat.JPEG, 90, bos); | |||
|  |             bos.flush(); | |||
|  |             bos.close(); | |||
|  |         } catch (IOException e) { | |||
|  |             e.printStackTrace(); | |||
|  |         } | |||
|  |     } | |||
|  | 
 | |||
|  |     public static Bitmap convertViewToBitmap(View view){ | |||
|  |         view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); | |||
|  |         view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); | |||
|  |         view.buildDrawingCache(); | |||
|  |         Bitmap bitmap = view.getDrawingCache(); | |||
|  | 
 | |||
|  |        return bitmap; | |||
|  |     } | |||
|  | 
 | |||
|  |     public Bitmap screenShot(View view) { | |||
|  |         Log.d(TAG, "screenShot: ....."); | |||
|  |         view.setDrawingCacheEnabled(true); | |||
|  |         view.buildDrawingCache(); | |||
|  |         Bitmap bmp = view.getDrawingCache(); | |||
|  | 
 | |||
|  | 
 | |||
|  |         Bitmap ret = Bitmap.createBitmap(bmp, 0, 0, Constants.SCREEN_WIDTH_PIX, Constants.SCREEN_HEIGHT_PIX); | |||
|  |         view.destroyDrawingCache(); | |||
|  | 
 | |||
|  |         return ret; | |||
|  |     } | |||
|  |     private Handler mHandler = new Handler() { | |||
|  |         @Override | |||
|  |         public void handleMessage(Message msg) { | |||
|  |             super.handleMessage(msg); | |||
|  |             /*switch (msg.what) { | |||
|  |                 case MESSAGE_CHANGEPROGRESS: | |||
|  |                     float progress = (float) msg.obj; | |||
|  |                     setSeekBarProgress(progress); | |||
|  |                     break; | |||
|  |             }*/ | |||
|  |          //   hideProgress(); | |||
|  |         } | |||
|  |     }; | |||
|  | 
 | |||
|  | 
 | |||
|  |     int startTime =0; | |||
|  |     @Override | |||
|  |     protected void onResume(){ | |||
|  |         super.onResume(); | |||
|  |         if (!isShow){ | |||
|  |             hideSystemUI(); | |||
|  |         } | |||
|  |       /*  if (mSpeechSynthesizer != null){ | |||
|  |             mSpeechSynthesizer.resume(); | |||
|  |         }*/ | |||
|  |         startTime  = (int) new Date().getTime(); | |||
|  |    /*     if (book != null) { | |||
|  |             Intent intent = getIntent(); | |||
|  |             if (intent.hasExtra(EXTRA_BOOK)) { | |||
|  |                 Novel novel = (Novel) intent.getSerializableExtra(EXTRA_BOOK); | |||
|  |                 if (!pageFactory.isWorking() || novel.getId() != book.getId()) { | |||
|  |                     initData(); | |||
|  |                 }else{ | |||
|  |                     if( novel.getLastReadChapt()!=pageFactory.getCurrentChapter()){ | |||
|  |                         pageFactory.changeChapter(novel.getLastReadChapt()); | |||
|  |                      //   hideReadSetting(); | |||
|  |                     } | |||
|  |                 } | |||
|  |                 hideReadSetting(); | |||
|  |             } | |||
|  |         }*/ | |||
|  | 
 | |||
|  |         hideReadSetting(); | |||
|  |         if( pageFactory.isReady()) { | |||
|  |             pageFactory.updateTime(); | |||
|  |             pageFactory.showAd(); | |||
|  |         } | |||
|  | 
 | |||
|  |     } | |||
|  | 
 | |||
|  |     @Override | |||
|  |     public void onPause() { | |||
|  |         super.onPause(); | |||
|  |         Map<String, String> map_value = new HashMap<String, String>(); | |||
|  |         map_value.put("bookname" , book!=null ?  book.getName():"noname" ); | |||
|  |         MobclickAgent.onEventValue(MyApp.applicationContext, "novel_reading_time" , map_value, (int) new Date().getTime() - startTime); | |||
|  | 
 | |||
|  |     } | |||
|  |     @Override | |||
|  |     protected void onStop(){ | |||
|  |         super.onStop(); | |||
|  |      /*   if (mSpeechSynthesizer != null){ | |||
|  |             mSpeechSynthesizer.stop(); | |||
|  |         }*/ | |||
|  | 
 | |||
|  |     } | |||
|  | 
 | |||
|  |     @Override | |||
|  |     protected void onDestroy() { | |||
|  |         super.onDestroy(); | |||
|  |         pageFactory.clear(); | |||
|  |         bookpage = null; | |||
|  |         unregisterReceiver(myReceiver); | |||
|  |         isSpeaking = false; | |||
|  |        /* if (mSpeechSynthesizer != null){ | |||
|  |             mSpeechSynthesizer.release(); | |||
|  |         }*/ | |||
|  |     } | |||
|  | 
 | |||
|  |     @Override | |||
|  |     public boolean onKeyDown(int keyCode, KeyEvent event) { | |||
|  | 
 | |||
|  |         Log.d(TAG, "onKeyDown: pressed key"); | |||
|  |         if (keyCode == KeyEvent.KEYCODE_BACK) { | |||
|  |             Log.d(TAG, "onKeyDown: pressed back"); | |||
|  |         /*    if (isShow){ | |||
|  |                 hideReadSetting(); | |||
|  |                 return true; | |||
|  |             } | |||
|  |             if (mSettingDialog.isShowing()){ | |||
|  |                 mSettingDialog.hide(); | |||
|  |                 return true; | |||
|  |             } | |||
|  |             if (mPageModeDialog.isShowing()){ | |||
|  |                 mPageModeDialog.hide(); | |||
|  |                 return true; | |||
|  |             }*/ | |||
|  | 
 | |||
|  |         if(isShow){ | |||
|  |             hideReadSetting(); | |||
|  |             return  true; | |||
|  |         } | |||
|  | 
 | |||
|  |             if(!pageFactory.canExitSilent()){ | |||
|  |                 if(book.isOnShelf() ||pageFactory.getChapters().size()>0){ | |||
|  |                     finish(); | |||
|  |                 }else { | |||
|  |                    // showNormalDialog(); | |||
|  |                     Animation bottomAnim = AnimationUtils.loadAnimation(this, R.anim.dialog_enter); | |||
|  |                     llShelf.startAnimation(bottomAnim); | |||
|  |                     llShelf.setVisibility(View.VISIBLE); | |||
|  |                     return true; | |||
|  |                 } | |||
|  |             } | |||
|  | 
 | |||
|  |         } | |||
|  |         return super.onKeyDown(keyCode, event); | |||
|  |     } | |||
|  |     private void showNormalDialog(){ | |||
|  |         /* @setIcon 设置对话框图标 | |||
|  |          * @setTitle 设置对话框标题 | |||
|  |          * @setMessage 设置对话框消息提示 | |||
|  |          * setXXX方法返回Dialog对象,因此可以链式设置属性 | |||
|  |          */ | |||
|  |         final AlertDialog.Builder normalDialog = | |||
|  |                 new AlertDialog.Builder(ReadActivity.this); | |||
|  | 
 | |||
|  |         normalDialog.setTitle("提示"); | |||
|  |         normalDialog.setMessage("是否加入书架?"); | |||
|  |         normalDialog.setPositiveButton("确定", | |||
|  |                 new DialogInterface.OnClickListener() { | |||
|  |                     @Override | |||
|  |                     public void onClick(DialogInterface dialog, int which) { | |||
|  | 
 | |||
|  |                         book.setOnShelf(true); | |||
|  |                         book.update(book.getId()); | |||
|  |                         finish(); | |||
|  | 
 | |||
|  |                     } | |||
|  |                 }); | |||
|  |         normalDialog.setNegativeButton("取消", | |||
|  |                 new DialogInterface.OnClickListener() { | |||
|  |                     @Override | |||
|  |                     public void onClick(DialogInterface dialog, int which) | |||
|  |                     { | |||
|  | 
 | |||
|  |                         finish(); | |||
|  |                     } | |||
|  |                 }); | |||
|  | 
 | |||
|  |         normalDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { | |||
|  |             @Override | |||
|  |             public void onDismiss(DialogInterface dialog) { | |||
|  |                 hideSystemUI(); | |||
|  |             } | |||
|  |         }); | |||
|  |         // 显示 | |||
|  |         normalDialog.show(); | |||
|  | 
 | |||
|  |     } | |||
|  |     @Override | |||
|  |     public boolean onCreateOptionsMenu(Menu menu) { | |||
|  |         // Inflate the menu; this adds items to the action bar if it is present. | |||
|  |         getMenuInflater().inflate(R.menu.read, menu); | |||
|  | 
 | |||
|  |         if(book!=null && book.isLocalBook()){ | |||
|  |             menu.findItem(R.id.action_change_source).setEnabled(false); | |||
|  |             menu.findItem(R.id.action_refresh).setEnabled(false); | |||
|  |             menu.findItem(R.id.action_bookdetail).setEnabled(false); | |||
|  |         } | |||
|  | 
 | |||
|  |         return true; | |||
|  |     } | |||
|  | 
 | |||
|  |     @Override | |||
|  |     public boolean onOptionsItemSelected(MenuItem item) { | |||
|  |         // Handle action bar item clicks here. The action bar will | |||
|  |         // automatically handle clicks on the Home/Up button, so long | |||
|  |         // as you specify a parent activity in AndroidManifest.xml. | |||
|  |         int id = item.getItemId(); | |||
|  |         pageFactory.setPageWidget(bookpage); | |||
|  |         if (id == R.id.action_add_bookmark){ | |||
|  |             if( pageFactory.isReady()) | |||
|  |             if (pageFactory.getCurrentPage() != null) { | |||
|  |                 List<BookMarks> bookMarksList = LitePal.where("novelId = ? and chapt = ? " + | |||
|  |                         " and begin = ?", pageFactory.getNovle().getId()+"",pageFactory.getCurrentChapter()+"",pageFactory.getCurrentPage().getBegin() + "").find(BookMarks.class); | |||
|  | 
 | |||
|  |                 if (!bookMarksList.isEmpty()){ | |||
|  |                     Toast.makeText(ReadActivity.this, "该书签已存在", Toast.LENGTH_SHORT).show(); | |||
|  |                 }else { | |||
|  |                     BookMarks bookMarks = new BookMarks(); | |||
|  |                     String word = ""; | |||
|  |                     for (String line : pageFactory.getCurrentPage().getLines()) { | |||
|  |                         word += line; | |||
|  |                     } | |||
|  |                     try { | |||
|  |                         SimpleDateFormat sf = new SimpleDateFormat( | |||
|  |                                 "yyyy-MM-dd HH:mm ss"); | |||
|  |                         String time = sf.format(new Date()); | |||
|  |                         bookMarks.setTime(time); | |||
|  |                         bookMarks.setBegin(pageFactory.getCurrentPage().getBegin()); | |||
|  |                         bookMarks.setText(word); | |||
|  |                         bookMarks.setNovelId(pageFactory.getNovle().getId()); | |||
|  |                         bookMarks.setChapt(pageFactory.getCurrentChapter()); | |||
|  |                         bookMarks.setChaptName(((pageFactory.getChapters().get(bookMarks.getChapt()-1).getChapterName()))); | |||
|  |                         if(!book.isLocalBook()) { | |||
|  |                             bookMarks.setDomain(pageFactory.getSite().getDomain()); | |||
|  |                         } | |||
|  |                         bookMarks.save(); | |||
|  | 
 | |||
|  |                         Toast.makeText(ReadActivity.this, "书签添加成功", Toast.LENGTH_SHORT).show(); | |||
|  |                     } catch (SQLException e) { | |||
|  |                         Toast.makeText(ReadActivity.this, "该书签已存在", Toast.LENGTH_SHORT).show(); | |||
|  |                     } catch (Exception e) { | |||
|  |                         e.printStackTrace(); | |||
|  |                         Toast.makeText(ReadActivity.this, "添加书签失败", Toast.LENGTH_SHORT).show(); | |||
|  |                     } | |||
|  |                 } | |||
|  |             } | |||
|  |             hideReadSetting(); | |||
|  |         } | |||
|  |        /* else if (id == R.id.action_read_book){ | |||
|  |             initialTts(); | |||
|  |             if (mSpeechSynthesizer != null){ | |||
|  |                 mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_VOLUME, "5"); | |||
|  |                 mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEED, "5"); | |||
|  |                 mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_PITCH, "5"); | |||
|  |                 mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEAKER, "0"); | |||
|  | //                mSpeechSynthesizer.setParam(SpeechSynthesizer. MIX_MODE_DEFAULT); | |||
|  | //                mSpeechSynthesizer.setParam(SpeechSynthesizer. AUDIO_ENCODE_AMR); | |||
|  | //                mSpeechSynthesizer.setParam(SpeechSynthesizer. AUDIO_BITRA TE_AMR_15K85); | |||
|  |                 mSpeechSynthesizer.setParam(SpeechSynthesizer. PARAM_VOCODER_OPTIM_LEVEL, "0"); | |||
|  |                 int result = mSpeechSynthesizer.speak(pageFactory.getCurrentPage().getLineToString()); | |||
|  |                 if (result < 0) { | |||
|  |                     Log.e(TAG,"error,please look up error code in doc or URL:http://yuyin.baidu.com/docs/tts/122 "); | |||
|  |                 }else{ | |||
|  |                     hideReadSetting(); | |||
|  |                     isSpeaking = true; | |||
|  |                 } | |||
|  |             } | |||
|  |         }*/ | |||
|  |         else if (id == R.id.action_change_source) { | |||
|  |          //   if(  pageFactory.getChapters().size()>0) { | |||
|  |                Intent intent = new Intent(ReadActivity.this, Activity_ChgSource.class); | |||
|  |                intent.putExtra(Activity_ChgSource.EXTR_ID, pageFactory.getChapter().getIndex()); | |||
|  |                intent.putExtra(Activity_ChgSource.EXTR_TITLE, pageFactory.getChapter().getChapterName()); | |||
|  |                intent.putExtra(Activity_ChgSource.EXTR_SITE, pageFactory.getChapter().getDomain()); | |||
|  |            //    intent.putExtra(Activity_ChgSource.EXTR_NAME, pageFactory.getSite().getName()); | |||
|  |                startActivity(intent); | |||
|  |                hideReadSetting(); | |||
|  |            // }else{ | |||
|  |           //  Toast.makeText(this,"换源不可用,请返回重试...",Toast.LENGTH_SHORT); | |||
|  |           // } | |||
|  |         }else if(id == R.id.action_refresh){ | |||
|  |             pageFactory.refreshChapter(); | |||
|  |             hideReadSetting(); | |||
|  | 
 | |||
|  |         }else if(id == R.id.action_bookdetail){ | |||
|  |             showBookDetail(this.book); | |||
|  |             finish(); | |||
|  |         } | |||
|  | 
 | |||
|  |         return super.onOptionsItemSelected(item); | |||
|  |     } | |||
|  | 
 | |||
|  |     @Override | |||
|  |     public void fillData() { | |||
|  | 
 | |||
|  |     } | |||
|  | 
 | |||
|  |     @Override | |||
|  |     protected void onNewIntent(Intent intent) { | |||
|  |         super.onNewIntent(intent); | |||
|  |         Log.e("tag", "onNewINtent执行了"); | |||
|  |         setIntent(intent); | |||
|  |         initData(); | |||
|  |     } | |||
|  | 
 | |||
|  |     public static boolean openBook(final Novel book, Activity context) { | |||
|  |         if (book == null){ | |||
|  |             throw new NullPointerException("Novel can not be null"); | |||
|  | 
 | |||
|  |         } | |||
|  | 
 | |||
|  |         Intent intent = new Intent(context, ReadActivity.class); | |||
|  |         intent.putExtra(EXTRA_BOOK, book); | |||
|  |         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); | |||
|  |         //context.overridePendingTransition(R.anim.in_from_right, R.anim.out_to_left); | |||
|  |         context.startActivity(intent); | |||
|  |         return true; | |||
|  |     } | |||
|  |     public static boolean openChapter(final Novel book, final Chapter chapter, Activity context) { | |||
|  |         if (book == null){ | |||
|  |             throw new NullPointerException("Novel can not be null"); | |||
|  | 
 | |||
|  |         } | |||
|  | 
 | |||
|  |         Intent intent = new Intent(context, ReadActivity.class); | |||
|  |         intent.putExtra(EXTRA_BOOK, book); | |||
|  |         intent.putExtra(EXTRA_CHAPTER, chapter); | |||
|  | 
 | |||
|  |         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); | |||
|  |         context.overridePendingTransition(R.anim.in_from_right, R.anim.out_to_left); | |||
|  |         context.startActivity(intent); | |||
|  |         return true; | |||
|  |     } | |||
|  | 
 | |||
|  | //    public BookPageWidget getPageWidget() { | |||
|  | //        return bookpage; | |||
|  | //    } | |||
|  | 
 | |||
|  | 
 | |||
|  | 
 | |||
|  |     //显示书本进度 | |||
|  |     public void showProgressBar(float progress){ | |||
|  |         if (rl_progress.getVisibility() != View.VISIBLE) { | |||
|  |             rl_progress.setVisibility(View.VISIBLE); | |||
|  |         } | |||
|  |         setProgress(progress); | |||
|  |     } | |||
|  | 
 | |||
|  |     //隐藏书本进度 | |||
|  |     public void hideProgressBar(){ | |||
|  |         rl_progress.setVisibility(View.GONE); | |||
|  |     } | |||
|  | 
 | |||
|  |     public void initDayOrNight(){ | |||
|  |         mDayOrNight = config.getDayOrNight(); | |||
|  |         if (mDayOrNight){ | |||
|  |             tv_dayornight.setText(getResources().getString(R.string.read_setting_day)); | |||
|  |         }else{ | |||
|  |             tv_dayornight.setText(getResources().getString(R.string.read_setting_night)); | |||
|  |         } | |||
|  |     } | |||
|  | 
 | |||
|  |     //改变显示模式 | |||
|  |     public void changeDayOrNight(){ | |||
|  |         if (mDayOrNight){ | |||
|  |             mDayOrNight = false; | |||
|  |             tv_dayornight.setText(getResources().getString(R.string.read_setting_night)); | |||
|  |         }else{ | |||
|  |             mDayOrNight = true; | |||
|  |             tv_dayornight.setText(getResources().getString(R.string.read_setting_day)); | |||
|  |         } | |||
|  |         config.setDayOrNight(mDayOrNight); | |||
|  |         pageFactory.setDayOrNight(mDayOrNight); | |||
|  |     } | |||
|  | 
 | |||
|  |     private void setProgress(float progress){ | |||
|  |         DecimalFormat decimalFormat=new DecimalFormat("00.00");//构造方法的字符格式这里如果小数不足2位,会以0补足. | |||
|  |         String p=decimalFormat.format(progress * 100.0);//format 返回的是字符串 | |||
|  |         tv_progress.setText(p + "%"); | |||
|  |     } | |||
|  | 
 | |||
|  |     public void setSeekBarProgress(float progress){ | |||
|  |         sb_progress.setProgress((int) (progress * 10000)); | |||
|  |     } | |||
|  | 
 | |||
|  |     public void showReadSetting(){ | |||
|  |         isShow = true; | |||
|  |        // rl_progress.setVisibility(View.GONE); | |||
|  |         Animation topAnim = AnimationUtils.loadAnimation(this, R.anim.dialog_top_enter); | |||
|  |         Animation botoomAnim = AnimationUtils.loadAnimation(this, R.anim.dialog_exit); | |||
|  | 
 | |||
|  |         if (llShelf.getVisibility() == View.VISIBLE) { | |||
|  |             llShelf.startAnimation(botoomAnim); | |||
|  |             llShelf.setVisibility(View.GONE); | |||
|  |         } | |||
|  | 
 | |||
|  |         if (isSpeaking){ | |||
|  | 
 | |||
|  |             rl_read_bottom.startAnimation(topAnim); | |||
|  |             rl_read_bottom.setVisibility(View.VISIBLE); | |||
|  |         }else { | |||
|  |             showSystemUI(); | |||
|  | 
 | |||
|  |            // Animation bottomAnim = AnimationUtils.loadAnimation(this, R.anim.dialog_enter); | |||
|  | 
 | |||
|  |              rl_bottom.startAnimation(topAnim); | |||
|  |              appbar.startAnimation(topAnim); | |||
|  | //        ll_top.startAnimation(topAnim);//        ll_top.setVisibility(View.VISIBLE); | |||
|  |             rl_bottom.setVisibility(View.VISIBLE); | |||
|  |             appbar.setVisibility(View.VISIBLE); | |||
|  | 
 | |||
|  |           /*  tvUrl.setVisibility(View.VISIBLE); | |||
|  |             tvUrl.setText("abcd+" + pageFactory.getChapter().getChapterUrl());*/ | |||
|  | 
 | |||
|  |             if(Constants.SHOW_NOVEL_CHAPTER_URL) { | |||
|  |                 if(pageFactory.getChapter()!=null && !TextUtils.isEmpty(pageFactory.getChapter().getChapterUrl())) { | |||
|  |                     tvUrl.setVisibility(View.VISIBLE); | |||
|  |                     tvUrl.setText(pageFactory.getChapter().getChapterUrl()); | |||
|  |                 } | |||
|  |             } | |||
|  | 
 | |||
|  | 
 | |||
|  |         } | |||
|  |     } | |||
|  |     /** | |||
|  |      * 隐藏菜单。沉浸式阅读 | |||
|  |      */ | |||
|  |     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 | |||
|  |         ); | |||
|  | 
 | |||
|  |         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { | |||
|  |             getWindow().setNavigationBarColor(getResources().getColor(R.color.read_dialog_bg)); | |||
|  |         } | |||
|  |         pageFactory.setBusy(false); | |||
|  | 
 | |||
|  |         if (llShelf.getVisibility() == View.VISIBLE) { | |||
|  |             Animation topAnim = AnimationUtils.loadAnimation(this, R.anim.dialog_exit); | |||
|  |             llShelf.startAnimation(topAnim); | |||
|  |             llShelf.setVisibility(View.GONE); | |||
|  |         } | |||
|  |     } | |||
|  | 
 | |||
|  |     @Override | |||
|  |     public void showRefresh(int visible) { | |||
|  |         btnRefresh.setVisibility(visible); | |||
|  |     } | |||
|  | 
 | |||
|  |     @Override | |||
|  |     public void showProgressbar(boolean dismissAble,String msg) { | |||
|  |         showProgressDialog(dismissAble,msg); | |||
|  |     } | |||
|  | 
 | |||
|  |     @Override | |||
|  |     public void hideProgressbar() { | |||
|  | 
 | |||
|  |     } | |||
|  | 
 | |||
|  |     @Override | |||
|  |     public void showLoading(boolean isShow) { | |||
|  |   /*      if(!isShow){ | |||
|  |             try { | |||
|  |                 throw  new Exception("why not show"); | |||
|  |             } catch (Exception e) { | |||
|  |                 Log.e(TAG, "showLoading: ",e ); | |||
|  |             } | |||
|  |         }*/ | |||
|  |         imgLoading.setVisibility(isShow?View.VISIBLE:View.GONE); | |||
|  |     } | |||
|  | 
 | |||
|  |     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 hideReadSetting() { | |||
|  |         isShow = false; | |||
|  |         Animation bottomAnim = AnimationUtils.loadAnimation(this, R.anim.dialog_exit); | |||
|  |         Animation topAnim = AnimationUtils.loadAnimation(this, R.anim.dialog_top_exit); | |||
|  |         if (rl_bottom.getVisibility() == View.VISIBLE) { | |||
|  |             rl_bottom.startAnimation(topAnim); | |||
|  |         } | |||
|  |         if (appbar.getVisibility() == View.VISIBLE) { | |||
|  |             appbar.startAnimation(topAnim); | |||
|  |         } | |||
|  |         if (rl_read_bottom.getVisibility() == View.VISIBLE) { | |||
|  |             rl_read_bottom.startAnimation(topAnim); | |||
|  |         } | |||
|  | //        ll_top.startAnimation(topAnim); | |||
|  |         rl_bottom.setVisibility(View.GONE); | |||
|  |         rl_read_bottom.setVisibility(View.GONE); | |||
|  | //        ll_top.setVisibility(View.GONE); | |||
|  |         appbar.setVisibility(View.GONE); | |||
|  |         tvUrl.setVisibility(View.GONE); | |||
|  |         hideSystemUI(); | |||
|  |        // Animation bottomAnim = AnimationUtils.loadAnimation(this, R.anim.dialog_enter); | |||
|  | 
 | |||
|  |     } | |||
|  | 
 | |||
|  | 
 | |||
|  |     @OnClick({R.id.tv_progress, R.id.rl_progress, R.id.tv_pre, R.id.sb_progress, R.id.tv_next, R.id.tv_directory, | |||
|  |             R.id.tv_dayornight,R.id.tv_pagemode, R.id.tv_setting, R.id.bookpop_bottom, /*R.id.rl_bottom,*/R.id.tv_stop_read | |||
|  |             ,R.id.btnRefresh,R.id.btnCancel,R.id.btnShelf}) | |||
|  |     public void onClick(View view) { | |||
|  |         pageFactory.setPageWidget(bookpage); | |||
|  |       //  if( pageFactory.isReady()) | |||
|  |         switch (view.getId()) { | |||
|  | //            case R.id.btn_return: | |||
|  | //                finish(); | |||
|  | //                break; | |||
|  | //            case R.id.ll_top: | |||
|  | //                break; | |||
|  |             case R.id.tv_progress: | |||
|  |                 break; | |||
|  |             case R.id.rl_progress: | |||
|  |                 break; | |||
|  |             case R.id.tv_pre: | |||
|  |                 pageFactory.preChapter(); | |||
|  |                 break; | |||
|  |             case R.id.sb_progress: | |||
|  |                 break; | |||
|  |             case R.id.tv_next: | |||
|  |                 pageFactory.nextChapter(); | |||
|  |                 break; | |||
|  |             case R.id.tv_directory: | |||
|  |                 Intent intent = new Intent(ReadActivity.this, MarkActivity.class); | |||
|  |                 startActivity(intent); | |||
|  | 
 | |||
|  |                // finish(); | |||
|  |                 break; | |||
|  |             case R.id.tv_dayornight: | |||
|  |                 changeDayOrNight(); | |||
|  |                 break; | |||
|  |             case R.id.tv_pagemode: | |||
|  |                hideReadSetting(); | |||
|  |                 mPageModeDialog.show(); | |||
|  |                 showSystemUI(); | |||
|  |                // getWindow().setNavigationBarColor(getResources().getColor(R.color.read_dialog_bg)); | |||
|  |                 break; | |||
|  |             case R.id.tv_setting: | |||
|  |                  hideReadSetting(); | |||
|  |                 mSettingDialog.show(); | |||
|  |                 showSystemUI(); | |||
|  |                 break; | |||
|  |             case R.id.bookpop_bottom: | |||
|  |                 break; | |||
|  |           /*  case R.id.rl_bottom: | |||
|  |                 break;*/ | |||
|  |             case R.id.tv_stop_read: | |||
|  |               /*  if (mSpeechSynthesizer!=null){ | |||
|  |                     mSpeechSynthesizer.stop(); | |||
|  |                     isSpeaking = false; | |||
|  |                     hideReadSetting(); | |||
|  |                 }*/ | |||
|  |         /*    case R.id.mBannerContainer: | |||
|  |                 Toast.makeText(this,"ad is clicked ",Toast.LENGTH_LONG).show(); | |||
|  |                 Log.d(TAG,"Ad is clicked"); | |||
|  | 
 | |||
|  |                 break;*/ | |||
|  |             case R.id.btnRefresh: | |||
|  |                 pageFactory.retryChapt(pageFactory.getCurrentChapter()); | |||
|  |                 btnRefresh.setVisibility(View.GONE); | |||
|  |                 break; | |||
|  |             case R.id.btnShelf: | |||
|  |                 book.setOnShelf(true); | |||
|  |                 book.update(book.getId()); | |||
|  |                 finish(); | |||
|  |                 break; | |||
|  |             case R.id.btnCancel: | |||
|  |                 finish(); | |||
|  |                 break; | |||
|  | 
 | |||
|  |         } | |||
|  |       //  hideSystemUI(); | |||
|  |     } | |||
|  |     /* | |||
|  |     ProgressDialog progressDialog; | |||
|  |     private void showProgressDialog() { | |||
|  |         if (  null == progressDialog) { | |||
|  |             progressDialog =ProgressDialog.show(this,"测试","你点了广告",false,true); //new ProgressDialog(this); | |||
|  |         }else{ | |||
|  |             progressDialog.show(); | |||
|  |         } | |||
|  | 
 | |||
|  |     } | |||
|  | 
 | |||
|  | 
 | |||
|  |     private void dismissProgressDialog() { | |||
|  |         if ( null != progressDialog) { | |||
|  |             progressDialog.dismiss(); | |||
|  |         } | |||
|  |     } | |||
|  |     */ | |||
|  | 
 | |||
|  |     FrameLayout tmpFrame =mBannerContainer; | |||
|  |     @Override | |||
|  |     FrameLayout getNativeContainer(){ | |||
|  |         return tmpFrame; | |||
|  |     } | |||
|  | 
 | |||
|  |     @Override | |||
|  |     void initNaviBanner() { | |||
|  | 
 | |||
|  |     } | |||
|  |     public void hideStatusAds(){ | |||
|  | 
 | |||
|  |      /*   try{ | |||
|  |             throw new Exception(""); | |||
|  |         }catch (Exception e){ | |||
|  |             Log.e(TAG, "loadBannerAd: ", e); | |||
|  |         }*/ | |||
|  |        /* if(mNative_status_banner_container.getVisibility() ==View.VISIBLE) { | |||
|  |              Log.d(TAG, "loadBannerAd: hideStatusAds()"); | |||
|  |              mNative_status_banner_container.setVisibility(View.GONE); | |||
|  |         }*/ | |||
|  |         // mBannerContainer.removeAllViews(); | |||
|  | //        mBannerContainer.setBackgroundResource(R.color.transparent); | |||
|  |     } | |||
|  |     private void hideAdSlot(ViewGroup view){ | |||
|  | 
 | |||
|  |         if(view.getVisibility() ==View.VISIBLE) { | |||
|  |             view.setVisibility(View.GONE); | |||
|  |         } | |||
|  | /*        FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) view.getLayoutParams(); | |||
|  |         params.width =0; | |||
|  |         view.setLayoutParams(params);*/ | |||
|  |       //  view.setBackgroundResource(R.color.transparent); | |||
|  | 
 | |||
|  |         //mBannerContainer.removeAllViews(); | |||
|  |       //  mBannerContainer.setBackgroundResource(R.color.transparent); | |||
|  | 
 | |||
|  |     } | |||
|  |     private void showAdSlot(ViewGroup view){ | |||
|  |         Log.d(TAG, "loadBannerAd: showAdSlot()"); | |||
|  |      if(view.getVisibility() ==View.GONE) { | |||
|  |             view.setVisibility(View.VISIBLE); | |||
|  |         } | |||
|  |    /*     FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) view.getLayoutParams(); | |||
|  | 
 | |||
|  |         params.width =-1; | |||
|  |         view.setLayoutParams(params);*/ | |||
|  | 
 | |||
|  |     } | |||
|  |     public void showNativeBannerInLines(int height,int adY){ | |||
|  |        // hideSystemUI(); | |||
|  |   //      hideAdSlot(mNative_banner_container); | |||
|  |   //      hideAdSlot(mBannerContainer); | |||
|  |         // mBannerContainer.removeAllViews(); | |||
|  |      //   mBannerContainer.removeAllViews(); | |||
|  |       //  mBannerContainer.setBackgroundResource(R.color.transparent); | |||
|  | 
 | |||
|  |        Log.d(TAG, String.format("loadBannerAd:showNativeBannerInLines height %s, adY %s ",height, adY/Constants.ONE_DP_SIZE )); | |||
|  | 
 | |||
|  |         hideAdSlot(mBannerContainer); | |||
|  |       //  hideAdSlot(mNative_status_banner_container); | |||
|  |         if(height<=0){ | |||
|  |             return; | |||
|  |         } | |||
|  | 
 | |||
|  |         if(  adY >390*Constants.ONE_DP_SIZE){ | |||
|  |             return; | |||
|  |         } | |||
|  | 
 | |||
|  |        // hideAdSlot(mTopBannerContainer); | |||
|  |         if(mBannerContainer.getChildCount()>0) { | |||
|  |             mBannerContainer.removeAllViews(); | |||
|  |         } | |||
|  | 
 | |||
|  | 
 | |||
|  |         tmpFrame = new FrameLayout(this); | |||
|  | 
 | |||
|  |         tmpFrame =mBannerContainer; | |||
|  |         mLastBannerTime=0; | |||
|  |         Log.d(TAG, String.format("loadBannerAd:showNativeBannerInLines to get ad, width %s, height %s ,adY %s ",Constants.SCREEN_WIDTH_PIX-50,height,adY)); | |||
|  |         loadNativeBannerAd(tmpFrame); | |||
|  |         LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)tmpFrame.getLayoutParams(); | |||
|  |         params.setMargins(10*Constants.ONE_DP_SIZE, adY+5*Constants.ONE_DP_SIZE,  10*Constants.ONE_DP_SIZE, 0*Constants.ONE_DP_SIZE); | |||
|  |         params.width =-1; | |||
|  |         params.height = (int) getResources().getDimension(R.dimen.nativeBannerHeight); | |||
|  |         tmpFrame.setLayoutParams(params); | |||
|  |         tmpFrame.setVisibility(View.VISIBLE); | |||
|  |          showAdSlot(mBannerContainer); | |||
|  | 
 | |||
|  | 
 | |||
|  | 
 | |||
|  |     } | |||
|  |     @Override | |||
|  |     public void showTopBanner( int adHeight,int adY) { | |||
|  |        // hideSystemUI(); | |||
|  |        // mTopBannerContainer.setVisibility(View.INVISIBLE);//翻页引起抖动 | |||
|  |         //mTopBannerContainer.removeAllViews(); | |||
|  |       //  Log.d(TAG, String.format("loadBannerAd:showTopBanner width %s, height %s ,adY %s ",Constants.SCREEN_WIDTH_PIX-50,adHeight,adY)); | |||
|  |         tmpFrame =mTopBannerContainer; | |||
|  |        // hideAdSlot(mBannerContainer); | |||
|  |         Log.d(TAG, String.format("loadBannerAd:showTopBanner width %s, height %s ,adY %s ",Constants.SCREEN_WIDTH_PIX-50,adHeight,adY)); | |||
|  |         //hideAdSlot(mBannerContainer); | |||
|  |        // hideAdSlot(mNative_status_banner_container); | |||
|  |         if(adHeight<=0){ | |||
|  |             hideAdSlot(mTopBannerContainer); | |||
|  |             return; | |||
|  |         } | |||
|  | 
 | |||
|  |         int topMargin = adY >200*Constants.ONE_DP_SIZE ? adY -15*Constants.ONE_DP_SIZE :adY -5*Constants.ONE_DP_SIZE; | |||
|  | 
 | |||
|  |        // FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) mTopBannerContainer.getLayoutParams(); | |||
|  |         LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mTopBannerContainer.getLayoutParams(); | |||
|  |         loadBanner(mTopBannerContainer, Constants.SCREEN_WIDTH_PIX-50,adHeight); | |||
|  |       //  loadNativeBannerAd(mTopBannerContainer,BuildConfig.AD_SLOT_TOUTIAO_BANNER_NATIVE_ID,   304,200); | |||
|  |         params.setMargins(10*Constants.ONE_DP_SIZE, topMargin, 10*Constants.ONE_DP_SIZE, 0  ); | |||
|  |         params.width =-1; | |||
|  |          params.height = (int) getResources().getDimension(R.dimen.topBannerHeight); | |||
|  |         mTopBannerContainer.setLayoutParams(params); | |||
|  |         showAdSlot(mTopBannerContainer); | |||
|  |     } | |||
|  | 
 | |||
|  | 
 | |||
|  |     final int contentAdHight=80; | |||
|  | 
 | |||
|  |     @Override | |||
|  |     public void showStatusAd(int adHeight,int adY) { | |||
|  | 
 | |||
|  |        // hideSystemUI(); | |||
|  |        // mShowAd =showAd; | |||
|  |      //   mBannerContainer.setVisibility(View.GONE); | |||
|  | 
 | |||
|  | 
 | |||
|  | 
 | |||
|  |         if(!Constants.AD_SETTING.isShowAdsense()){ | |||
|  |             return; | |||
|  |         } | |||
|  | 
 | |||
|  |       //  Log.d(TAG, String.format("loadBannerAd:width %s, height %s ,adY %s,showAd %s",Constants.SCREEN_WIDTH_PIX-50,adHeight/Constants.ONE_DP_SIZE,adY/Constants.ONE_DP_SIZE, showAd)); | |||
|  | 
 | |||
|  | 
 | |||
|  | 
 | |||
|  |         if(adHeight >contentAdHight){ | |||
|  | 
 | |||
|  | 
 | |||
|  | 
 | |||
|  |         //    Log.d(TAG, String.format("loadBannerAd:width %s, height %s ,adY %s",Constants.SCREEN_WIDTH_PIX-50,adHeight,adY)); | |||
|  | 
 | |||
|  |             if(adHeight>150*Constants.ONE_DP_SIZE && adY <400*Constants.ONE_DP_SIZE){ | |||
|  |                 Log.d(TAG, String.format("loadBannerAd: showStatusAd width %s, height %s ,adY %s ",Constants.SCREEN_WIDTH_PIX-50,adHeight/Constants.ONE_DP_SIZE,adY/Constants.ONE_DP_SIZE  )); | |||
|  |                  hideAdSlot(mBannerContainer); | |||
|  | //                hideAdSlot(mTopBannerContainer); | |||
|  |                 tmpFrame =mNative_status_banner_container; | |||
|  |                 LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mNative_status_banner_container.getLayoutParams(); | |||
|  |                 hideAdSlot(mNative_status_banner_container); | |||
|  | 
 | |||
|  |               //  mBannerContainer.removeAllViews(); | |||
|  |              //   mBannerContainer.setBackgroundResource(R.color.transparent); | |||
|  | 
 | |||
|  |                 loadNativeBannerAd(mNative_status_banner_container); | |||
|  |                 params.setMargins(10*Constants.ONE_DP_SIZE, adY-20*Constants.ONE_DP_SIZE, 10*Constants.ONE_DP_SIZE, 50*Constants.ONE_DP_SIZE); | |||
|  |                // params.height=-1; | |||
|  |                 mNative_status_banner_container.setLayoutParams(params); | |||
|  |                 showAdSlot(mNative_status_banner_container); | |||
|  |                // mNative_banner_container.setVisibility(View.VISIBLE); | |||
|  |               //  showTopBanner(0,0); | |||
|  |             } | |||
|  | 
 | |||
|  | 
 | |||
|  | 
 | |||
|  |         } | |||
|  |     } | |||
|  | 
 | |||
|  | 
 | |||
|  | } |