Skip to content

Commit

Permalink
-improved cursor: added finger pressed mode; cursor wakeup by press; …
Browse files Browse the repository at this point in the history
…pressing visualization;

-added CHINESE SIMPLIFIED localization;
-v1.5.5
  • Loading branch information
Fedir Tsapana committed Aug 13, 2020
1 parent 489e982 commit 16aae79
Show file tree
Hide file tree
Showing 9 changed files with 181 additions and 68 deletions.
8 changes: 4 additions & 4 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ android {
applicationId "com.phlox.tvwebbrowser"
minSdkVersion 21
targetSdkVersion 28
versionCode 37
versionName "1.5.4"
versionCode 38
versionName "1.5.5"

javaCompileOptions {
annotationProcessorOptions {
Expand All @@ -35,7 +35,7 @@ android {
}
buildTypes {
release {
debuggable false
debuggable true
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
Expand All @@ -61,7 +61,7 @@ android {
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')

implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.appcompat:appcompat:1.2.0'

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.4'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -585,8 +585,8 @@ class MainActivity : AppCompatActivity(), CoroutineScope by MainScope() {
?: "url.html", tab.webView?.settings?.userAgentString ?: getString(R.string.app_name), mimeType)
}

override fun onWantZoomMode() {
flWebViewContainer?.goToZoomMode()
override fun onLongTap() {
flWebViewContainer?.goToFingerMode()
}

override fun onThumbnailError() {
Expand Down Expand Up @@ -1109,9 +1109,9 @@ class MainActivity : AppCompatActivity(), CoroutineScope by MainScope() {
uiHandler.post { hideBottomPanel() }
}
return true
} else if (keyCode == KeyEvent.KEYCODE_BACK && flWebViewContainer.zoomMode) {
} else if (keyCode == KeyEvent.KEYCODE_BACK && flWebViewContainer.fingerMode) {
if (event.action == KeyEvent.ACTION_UP) {
uiHandler.post { flWebViewContainer.exitZoomMode() }
uiHandler.post { flWebViewContainer.exitFingerMode() }
}
return true
} else if (shortcutMgr.canProcessKeyCode(keyCode)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import android.content.Context
import android.graphics.*
import android.os.SystemClock
import android.util.AttributeSet
import android.util.Log
import android.view.KeyEvent
import android.view.MotionEvent
import android.view.WindowManager
Expand All @@ -24,6 +23,7 @@ class CursorLayout : FrameLayout {
}

private var cursorRadius: Int = 0
private var cursorRadiusPressed: Int = 0
private var maxCursorSpeed: Float = 0f
private var scrollStartPadding = 100
private var cursorStrokeWidth: Float = 0f
Expand All @@ -39,7 +39,7 @@ class CursorLayout : FrameLayout {
private var scrollHackStarted = false
private val scrollHackCoords = PointF()
private val scrollHackActiveRect = Rect()
var zoomMode = false
var fingerMode = false

private val isCursorDissappear: Boolean
get() {
Expand Down Expand Up @@ -71,6 +71,7 @@ class CursorLayout : FrameLayout {
display.getSize(displaySize)
cursorStrokeWidth = (displaySize.x / 400).toFloat()
cursorRadius = displaySize.x / 110
cursorRadiusPressed = cursorRadius + Utils.D2P(context, 5f).toInt()
maxCursorSpeed = (displaySize.x / 25).toFloat()
scrollStartPadding = displaySize.x / 15
}
Expand Down Expand Up @@ -169,19 +170,32 @@ class CursorLayout : FrameLayout {
return true
}
KeyEvent.KEYCODE_DPAD_CENTER, KeyEvent.KEYCODE_ENTER, KeyEvent.KEYCODE_NUMPAD_ENTER, KeyEvent.KEYCODE_BUTTON_A -> {
if (isCursorDissappear) {
return super.dispatchKeyEvent(event)
}
if (event.action == KeyEvent.ACTION_DOWN && !keyDispatcherState.isTracking(event)) {
keyDispatcherState.startTracking(event, this)
dpadCenterPressed = true
dispatchMotionEvent(cursorPosition.x, cursorPosition.y, MotionEvent.ACTION_DOWN)
if (fingerMode) {
exitFingerMode()
return false
} else {
keyDispatcherState.startTracking(event, this)
if (!isCursorDissappear) {
dpadCenterPressed = true
dispatchMotionEvent(cursorPosition.x, cursorPosition.y, MotionEvent.ACTION_DOWN)
postInvalidate()
}
}
} else if (event.action == KeyEvent.ACTION_UP) {
keyDispatcherState.handleUpEvent(event)
//loadUrl("javascript:function simulateClick(x,y){var clickEvent=document.createEvent('MouseEvents');clickEvent.initMouseEvent('click',true,true,window,0,0,0,x,y,false,false,false,false,0,null);document.elementFromPoint(x,y).dispatchEvent(clickEvent)}simulateClick("+(int)cursorPosition.x+","+(int)cursorPosition.y+");");
// Obtain MotionEvent object
dispatchMotionEvent(cursorPosition.x, cursorPosition.y, MotionEvent.ACTION_UP)
dpadCenterPressed = false
if (fingerMode) {
//nop
} else if (isCursorDissappear) {
lastCursorUpdate = System.currentTimeMillis()
postInvalidate()
} else {
dispatchMotionEvent(cursorPosition.x, cursorPosition.y, MotionEvent.ACTION_UP)
dpadCenterPressed = false
postInvalidate()
}
}

return true
Expand Down Expand Up @@ -213,37 +227,24 @@ class CursorLayout : FrameLayout {
}

private fun handleDirectionKeyEvent(event: KeyEvent, x: Int, y: Int, keyDown: Boolean) {
val child = getChildAt(0)
if (zoomMode) {
if (child != null && child is WebViewEx) {
if (y > 0) {
if (child.canZoomOut())
child.zoomOut()
} else if (y < 0) {
if (child.canZoomIn())
child.zoomIn()
}
lastCursorUpdate = System.currentTimeMillis()
if (keyDown) {
if (keyDispatcherState.isTracking(event)) {
return
}
removeCallbacks(cursorUpdateRunnable)
post(cursorUpdateRunnable)
keyDispatcherState.startTracking(event, this)
} else {
lastCursorUpdate = System.currentTimeMillis()
if (keyDown) {
if (keyDispatcherState.isTracking(event)) {
return
}
removeCallbacks(cursorUpdateRunnable)
post(cursorUpdateRunnable)
keyDispatcherState.startTracking(event, this)
} else {
keyDispatcherState.handleUpEvent(event)
cursorSpeed.set(0f, 0f)
if (scrollHackStarted) {
dispatchMotionEvent(scrollHackCoords.x, scrollHackCoords.y, MotionEvent.ACTION_CANCEL)
scrollHackStarted = false
}
keyDispatcherState.handleUpEvent(event)
cursorSpeed.set(0f, 0f)
if (scrollHackStarted) {
dispatchMotionEvent(scrollHackCoords.x, scrollHackCoords.y, MotionEvent.ACTION_CANCEL)
scrollHackStarted = false
}

cursorDirection.set(if (x == UNCHANGED) cursorDirection.x else x, if (y == UNCHANGED) cursorDirection.y else y)
}

cursorDirection.set(if (x == UNCHANGED) cursorDirection.x else x, if (y == UNCHANGED) cursorDirection.y else y)
}

private fun scrollWebViewBy(wv: WebViewEx, scrollX: Int, scrollY: Int) {
Expand Down Expand Up @@ -305,39 +306,39 @@ class CursorLayout : FrameLayout {
return
}

if (zoomMode) {
val zoomText = "Zoom: +/-"
paint.textSize = Utils.D2P(context, 50F)
paint.color = Color.argb(128, 255, 255, 255)
paint.style = Paint.Style.FILL
val textWidth = paint.measureText(zoomText)
canvas.drawText(zoomText, width / 2f - textWidth / 2f, height / 2f, paint)
paint.color = Color.GRAY
paint.strokeWidth = cursorStrokeWidth
paint.style = Paint.Style.STROKE
canvas.drawText(zoomText, width / 2f - textWidth / 2f, height / 2f, paint)
} else if (!isCursorDissappear) {
if (fingerMode || !isCursorDissappear) {
val cx = cursorPosition.x
val cy = cursorPosition.y
val radius = if (dpadCenterPressed) cursorRadiusPressed else cursorRadius

paint.color = Color.argb(128, 255, 255, 255)
paint.color = if (fingerMode)
Color.argb(128, 200, 200, 255) else
Color.argb(128, 255, 255, 255)
paint.style = Paint.Style.FILL
canvas.drawCircle(cx, cy, cursorRadius.toFloat(), paint)
canvas.drawCircle(cx, cy, radius.toFloat(), paint)

paint.color = Color.GRAY
paint.strokeWidth = cursorStrokeWidth
paint.style = Paint.Style.STROKE
canvas.drawCircle(cx, cy, cursorRadius.toFloat(), paint)
canvas.drawCircle(cx, cy, radius.toFloat(), paint)

if (fingerMode) {
val halfRadius = radius.toFloat() / 2
canvas.drawLine(cx - halfRadius, cy, cx + halfRadius, cy, paint)
canvas.drawLine(cx, cy - halfRadius, cx, cy + halfRadius, paint)
}
}
}

fun goToZoomMode() {
zoomMode = true
fun goToFingerMode() {
fingerMode = true
postInvalidate()
}

fun exitZoomMode() {
zoomMode = false
fun exitFingerMode() {
dispatchMotionEvent(cursorPosition.x, cursorPosition.y, MotionEvent.ACTION_UP)
dpadCenterPressed = false
fingerMode = false
postInvalidate()
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import android.webkit.WebView
import android.widget.FrameLayout
import android.widget.PopupMenu
import com.phlox.tvwebbrowser.R
import kotlin.math.min

/**
* Created by fedex on 12.08.16.
Expand All @@ -36,7 +35,7 @@ class WebViewEx : WebView {
interface Listener {
fun onOpenInNewTabRequested(s: String)
fun onDownloadRequested(url: String)
fun onWantZoomMode()
fun onLongTap()
fun onThumbnailError()
}

Expand Down Expand Up @@ -89,7 +88,7 @@ class WebViewEx : WebView {
if (s != null && "null" != s) {
suggestActionsForLink(s)
} else {
listener?.onWantZoomMode()
listener?.onLongTap()
}
}
true
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/layout/activity_history.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<Button
android:id="@+id/btnClear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_height="?android:attr/listPreferredItemHeight"
android:layout_alignParentEnd="true"
android:text="@string/clear"
android:layout_margin="5dp"
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-ru/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -98,4 +98,6 @@
<string name="close_application">Закрыть приложение</string>
<string name="close_tab">Закрыть вкладку</string>
<string name="navigate_forward">Перейти вперед</string>
<string name="zoom_in">Увеличить</string>
<string name="zoom_out">Уменьшить</string>
</resources>
2 changes: 2 additions & 0 deletions app/src/main/res/values-uk/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -98,4 +98,6 @@
<string name="close_application">Закрити додаток</string>
<string name="close_tab">Закрити вкладку</string>
<string name="navigate_forward">Навігація вперед</string>
<string name="zoom_in">Збільшити</string>
<string name="zoom_out">Зменшити</string>
</resources>
108 changes: 108 additions & 0 deletions app/src/main/res/values-zh/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
<resources>
<string name="app_name">TV Bro: 电视网络浏览器</string>
<string name="error">错误</string>
<string name="ok">好</string>
<string name="loading">载入中...</string>
<string name="url_prompt">输入查询文字或网址</string>
<string name="can_not_recognize">无法识别</string>
<string name="speak">搜索查询</string>
<string name="open_new_tab">开启新分页</string>
<string name="close">关</string>
<string name="web_perm_request_confirmation">该网页要使用以下资源:\n\n%s</string>
<string name="allow">允许</string>
<string name="deny">拒绝</string>
<string name="location">位置</string>
<string name="open_in_new_tab">在新标签页中打开</string>
<string name="download_started">开始下载…\n文件将存储在:\n%s</string>
<string name="downloading_file">正在下载文件…</string>
<string name="err_cant_open_file_chooser">无法打开文件选择器</string>
<string name="bookmarks">书签</string>
<string name="add">加</string>
<string name="edit">编辑</string>
<string name="new_bookmark">新书签</string>
<string name="title">标题</string>
<string name="search_history">搜索历史记录</string>
<string name="engine">搜索引擎</string>
<string name="choose_default_search_engine">选择默认搜索引擎</string>
<string name="save">保存</string>
<string name="search_engine_url_with_query_placeholder_query">带有查询占位符的搜索引擎网址[query]</string>
<string name="change_search_engine">变更搜寻引擎</string>
<string name="change_user_agent">更改用户代理</string>
<string name="user_agent_string">用户代理字符串</string>
<string name="choose_user_agent_string">选择用户代理字符串</string>
<string name="edit_user_agent_string">编辑用户代理字符串</string>
<string name="nothing">没有</string>
<string name="cancelled">取消</string>
<string name="download">下载</string>
<string name="file_not_found">文件未找到</string>
<string name="no_app_for_file_type">找不到打开此文件类型的应用程序</string>
<string name="delete">删除</string>
<string name="cancel">取消</string>
<string name="msg_delete_history">删除选定的历史项目?</string>
<string name="msg_delete_history_all">删除所有历史记录项?</string>
<string name="open_folder">打开包含文件夹</string>
<string name="no_file_explorer_msg">似乎您的设备上没有安装任何合适的文件浏览器应用程序</string>
<string name="shortcuts">捷径</string>
<string name="favorites">收藏夹</string>
<string name="history">历史</string>
<string name="settings">设定值</string>
<string name="shortcut">捷径</string>
<string name="toggle_main_menu">切换主菜单</string>
<string name="navigate_back">向后导航</string>
<string name="navigate_home">导航到家</string>
<string name="refresh_page">刷新页面</string>
<string name="voice_search">声音搜索</string>
<string name="zoom_in">放大</string>
<string name="zoom_out">缩小</string>
<string name="not_set">没有设置</string>
<string name="action">行动:</string>
<string name="current_key">当前密钥:</string>
<string name="set_key_for_action">设定行动关键</string>
<string name="press_eny_key">按任意键...</string>
<string name="clear">明确</string>
<string name="install">安装</string>
<string name="turn_on_unknown_sources">请打开“未知来源”系统设置</string>
<string name="turn_on_unknown_sources_for_app">请允许TV Bro在系统设置中从“未知来源”安装应用</string>
<string name="storage_not_mounted">存储未安装</string>
<string name="can_not_create_downloads">无法创建下载目录</string>
<string name="voice_search_not_found">找不到语音搜索</string>
<string name="new_version_dialog_title">新版本可用</string>
<string name="later">后来</string>
<string name="downloads">资料下载</string>
<string name="downloads_notifications_description">关于下载状态的通知</string>
<string name="main">主要</string>
<string name="version_and_updates">版</string>
<string name="version_s">版本: %s</string>
<string name="update_channel">更新频道:</string>
<string name="auto_check_for_updates">自动检查更新</string>
<string name="update">更新资料</string>
<string name="new_version_available_s">新版本可用: %s</string>
<string name="web_browser_optimized_for_tvs_https_github_com_truefedex_tv_bro">针对电视进行了优化的网络浏览器\n https://github.com/truefedex/tv-bro</string>
<string name="warning">警告</string>
<string name="unprotected_connection">未保护的连接</string>
<string name="err_webview_can_not_link">无法链接到WebView组件。尝试先安装Android系统WebView组件。</string>
<string name="new_tab_title">[新标签]</string>
<string name="open_a_new_tab_here">在这里打开一个新标签</string>
<string name="tabs">标签</string>
<array name="tabs_options">
<item>Close current</item>
<item>Close all</item>
<item>Move left</item>
<item>Move right</item>
</array>
<string name="ssl_expired">证书已过期</string>
<string name="ssl_idmismatch">主机名不匹配</string>
<string name="ssl_date_invalid">证书日期无效</string>
<string name="ssl_invalid">发生一般错误</string>
<string name="back_to_safety">回到安全</string>
<string name="go_im_aware">走。我知道风险</string>
<string name="connection_isnt_secure">连接不安全</string>
<string name="hostname">主机名:</string>
<string name="err_desk">错误说明:</string>
<string name="details">细节:</string>
<string name="exit">出口</string>
<string name="find_in_apps_store">在应用商店中查找</string>
<string name="close_application">关闭申请</string>
<string name="close_tab">关闭标签</string>
<string name="navigate_forward">向前导航</string>
</resources>
Loading

0 comments on commit 16aae79

Please sign in to comment.