1 package org.coolreader.crengine; 2 3 import android.view.KeyEvent; 4 import android.view.LayoutInflater; 5 import android.view.View; 6 import android.view.ViewGroup; 7 import android.widget.TextView; 8 9 import org.coolreader.R; 10 11 public class BrowserViewLayout extends ViewGroup { 12 private BaseActivity activity; 13 private FileBrowser contentView; 14 private View titleView; 15 private CRToolBar toolbarView; BrowserViewLayout(BaseActivity context, FileBrowser contentView, CRToolBar toolbar, View titleView)16 public BrowserViewLayout(BaseActivity context, FileBrowser contentView, CRToolBar toolbar, View titleView) { 17 super(context); 18 this.activity = context; 19 this.contentView = contentView; 20 21 22 this.titleView = titleView; 23 this.titleView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 24 this.toolbarView = toolbar; 25 this.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 26 this.addView(titleView); 27 this.addView(toolbarView); 28 this.addView(contentView); 29 this.onThemeChanged(context.getCurrentTheme()); 30 titleView.setFocusable(false); 31 titleView.setFocusableInTouchMode(false); 32 toolbarView.setFocusable(false); 33 toolbarView.setFocusableInTouchMode(false); 34 contentView.setFocusable(false); 35 contentView.setFocusableInTouchMode(false); 36 setFocusable(true); 37 setFocusableInTouchMode(true); 38 } 39 40 private String browserTitle = ""; setBrowserTitle(String title)41 public void setBrowserTitle(String title) { 42 this.browserTitle = title; 43 ((TextView)titleView.findViewById(R.id.title)).setText(title); 44 } 45 onThemeChanged(InterfaceTheme theme)46 public void onThemeChanged(InterfaceTheme theme) { 47 //titleView.setBackgroundResource(theme.getBrowserStatusBackground()); 48 //toolbarView.setButtonAlpha(theme.getToolbarButtonAlpha()); 49 LayoutInflater inflater = LayoutInflater.from(activity);// activity.getLayoutInflater(); 50 removeView(titleView); 51 titleView = inflater.inflate(R.layout.browser_status_bar, null); 52 addView(titleView); 53 setBrowserTitle(browserTitle); 54 toolbarView.setBackgroundResource(theme.getBrowserToolbarBackground(toolbarView.isVertical())); 55 toolbarView.onThemeChanged(theme); 56 requestLayout(); 57 } 58 59 @Override onLayout(boolean changed, int l, int t, int r, int b)60 protected void onLayout(boolean changed, int l, int t, int r, int b) { 61 r -= l; 62 b -= t; 63 t = 0; 64 l = 0; 65 int titleHeight = titleView.getMeasuredHeight(); 66 if (toolbarView.isVertical()) { 67 int tbWidth = toolbarView.getMeasuredWidth(); 68 titleView.layout(l + tbWidth, t, r, t + titleHeight); 69 toolbarView.layout(l, t, l + tbWidth, b); 70 contentView.layout(l + tbWidth, t + titleHeight, r, b); 71 toolbarView.setBackgroundResource(activity.getCurrentTheme().getBrowserToolbarBackground(true)); 72 } else { 73 int tbHeight = toolbarView.getMeasuredHeight(); 74 toolbarView.layout(l, t, r, t + tbHeight); 75 titleView.layout(l, t + tbHeight, r, t + titleHeight + tbHeight); 76 contentView.layout(l, t + titleHeight + tbHeight, r, b); 77 toolbarView.setBackgroundResource(activity.getCurrentTheme().getBrowserToolbarBackground(false)); 78 } 79 } 80 81 @Override onMeasure(int widthMeasureSpec, int heightMeasureSpec)82 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 83 int w = MeasureSpec.getSize(widthMeasureSpec); 84 int h = MeasureSpec.getSize(heightMeasureSpec); 85 86 87 toolbarView.setVertical(w > h); 88 if (w > h) { 89 // landscape 90 toolbarView.setVertical(true); 91 toolbarView.measure(MeasureSpec.makeMeasureSpec(w, MeasureSpec.AT_MOST), 92 MeasureSpec.makeMeasureSpec(h, MeasureSpec.AT_MOST)); 93 int tbWidth = toolbarView.getMeasuredWidth(); 94 titleView.measure(MeasureSpec.makeMeasureSpec(w - tbWidth, MeasureSpec.AT_MOST), 95 MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 96 int titleHeight = titleView.getMeasuredHeight(); 97 contentView.measure(MeasureSpec.makeMeasureSpec(w - tbWidth, MeasureSpec.AT_MOST), 98 MeasureSpec.makeMeasureSpec(h - titleHeight, MeasureSpec.AT_MOST)); 99 } else { 100 // portrait 101 toolbarView.setVertical(false); 102 toolbarView.measure(MeasureSpec.makeMeasureSpec(w, MeasureSpec.AT_MOST), 103 MeasureSpec.makeMeasureSpec(h, MeasureSpec.AT_MOST)); 104 int tbHeight = toolbarView.getMeasuredHeight(); 105 titleView.measure(widthMeasureSpec, 106 MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 107 int titleHeight = titleView.getMeasuredHeight(); 108 contentView.measure(widthMeasureSpec, 109 MeasureSpec.makeMeasureSpec(h - titleHeight - tbHeight, MeasureSpec.AT_MOST)); 110 } 111 setMeasuredDimension(w, h); 112 } 113 114 @Override onSizeChanged(int w, int h, int oldw, int oldh)115 protected void onSizeChanged(int w, int h, int oldw, int oldh) { 116 super.onSizeChanged(w, h, oldw, oldh); 117 } 118 119 120 private long menuDownTs = 0; 121 private long backDownTs = 0; 122 123 @Override onKeyDown(int keyCode, KeyEvent event)124 public boolean onKeyDown(int keyCode, KeyEvent event) { 125 if (event.getKeyCode() == KeyEvent.KEYCODE_MENU) { 126 //L.v("BrowserViewLayout.onKeyDown(" + keyCode + ")"); 127 if (event.getRepeatCount() == 0) 128 menuDownTs = Utils.timeStamp(); 129 return true; 130 } 131 if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) { 132 //L.v("BrowserViewLayout.onKeyDown(" + keyCode + ")"); 133 if (event.getRepeatCount() == 0) 134 backDownTs = Utils.timeStamp(); 135 return true; 136 } 137 if (contentView.onKeyDown(keyCode, event)) 138 return true; 139 return super.onKeyDown(keyCode, event); 140 } 141 142 @Override onKeyUp(int keyCode, KeyEvent event)143 public boolean onKeyUp(int keyCode, KeyEvent event) { 144 if (event.getKeyCode() == KeyEvent.KEYCODE_MENU) { 145 long duration = Utils.timeInterval(menuDownTs); 146 L.v("BrowserViewLayout.onKeyUp(" + keyCode + ") duration = " + duration); 147 if (duration > 700 && duration < 10000) 148 activity.showBrowserOptionsDialog(); 149 else 150 toolbarView.showOverflowMenu(); 151 return true; 152 } 153 if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) { 154 long duration = Utils.timeInterval(backDownTs); 155 L.v("BrowserViewLayout.onKeyUp(" + keyCode + ") duration = " + duration); 156 if (duration > 700 && duration < 10000) { 157 activity.finish(); 158 } else { 159 contentView.showParentDirectory(); 160 } 161 return true; 162 } 163 if (contentView.onKeyUp(keyCode, event)) 164 return true; 165 return super.onKeyUp(keyCode, event); 166 } 167 168 169 } 170 171 172