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