Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
B
Browser White
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wanglei
Browser White
Commits
3aac7817
Commit
3aac7817
authored
Sep 02, 2024
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
...
parent
d3f86eaf
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
369 additions
and
112 deletions
+369
-112
HistoryBean.kt
app/src/main/java/com/base/browserwhite/bean/HistoryBean.kt
+8
-0
SearchTipBean.kt
...src/main/java/com/base/browserwhite/bean/SearchTipBean.kt
+4
-0
SearchTipUtils.kt
...rc/main/java/com/base/browserwhite/help/SearchTipUtils.kt
+107
-8
MainActivity.kt
...in/java/com/base/browserwhite/ui/activity/MainActivity.kt
+4
-2
SearchActivity.kt
...om/base/browserwhite/ui/activity/search/SearchActivity.kt
+134
-83
SearchAdapter.kt
...com/base/browserwhite/ui/activity/search/SearchAdapter.kt
+29
-0
WebBrowserActivity.kt
...browserwhite/ui/activity/webbrowser/WebBrowserActivity.kt
+1
-1
WebViewFragment.kt
...se/browserwhite/ui/activity/webbrowser/WebViewFragment.kt
+6
-1
HomeFragment.kt
...in/java/com/base/browserwhite/ui/fragment/HomeFragment.kt
+6
-3
SpBeanUtils.kt
app/src/main/java/com/base/browserwhite/utils/SpBeanUtils.kt
+1
-1
activity_search.xml
app/src/main/res/layout/activity_search.xml
+42
-13
item_search_tip.xml
app/src/main/res/layout/item_search_tip.xml
+27
-0
s_guanbi.png
app/src/main/res/mipmap-xxhdpi/s_guanbi.png
+0
-0
s_wangluo.png
app/src/main/res/mipmap-xxhdpi/s_wangluo.png
+0
-0
No files found.
app/src/main/java/com/base/browserwhite/bean/HistoryBean.kt
0 → 100644
View file @
3aac7817
package
com.base.browserwhite.bean
data class
HistoryBean
(
val
name
:
String
=
""
,
val
url
:
String
=
""
,
val
time
:
Long
=
0
,
val
color
:
Int
=
0
,
)
:
SpBean
()
app/src/main/java/com/base/browserwhite/bean/SearchTipBean.kt
0 → 100644
View file @
3aac7817
package
com.base.browserwhite.bean
class
SearchTipBean
{
}
\ No newline at end of file
app/src/main/java/com/base/browserwhite/help/SearchTipUtils.kt
View file @
3aac7817
package
com.base.browserwhite.help
import
android.util.Log
import
android.widget.Toast
import
com.base.browserwhite.utils.AppPreferences
import
com.base.browserwhite.utils.LogEx
import
org.json.JSONArray
import
java.io.BufferedReader
import
java.io.InputStreamReader
import
java.net.HttpURLConnection
import
java.net.URL
import
java.net.URLEncoder
object
SearchTipUtils
{
private
val
TAG
=
"SearchTipUtils"
fun
getSearchTip
(
q
:
String
):
String
?
{
fun
getSearchTip
(
q
:
String
):
List
<
String
>?
{
val
encodedQuery
=
URLEncoder
.
encode
(
q
,
"UTF-8"
)
val
url
=
"https://www.google.com/complete/search?q=$q&cp=3&client=gws-wiz&xssi=t&hl=en"
try
{
val
conn
:
HttpURLConnection
=
URL
(
url
).
openConnection
()
as
HttpURLConnection
conn
.
setRequestMethod
(
"GET"
)
conn
.
connectTimeout
=
5000
// conn.setRequestProperty("Accept-Charset", "UTF-8")
if
(
200
==
conn
.
getResponseCode
())
{
val
json
=
BufferedReader
(
InputStreamReader
(
conn
.
inputStream
)).
readLine
()
LogEx
.
logDebug
(
TAG
,
json
)
AppPreferences
.
getInstance
().
put
(
TAG
,
json
)
return
json
val
reader
=
BufferedReader
(
InputStreamReader
(
conn
.
inputStream
))
val
sb
=
StringBuilder
()
var
line
:
String
?
=
reader
.
readLine
()
while
(
line
!=
null
)
{
sb
.
append
(
line
)
// sb.append("\n") // 保留换行符
line
=
reader
.
readLine
()
}
reader
.
close
()
// 关闭流
return
parseSearchTip
(
sb
.
toString
())
}
}
catch
(
e
:
Exception
)
{
e
.
printStackTrace
()
...
...
@@ -32,4 +43,92 @@ object SearchTipUtils {
return
null
}
fun
parseSearchTip
(
content
:
String
):
ArrayList
<
String
>
{
LogEx
.
logDebug
(
TAG
,
"content=$content"
)
// val ss = ")]}'" +
// "[[[\"cathay pacific\",46,[512,433,465,131,199],{\"lm\":[],\"zh\":\"Cathay Pacific\",\"zi\":\"\",\"zp\":{\"gs_ssp\":\"eJzj4tTP1TcwNC7MzVZgNGB0YPDiS04syUisVChITM5My0wGAIIACQ8\"},\"zs\":\"https://encrypted-tbn0.gstatic.com/images?q\\u003dtbn:ANd9GcQtzgOhVqh-vupszYF_gIbWcyVwIdRMfpI_ba906tve\\u0026s\\u003d10\"}],[\"cat\\u003cb\\u003ehay pacific hk\\u003c\\/b\\u003e\",0,[512,433,131]],[\"cat\",46,[512,433,131],{\"lm\":[],\"zh\":\"Cat\",\"zi\":\"Animal\",\"zp\":{\"gs_ssp\":\"eJzj4tDP1TcwrCyqMGD0Yk5OLAEAIl8EWA\"},\"zs\":\"https://encrypted-tbn0.gstatic.com/images?q\\u003dtbn:ANd9GcT4e_IR-4BLrmcChIUBwzHJ0xFnhVRLPaDq3S4Zh-VcV95KdCNROxchRNy5Gg\\u0026s\\u003d10\"}],[\"cat\\u003cb\\u003ehay pacific online check in\\u003c\\/b\\u003e\",0,[512]],[\"cat\\u003cb\\u003ealog hk\\u003c\\/b\\u003e\",0,[512,433,131,650]],[\"cat\\u003cb\\u003ealog\\u003c\\/b\\u003e\",0,[512]],[\"cat\\u003cb\\u003ehay pacific booking\\u003c\\/b\\u003e\",0,[512,433]],[\"cat\\u003cb\\u003ehay pacific flight status\\u003c\\/b\\u003e\",0,[512]],[\"cat\\u003cb\\u003ehay shop\\u003c\\/b\\u003e\",0,[512,433,650]],[\"cat\\u003cb\\u003ehay check in\\u003c\\/b\\u003e\",0,[512,433]]],{\"ag\":{\"a\":{\"40024\":[\"\",\"\",1,20]}},\"q\":\"-26moM5WZmS00EjrsMoHYLIF1Zo\"}]"
val
list
=
arrayListOf
<
String
>()
try
{
val
json
=
content
.
replace
(
")]}'"
,
""
)
val
jsonArray
=
JSONArray
(
json
)
val
firstArray
=
jsonArray
.
getJSONArray
(
0
)
for
(
i
in
0
until
firstArray
.
length
())
{
val
subArray
=
firstArray
.
getJSONArray
(
i
)
val
name
=
subArray
.
getString
(
0
).
replace
(
"<b>"
,
""
).
replace
(
"</b>"
,
""
)
// list.add(convertUnicodeToChinese(name))
val
decodeContent
=
decodeHtmlEntities
(
name
)
LogEx
.
logDebug
(
TAG
,
"decodeContent=$decodeContent"
)
list
.
add
(
decodeContent
)
}
}
catch
(
e
:
Exception
)
{
e
.
printStackTrace
()
}
return
list
}
fun
decodeHtmlEntities
(
input
:
String
):
String
{
val
regex
=
"&#(\\d+);"
.
toRegex
()
val
ss
=
regex
.
replace
(
input
)
{
matchResult
->
val
code
=
matchResult
.
groupValues
[
1
]
LogEx
.
logDebug
(
TAG
,
"decodeHtmlEntities code=$code"
)
val
unicodeInt
=
code
.
toInt
()
val
chinese
=
unicodeInt
.
toChar
().
toString
()
LogEx
.
logDebug
(
TAG
,
"decodeHtmlEntities chinese=$chinese"
)
chinese
}
return
ss
}
private
fun
test
()
{
// val ss = "[\n" +
// "\t[\n" +
// "\t\t[\"cathay pacific\", 46, [512, 433, 465, 131, 199], {\n" +
// "\t\t\t\"lm\": [],\n" +
// "\t\t\t\"zh\": \"Cathay Pacific\",\n" +
// "\t\t\t\"zi\": \"\",\n" +
// "\t\t\t\"zp\": {\n" +
// "\t\t\t\t\"gs_ssp\": \"eJzj4tTP1TcwNC7MzVZgNGB0YPDiS04syUisVChITM5My0wGAIIACQ8\"\n" +
// "\t\t\t},\n" +
// "\t\t\t\"zs\": \"https://encrypted-tbn0.gstatic.com/images?q\\u003dtbn:ANd9GcQtzgOhVqh-vupszYF_gIbWcyVwIdRMfpI_ba906tve\\u0026s\\u003d10\"\n" +
// "\t\t}],\n" +
// "\t\t[\"cat\\u003cb\\u003ehay pacific hk\\u003c\\/b\\u003e\", 0, [512, 433, 131]],\n" +
// "\t\t[\"cat\", 46, [512, 433, 131], {\n" +
// "\t\t\t\"lm\": [],\n" +
// "\t\t\t\"zh\": \"Cat\",\n" +
// "\t\t\t\"zi\": \"Animal\",\n" +
// "\t\t\t\"zp\": {\n" +
// "\t\t\t\t\"gs_ssp\": \"eJzj4tDP1TcwrCyqMGD0Yk5OLAEAIl8EWA\"\n" +
// "\t\t\t},\n" +
// "\t\t\t\"zs\": \"https://encrypted-tbn0.gstatic.com/images?q\\u003dtbn:ANd9GcT4e_IR-4BLrmcChIUBwzHJ0xFnhVRLPaDq3S4Zh-VcV95KdCNROxchRNy5Gg\\u0026s\\u003d10\"\n" +
// "\t\t}],\n" +
// "\t\t[\"cat\\u003cb\\u003ehay pacific online check in\\u003c\\/b\\u003e\", 0, [512]],\n" +
// "\t\t[\"cat\\u003cb\\u003ealog hk\\u003c\\/b\\u003e\", 0, [512, 433, 131, 650]],\n" +
// "\t\t[\"cat\\u003cb\\u003ealog\\u003c\\/b\\u003e\", 0, [512]],\n" +
// "\t\t[\"cat\\u003cb\\u003ehay pacific booking\\u003c\\/b\\u003e\", 0, [512, 433]],\n" +
// "\t\t[\"cat\\u003cb\\u003ehay pacific flight status\\u003c\\/b\\u003e\", 0, [512]],\n" +
// "\t\t[\"cat\\u003cb\\u003ehay shop\\u003c\\/b\\u003e\", 0, [512, 433, 650]],\n" +
// "\t\t[\"cat\\u003cb\\u003ehay check in\\u003c\\/b\\u003e\", 0, [512, 433]]\n" +
// "\t], {\n" +
// "\t\t\"ag\": {\n" +
// "\t\t\t\"a\": {\n" +
// "\t\t\t\t\"40024\": [\"\", \"\", 1, 20]\n" +
// "\t\t\t}\n" +
// "\t\t},\n" +
// "\t\t\"q\": \"-26moM5WZmS00EjrsMoHYLIF1Zo\"\n" +
// "\t}\n" +
// "]"
val
ss
=
")]}'\n"
+
"[[[\"猫咪大戰abc爭\",46,[512],{\"lm\":[],\"zh\":\"a猫b咪c大戰爭\",\"zi\":\"貓咪大戰爭 \\u2014 電玩遊戲\",\"zp\":{\"gs_ssp\":\"eJzj4tVP1zc0TDczTTfLMKg0YPTif96z-umkVU-XLH_WseF5x1oAwEEO8g\"},\"zs\":\"https://encrypted-tbn0.gstatic.com/images?q\\u003dtbn:ANd9GcRGG_A_I5lQPkkqg2lMDbGh7oAoia7By2jhoHgJGox0\\u0026s\\u003d10\"}],[\"猫咪\",46,[512],{\"lm\":[],\"zh\":\"猫咪\",\"zi\":\"貓 \\u2014 動物\",\"zp\":{\"gs_ssp\":\"eJzj4tDP1TcwrCyqMGD0Ynves_rppFUAOMQHYg\"},\"zs\":\"https://encrypted-tbn0.gstatic.com/images?q\\u003dtbn:ANd9GcSQAMEz7n5AwO0o3jxemIZ42sRhDthz6T3rWt_HeYDP\\u0026s\\u003d10\"}],[\"猫咪app\",0,[512]],[\"猫咪官网\",0,[512]],[\"猫咪成人\",0,[512]],[\"猫咪app官网\",0,[512]],[\"猫咪大戰爭 角色\",0,[512]],[\"猫咪洗澡\",0,[512]],[\"猫咪踩奶\",0,[512]],[\"猫咪展\",0,[512]]],{\"ag\":{\"a\":{\"40024\":[\"\",\"\",1,20]}},\"k\":1,\"q\":\"3e-YKkbWWUV1uyIpaIe2ORxb5OE\"}]"
val
sss
=
SearchTipUtils
.
parseSearchTip
(
ss
)
}
}
\ No newline at end of file
app/src/main/java/com/base/browserwhite/ui/activity/MainActivity.kt
View file @
3aac7817
...
...
@@ -7,6 +7,7 @@ import android.os.Build
import
android.os.Environment
import
android.os.StatFs
import
android.os.storage.StorageManager
import
android.text.TextUtils.replace
import
androidx.appcompat.app.AppCompatActivity
import
androidx.core.view.updatePadding
import
androidx.fragment.app.Fragment
...
...
@@ -91,13 +92,15 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
}
addDeskShortCut
()
}
override
fun
onActivityResult
(
requestCode
:
Int
,
resultCode
:
Int
,
data
:
Intent
?)
{
super
.
onActivityResult
(
requestCode
,
resultCode
,
data
)
homeFragment
?.
onActivityResult
(
resultCode
,
resultCode
,
data
)
homeFragment
?.
onActivityResult
(
resultCode
,
resultCode
,
data
)
}
...
...
@@ -170,5 +173,4 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
}
}
\ No newline at end of file
app/src/main/java/com/base/browserwhite/ui/activity/search/SearchActivity.kt
View file @
3aac7817
package
com.base.browserwhite.ui.activity.search;
import
android.animation.Animator;
import
android.animation.ObjectAnimator;
import
android.annotation.SuppressLint;
import
android.app.Activity;
import
android.content.Intent;
import
android.graphics.Color;
import
android.os.Bundle;
import
android.os.Handler;
import
android.util.TypedValue;
import
android.view.View;
import
androidx.annotation.Nullable;
import
androidx.appcompat.app.AppCompatActivity;
import
androidx.constraintlayout.widget.ConstraintLayout;
import
androidx.coordinatorlayout.widget.CoordinatorLayout;
import
com.base.browserwhite.R;
import
com.base.browserwhite.help.SearchTipUtils;
import
com.base.browserwhite.utils.AppPreferences;
import
com.base.browserwhite.utils.BarUtils;
import
com.base.browserwhite.utils.LogEx;
import
com.base.browserwhite.utils.ToastUtils;
public
class
SearchActivity
extends
AppCompatActivity
{
@Override
protected
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
BarUtils
.
INSTANCE
.
setStatusBarLightMode
(
this
,
true
);
BarUtils
.
INSTANCE
.
setStatusBarColor
(
this
,
Color
.
TRANSPARENT
);
setContentView
(
R
.
layout
.
activity_search
);
ConstraintLayout
layout
=
findViewById
(
R
.
id
.
appbar_layout
);
CoordinatorLayout
.
LayoutParams
layoutParams
=
(
CoordinatorLayout
.
LayoutParams
)
layout
.
getLayoutParams
();
int
finalPosition
=
(
int
)
TypedValue
.
applyDimension
(
TypedValue
.
COMPLEX_UNIT_DIP
,
16
,
getResources
().
getDisplayMetrics
());
layoutParams
.
topMargin
=
BarUtils
.
INSTANCE
.
getStatusBarHeight
()
+
finalPosition
;
layout
.
setLayoutParams
(
layoutParams
);
layout
.
setVisibility
(
View
.
VISIBLE
);
new
Thread
(
new
Runnable
()
{
@Override
public
void
run
()
{
String
a
=
SearchTipUtils
.
INSTANCE
.
getSearchTip
(
"w"
);
new
Handler
(
getMainLooper
()).
post
(
new
Runnable
()
{
@Override
public
void
run
()
{
if
(
a
!=
null
)
{
ToastUtils
.
INSTANCE
.
toast
(
getApplicationContext
(),
a
);
}
else
{
ToastUtils
.
INSTANCE
.
toast
(
getApplicationContext
(),
"空的"
);
package
com.base.browserwhite.ui.activity.search
import
android.animation.Animator
import
android.animation.ObjectAnimator
import
android.annotation.SuppressLint
import
android.app.Activity
import
android.content.Intent
import
android.graphics.Color
import
android.os.Handler
import
android.util.TypedValue
import
android.view.View
import
android.widget.LinearLayout
import
androidx.core.view.isVisible
import
androidx.core.widget.addTextChangedListener
import
com.base.browserwhite.R
import
com.base.browserwhite.bean.ConstObject
import
com.base.browserwhite.bean.ConstObject.searchEngineSp
import
com.base.browserwhite.databinding.ActivitySearchBinding
import
com.base.browserwhite.help.SearchTipUtils.getSearchTip
import
com.base.browserwhite.ui.activity.BaseActivity
import
com.base.browserwhite.ui.activity.webbrowser.WebBrowserActivity
import
com.base.browserwhite.utils.BarUtils.getStatusBarHeight
import
com.base.browserwhite.utils.BarUtils.setStatusBarColor
import
com.base.browserwhite.utils.BarUtils.setStatusBarLightMode
import
com.base.browserwhite.utils.LinkSearchUtils
class
SearchActivity
:
BaseActivity
<
ActivitySearchBinding
>()
{
private
lateinit
var
searchAdapter
:
SearchAdapter
override
val
binding
:
ActivitySearchBinding
by
lazy
{
ActivitySearchBinding
.
inflate
(
layoutInflater
)
}
override
fun
initView
()
{
setStatusBarLightMode
(
this
,
true
)
setStatusBarColor
(
this
,
Color
.
TRANSPARENT
)
val
layout
=
binding
.
clTop
val
layoutParams
=
layout
.
layoutParams
as
LinearLayout
.
LayoutParams
val
finalPosition
=
TypedValue
.
applyDimension
(
TypedValue
.
COMPLEX_UNIT_DIP
,
16f
,
getResources
().
displayMetrics
).
toInt
()
layoutParams
.
topMargin
=
getStatusBarHeight
()
+
finalPosition
layout
.
setLayoutParams
(
layoutParams
)
layout
.
visibility
=
View
.
VISIBLE
switchSearch
(
searchEngineSp
)
searchAdapter
=
SearchAdapter
()
searchAdapter
.
searchAction
=
{
content
->
startActivity
(
Intent
(
this
,
WebBrowserActivity
::
class
.
java
).
apply
{
putExtra
(
"url"
,
LinkSearchUtils
.
getSpSearchAction
(
content
))
})
}
binding
.
rv
.
adapter
=
searchAdapter
binding
.
editWeb
.
addTextChangedListener
{
if
(
it
.
isNullOrEmpty
())
{
return
@addTextChangedListener
}
binding
.
flSearch
.
isVisible
=
it
.
toString
().
isNotEmpty
()
searchAdapter
.
submitList
(
listOf
())
querySearchTip
(
it
.
toString
())
}
}
});
override
fun
initListener
()
{
super
.
initListener
()
binding
.
ivClear
.
setOnClickListener
{
binding
.
editWeb
.
setText
(
""
)
}
binding
.
tvSearch
.
setOnClickListener
{
val
content
=
binding
.
editWeb
.
text
.
toString
()
startActivity
(
Intent
(
this
,
WebBrowserActivity
::
class
.
java
).
apply
{
putExtra
(
"url"
,
LinkSearchUtils
.
getSpSearchAction
(
content
))
})
}
).
start
();
String
json
=
AppPreferences
.
getInstance
().
getString
(
"SearchTipUtils"
,
""
);
LogEx
.
INSTANCE
.
logDebug
(
"SearchTipUtils"
,
"json="
+
json
,
false
);
}
private
fun
querySearchTip
(
query
:
String
)
{
Thread
{
val
list
=
getSearchTip
(
query
)
Handler
(
mainLooper
).
post
{
if
(
list
!=
null
)
{
searchAdapter
.
submitList
(
list
)
}
else
{
searchAdapter
.
submitList
(
listOf
())
}
}
}.
start
()
}
@SuppressLint
(
"MissingSuperCall"
)
@Override
public
void
onBackPressed
()
{
finish
();
setResult
(
10086
);
overridePendingTransition
(
0
,
0
);
override
fun
onBackPressed
()
{
finish
()
setResult
(
10086
)
overridePendingTransition
(
0
,
0
)
}
companion
object
{
fun
startActivityWithButtonAnimation
(
currentActivity
:
Activity
,
button
:
View
,
verticalOffset
:
Int
)
{
val
finalPosition
=
TypedValue
.
applyDimension
(
TypedValue
.
COMPLEX_UNIT_DIP
,
16f
,
currentActivity
.
resources
.
displayMetrics
).
toInt
()
val
buttonTop
=
button
.
top
-
finalPosition
val
distanceToTop
=
-
buttonTop
-
verticalOffset
val
animator
=
ObjectAnimator
.
ofFloat
(
button
,
"translationY"
,
button
.
translationY
,
distanceToTop
.
toFloat
())
animator
.
setDuration
(
500
)
animator
.
addListener
(
object
:
Animator
.
AnimatorListener
{
override
fun
onAnimationStart
(
animation
:
Animator
)
{}
override
fun
onAnimationEnd
(
animation
:
Animator
)
{
button
.
visibility
=
View
.
VISIBLE
val
intent
=
Intent
(
currentActivity
,
SearchActivity
::
class
.
java
)
currentActivity
.
startActivityForResult
(
intent
,
10086
)
currentActivity
.
overridePendingTransition
(
R
.
anim
.
fade_in
,
R
.
anim
.
fade_out
)
}
override
fun
onAnimationCancel
(
animation
:
Animator
)
{}
override
fun
onAnimationRepeat
(
animation
:
Animator
)
{}
})
animator
.
start
()
}
}
private
fun
switchSearch
(
website
:
String
)
{
searchEngineSp
=
website
when
(
website
)
{
ConstObject
.
GOOGLE
->
{
binding
.
ivSearchEngine
.
setImageResource
(
R
.
mipmap
.
h_s_google
)
}
public
static
void
startActivityWithButtonAnimation
(
Activity
currentActivity
,
View
button
,
int
verticalOffset
)
{
int
finalPosition
=
(
int
)
TypedValue
.
applyDimension
(
TypedValue
.
COMPLEX_UNIT_DIP
,
16
,
currentActivity
.
getResources
().
getDisplayMetrics
());
int
buttonTop
=
button
.
getTop
()
-
finalPosition
;
int
distanceToTop
=
-
buttonTop
-
verticalOffset
;
ObjectAnimator
animator
=
ObjectAnimator
.
ofFloat
(
button
,
"translationY"
,
button
.
getTranslationY
(),
distanceToTop
);
animator
.
setDuration
(
500
);
animator
.
addListener
(
new
Animator
.
AnimatorListener
()
{
@Override
public
void
onAnimationStart
(
Animator
animation
)
{
ConstObject
.
BING
->
{
binding
.
ivSearchEngine
.
setImageResource
(
R
.
mipmap
.
h_s_bing
)
}
ConstObject
.
YAHOO
->
{
binding
.
ivSearchEngine
.
setImageResource
(
R
.
mipmap
.
h_s_yahoo
)
}
ConstObject
.
DUCKDUCKGO
->
{
binding
.
ivSearchEngine
.
setImageResource
(
R
.
mipmap
.
h_s_xuckd
)
}
@Override
public
void
onAnimationEnd
(
Animator
animation
)
{
button
.
setVisibility
(
View
.
VISIBLE
);
Intent
intent
=
new
Intent
(
currentActivity
,
SearchActivity
.
class
);
currentActivity
.
startActivityForResult
(
intent
,
10086
);
currentActivity
.
overridePendingTransition
(
R
.
anim
.
fade_in
,
R
.
anim
.
fade_out
);
ConstObject
.
YANDEX
->
{
binding
.
ivSearchEngine
.
setImageResource
(
R
.
mipmap
.
h_s_yandex
)
}
@Override
public
void
onAnimationCancel
(
Animator
animation
)
{
ConstObject
.
BAIDU
->
{
binding
.
ivSearchEngine
.
setImageResource
(
R
.
mipmap
.
h_s_baidu
)
}
@Override
public
void
onAnimationRepeat
(
Animator
animation
)
{
}
});
animator
.
start
();
}
}
app/src/main/java/com/base/browserwhite/ui/activity/search/SearchAdapter.kt
0 → 100644
View file @
3aac7817
package
com.base.browserwhite.ui.activity.search
import
android.content.Context
import
android.view.View
import
android.view.ViewGroup
import
androidx.recyclerview.widget.RecyclerView.ViewHolder
import
com.base.browserwhite.R
import
com.base.browserwhite.databinding.ItemSearchTipBinding
import
com.base.browserwhite.utils.XmlEx.inflate
import
com.chad.library.adapter4.BaseQuickAdapter
class
SearchAdapter
:
BaseQuickAdapter
<
String
,
SearchAdapter
.
SearchViewHolder
>()
{
inner
class
SearchViewHolder
(
view
:
View
)
:
ViewHolder
(
view
)
var
searchAction
:
((
content
:
String
)
->
Unit
)?
=
null
override
fun
onBindViewHolder
(
holder
:
SearchViewHolder
,
position
:
Int
,
item
:
String
?)
{
if
(
item
==
null
)
return
val
binding
=
ItemSearchTipBinding
.
bind
(
holder
.
itemView
)
binding
.
tvTip
.
text
=
item
binding
.
root
.
setOnClickListener
{
searchAction
?.
invoke
(
item
)
}
}
override
fun
onCreateViewHolder
(
context
:
Context
,
parent
:
ViewGroup
,
viewType
:
Int
):
SearchViewHolder
{
return
SearchViewHolder
(
R
.
layout
.
item_search_tip
.
inflate
(
parent
))
}
}
\ No newline at end of file
app/src/main/java/com/base/browserwhite/ui/activity/webbrowser/WebBrowserActivity.kt
View file @
3aac7817
...
...
@@ -54,7 +54,7 @@ class WebBrowserActivity : BaseActivity<ActivityWebBrowserBinding>() {
val
url
=
intent
.
extras
?.
getString
(
"url"
)
?:
""
binding
.
editWeb
.
setText
(
url
)
val
searchEngine
=
intent
.
extras
?.
getString
(
"searchEngine"
)
?:
GOOGLE
val
searchEngine
=
intent
.
extras
?.
getString
(
"searchEngine"
)
?:
searchEngineSp
when
(
searchEngine
)
{
GOOGLE
->
{
binding
.
ivSearchEngine
.
setImageResource
(
R
.
mipmap
.
h_s_google
)
...
...
app/src/main/java/com/base/browserwhite/ui/activity/webbrowser/WebViewFragment.kt
View file @
3aac7817
...
...
@@ -18,6 +18,7 @@ import android.webkit.WebViewClient
import
androidx.lifecycle.lifecycleScope
import
com.base.browserwhite.bean.BookmarkBean
import
com.base.browserwhite.bean.DownloadBean
import
com.base.browserwhite.bean.HistoryBean
import
com.base.browserwhite.databinding.FragmentWebViewBinding
import
com.base.browserwhite.ui.activity.download.DownloadAdapter
import
com.base.browserwhite.ui.fragment.BaseFragment
...
...
@@ -26,6 +27,8 @@ import com.base.browserwhite.utils.DownloadUtils.getDownloadJson
import
com.base.browserwhite.utils.DownloadUtils.getDownloadJsonBean
import
com.base.browserwhite.utils.DownloadUtils.saveDownloadRecordFile
import
com.base.browserwhite.utils.LogEx
import
com.base.browserwhite.utils.SpBeanUtils
import
com.base.browserwhite.utils.SpBeanUtils.HISTORY_SP_KEY
import
com.google.gson.Gson
import
com.liulishuo.filedownloader.FileDownloader
import
kotlinx.coroutines.Dispatchers
...
...
@@ -197,8 +200,10 @@ class WebViewFragment : BaseFragment<FragmentWebViewBinding>() {
override
fun
onPageFinished
(
view
:
WebView
?,
url
:
String
?)
{
LogEx
.
logDebug
(
TAG
,
"onPageFinished"
)
super
.
onPageFinished
(
view
,
url
)
bookmarkBean
.
name
=
view
?.
title
.
toString
()
val
tittle
=
view
?.
title
.
toString
()
bookmarkBean
.
name
=
tittle
onPageFinished
?.
invoke
(
url
)
SpBeanUtils
.
addSpBean
(
HISTORY_SP_KEY
,
HistoryBean
(
name
=
tittle
,
url
=
url
?:
""
,
time
=
System
.
currentTimeMillis
()))
}
override
fun
onReceivedSslError
(
view
:
WebView
?,
handler
:
SslErrorHandler
?,
error
:
SslError
?)
{
...
...
app/src/main/java/com/base/browserwhite/ui/fragment/HomeFragment.kt
View file @
3aac7817
...
...
@@ -32,6 +32,7 @@ import com.base.browserwhite.fcm.NotificationUtil
import
com.base.browserwhite.help.Constants
import
com.base.browserwhite.help.NewsUtils.requestNews
import
com.base.browserwhite.help.RxBus
import
com.base.browserwhite.help.SearchTipUtils
import
com.base.browserwhite.ui.activity.search.SearchActivity
import
com.base.browserwhite.ui.activity.appprocess.AppProcessActivity
import
com.base.browserwhite.ui.activity.bookmark.BookmarkActivity
...
...
@@ -84,6 +85,9 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
@SuppressLint
(
"CheckResult"
)
override
fun
setView
()
{
switchSearch
(
searchEngineSp
)
mChangeSearchType
=
RxBus
.
get
().
register
(
Constants
.
CHANGE_SEARCH_TYPE
,
String
::
class
.
java
)
mChangeSearchType
?.
observeOn
(
AndroidSchedulers
.
mainThread
())
?.
subscribe
{
t
->
LogEx
.
logDebug
(
"glc"
,
"i:$t"
)
...
...
@@ -183,7 +187,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
}
y
=
binding
.
searchLayout
.
translationY
binding
.
editWeb
.
setOnClickListener
{
SearchActivity
.
startActivityWithButtonAnimation
(
activity
,
binding
.
searchLayout
,
verticalOffset
)
SearchActivity
.
startActivityWithButtonAnimation
(
requireActivity
()
,
binding
.
searchLayout
,
verticalOffset
)
}
requestMore
()
}
...
...
@@ -336,7 +340,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
// i++
// lastClickTime = System.currentTimeMillis()
NotificationUtil
.
sendNotification
(
requireContext
(),
ConstObject
.
ID_NEWS
)
//
NotificationUtil.sendNotification(requireContext(), ConstObject.ID_NEWS)
}
binding
.
ivUp
.
setOnClickListener
{
binding
.
rv
.
scrollToPosition
(
0
)
...
...
@@ -397,5 +401,4 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
}
}
}
\ No newline at end of file
app/src/main/java/com/base/browserwhite/utils/SpBeanUtils.kt
View file @
3aac7817
...
...
@@ -8,7 +8,7 @@ object SpBeanUtils {
const
val
BOOKMARK_SP_KEY
=
"bookmark_sp_key"
//书签
const
val
BOOKMARK_NAV_SP_KEY
=
"bookmark_nav_sp_key"
//书签导航
const
val
SEARCH_RECORD_SP_KEY
=
"search_record
_sp_key"
const
val
HISTORY_SP_KEY
=
"history
_sp_key"
fun
getSpBeanList
(
key
:
String
):
List
<
String
>
{
val
sp
=
AppPreferences
.
getInstance
().
getString
(
key
,
""
)
...
...
app/src/main/res/layout/activity_search.xml
View file @
3aac7817
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:layout_width=
"match_parent"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_height=
"match_parent"
>
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"vertical"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:id=
"@+id/
appbar_layout
"
android:id=
"@+id/
cl_top
"
android:layout_width=
"match_parent"
android:visibility=
"gone"
android:layout_height=
"50dp"
android:layout_marginHorizontal=
"15dp"
android:background=
"@drawable/bg_stroke_070709"
...
...
@@ -35,7 +35,8 @@
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
app:layout_constraintTop_toTopOf=
"parent"
tools:ignore=
"ContentDescription"
/>
<ImageView
android:layout_width=
"wrap_content"
...
...
@@ -64,30 +65,58 @@
android:singleLine=
"true"
android:textColorHint=
"#858587"
android:textSize=
"14sp"
app:layout_constraintEnd_toStartOf=
"@id/fl_s
can
"
app:layout_constraintEnd_toStartOf=
"@id/fl_s
earch
"
app:layout_constraintStart_toEndOf=
"@id/fl_search_engine"
tools:ignore=
"Autofill,HardcodedText,TextFields"
/>
<FrameLayout
android:id=
"@+id/fl_scan"
<LinearLayout
android:visibility=
"gone"
android:id=
"@+id/fl_search"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_margin=
"10dp"
android:background=
"?android:attr/selectableItemBackground"
android:orientation=
"horizontal"
android:padding=
"5dp"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
tools:ignore=
"ContentDescription"
>
<ImageView
android:id=
"@+id/iv_clear"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:src=
"@mipmap/s
aoyisao
"
/>
android:src=
"@mipmap/s
_guanbi
"
/>
</FrameLayout>
<TextView
android:id=
"@+id/tv_search"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginStart=
"8dp"
android:text=
"Search"
android:textColor=
"#0571ED"
android:textSize=
"16sp"
tools:ignore=
"HardcodedText"
/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<FrameLayout
android:layout_width=
"match_parent"
android:layout_height=
"0dp"
android:layout_weight=
"1"
>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/rv"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_marginVertical=
"10dp"
app:layoutManager=
"androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem=
"@layout/item_search_tip"
/>
</FrameLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
</LinearLayout>
\ No newline at end of file
app/src/main/res/layout/item_search_tip.xml
0 → 100644
View file @
3aac7817
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:orientation=
"horizontal"
tools:ignore=
"UseCompoundDrawables"
>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginVertical=
"10dp"
android:layout_marginStart=
"20dp"
android:src=
"@mipmap/s_wangluo"
tools:ignore=
"ContentDescription"
/>
<TextView
android:id=
"@+id/tv_tip"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginHorizontal=
"8dp"
android:textColor=
"@color/black"
android:textSize=
"16sp"
tools:text=
"https://www.wikipedia.org/"
/>
</LinearLayout>
\ No newline at end of file
app/src/main/res/mipmap-xxhdpi/s_guanbi.png
0 → 100644
View file @
3aac7817
3.62 KB
app/src/main/res/mipmap-xxhdpi/s_wangluo.png
0 → 100644
View file @
3aac7817
3.92 KB
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment