Revert "use scrollview/webview instead of titlewebview hack"

This reverts commit 780629fff5.

Conflicts:

	res/layout/article_fragment.xml
	src/org/fox/ttrss/ArticleFragment.java
	src/org/fox/ttrss/offline/OfflineArticleFragment.java
This commit is contained in:
Andrew Dolgov 2013-10-16 19:53:32 +04:00
parent ced4e4b089
commit cb18030f6b
6 changed files with 195 additions and 147 deletions

View File

@ -1,25 +1,22 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/article_fragment" android:id="@+id/article_fragment"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_height="fill_parent"
android:background="?articleBackground" android:background="?articleBackground"
android:orientation="vertical"
android:padding="5sp" > android:padding="5sp" >
<org.fox.ttrss.util.NoChildFocusScrollView <org.fox.ttrss.TitleWebView
android:id="@+id/scrollView1" android:id="@+id/content"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:fillViewport="false" > android:layout_weight="1">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout <LinearLayout
android:id="@+id/article_header" android:id="@+id/article_header"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="0"
android:orientation="vertical" android:orientation="vertical"
android:paddingBottom="2dp" > android:paddingBottom="2dp" >
@ -67,8 +64,8 @@
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:paddingBottom="4dp"
android:paddingBottom="4dp" > android:layout_weight="1" >
<TextView <TextView
android:id="@+id/tags" android:id="@+id/tags"
@ -94,12 +91,7 @@
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
<WebView
android:id="@+id/content" </org.fox.ttrss.TitleWebView>
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout> </LinearLayout>
</org.fox.ttrss.util.NoChildFocusScrollView>
</RelativeLayout>

View File

@ -161,11 +161,11 @@
android:title="@string/offline_oldest_first" /> android:title="@string/offline_oldest_first" />
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory android:title="@string/debugging" > <PreferenceCategory android:title="@string/debugging" >
<CheckBoxPreference <!-- <CheckBoxPreference
android:defaultValue="true" android:defaultValue="true"
android:key="webview_hardware_accel" android:key="webview_hardware_accel"
android:summary="@string/accel_webview_summary" android:summary="@string/accel_webview_summary"
android:title="@string/accel_webview_title" /> android:title="@string/accel_webview_title" /> -->
<CheckBoxPreference <CheckBoxPreference
android:defaultValue="false" android:defaultValue="false"
android:key="transport_debugging" android:key="transport_debugging"

View File

@ -23,7 +23,6 @@ import android.os.Bundle;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.text.Html; import android.text.Html;
import android.util.Log;
import android.util.TypedValue; import android.util.TypedValue;
import android.view.ContextMenu; import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo; import android.view.ContextMenu.ContextMenuInfo;
@ -164,7 +163,7 @@ public class ArticleFragment extends Fragment implements GestureDetector.OnDoubl
registerForContextMenu(web); registerForContextMenu(web);
// prevent flicker in ics // prevent flicker in ics
if (!m_prefs.getBoolean("webview_hardware_accel", true)) { if (android.os.Build.VERSION.SDK_INT >= 11) {
web.setLayerType(View.LAYER_TYPE_SOFTWARE, null); web.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
} }
@ -281,7 +280,7 @@ public class ArticleFragment extends Fragment implements GestureDetector.OnDoubl
} }
} }
content += "</body></html>"; content += "<p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p></body></html>";
try { try {
String baseUrl = null; String baseUrl = null;

View File

@ -0,0 +1,91 @@
package org.fox.ttrss;
// http://www.techques.com/question/1-9718245/Webview-in-Scrollview
import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.webkit.WebView;
public class TitleWebView extends WebView{
public TitleWebView(Context context, AttributeSet attrs){
super(context, attrs);
}
private int titleHeight;
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
// determine height of title bar
View title = getChildAt(0);
titleHeight = title==null ? 0 : title.getMeasuredHeight();
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev){
return true; // don't pass our touch events to children (title bar), we send these in dispatchTouchEvent
}
private boolean touchInTitleBar;
@Override
public boolean dispatchTouchEvent(MotionEvent me){
boolean wasInTitle = false;
switch(me.getActionMasked()){
case MotionEvent.ACTION_DOWN:
touchInTitleBar = (me.getY() <= visibleTitleHeight());
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
wasInTitle = touchInTitleBar;
touchInTitleBar = false;
break;
}
if(touchInTitleBar || wasInTitle) {
View title = getChildAt(0);
if(title!=null) {
// this touch belongs to title bar, dispatch it here
me.offsetLocation(0, getScrollY());
return title.dispatchTouchEvent(me);
}
}
// this is our touch, offset and process
me.offsetLocation(0, -titleHeight);
return super.dispatchTouchEvent(me);
}
/**
* @return visible height of title (may return negative values)
*/
private int visibleTitleHeight(){
return titleHeight-getScrollY();
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt){
super.onScrollChanged(l, t, oldl, oldt);
View title = getChildAt(0);
if(title!=null) // undo horizontal scroll, so that title scrolls only vertically
title.offsetLeftAndRight(l - title.getLeft());
}
@Override
protected void onDraw(Canvas c){
c.save();
int tH = visibleTitleHeight();
if(tH>0) {
// clip so that it doesn't clear background under title bar
int sx = getScrollX(), sy = getScrollY();
c.clipRect(sx, sy+tH, sx+getWidth(), sy+getHeight());
}
c.translate(0, titleHeight);
super.onDraw(c);
c.restore();
}
}

View File

@ -211,7 +211,7 @@ public class OfflineArticleFragment extends Fragment implements GestureDetector.
getActivity().getTheme().resolveAttribute(R.attr.linkColor, tv, true); getActivity().getTheme().resolveAttribute(R.attr.linkColor, tv, true);
// prevent flicker in ics // prevent flicker in ics
if (!m_prefs.getBoolean("webview_hardware_accel", true)) { if (android.os.Build.VERSION.SDK_INT >= 11) {
web.setLayerType(View.LAYER_TYPE_SOFTWARE, null); web.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
} }
@ -280,7 +280,7 @@ public class OfflineArticleFragment extends Fragment implements GestureDetector.
cssOverride + cssOverride +
"</style>" + "</style>" +
"</head>" + "</head>" +
"<body>" + articleContent + "</body></html>"; "<body>" + articleContent + "<p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p></body></html>";
try { try {
String baseUrl = null; String baseUrl = null;

View File

@ -1,34 +0,0 @@
package org.fox.ttrss.util;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.webkit.WebView;
import android.widget.ScrollView;
public class NoChildFocusScrollView extends ScrollView {
public NoChildFocusScrollView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public NoChildFocusScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public NoChildFocusScrollView(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
@Override
public void requestChildFocus(View child, View focused) {
if (focused instanceof WebView )
return;
super.requestChildFocus(child, focused);
}
}