Commit 3aac7817 authored by wanglei's avatar wanglei

...

parent d3f86eaf
package com.base.browserwhite.bean
data class HistoryBean(
val name: String = "",
val url: String = "",
val time: Long = 0,
val color: Int = 0,
) : SpBean()
package com.base.browserwhite.bean
class SearchTipBean {
}
\ No newline at end of file
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" +
"[[[\"&#29483;&#21674;&#22823;&#25136;abc&#29229;\",46,[512],{\"lm\":[],\"zh\":\"a&#29483;b&#21674;c&#22823;&#25136;&#29229;\",\"zi\":\"&#35987;&#21674;&#22823;&#25136;&#29229; \\u2014 &#38651;&#29609;&#36938;&#25138;\",\"zp\":{\"gs_ssp\":\"eJzj4tVP1zc0TDczTTfLMKg0YPTif96z-umkVU-XLH_WseF5x1oAwEEO8g\"},\"zs\":\"https://encrypted-tbn0.gstatic.com/images?q\\u003dtbn:ANd9GcRGG_A_I5lQPkkqg2lMDbGh7oAoia7By2jhoHgJGox0\\u0026s\\u003d10\"}],[\"&#29483;&#21674;\",46,[512],{\"lm\":[],\"zh\":\"&#29483;&#21674;\",\"zi\":\"&#35987; \\u2014 &#21205;&#29289;\",\"zp\":{\"gs_ssp\":\"eJzj4tDP1TcwrCyqMGD0Ynves_rppFUAOMQHYg\"},\"zs\":\"https://encrypted-tbn0.gstatic.com/images?q\\u003dtbn:ANd9GcSQAMEz7n5AwO0o3jxemIZ42sRhDthz6T3rWt_HeYDP\\u0026s\\u003d10\"}],[\"&#29483;&#21674;app\",0,[512]],[\"&#29483;&#21674;&#23448;&#32593;\",0,[512]],[\"&#29483;&#21674;&#25104;&#20154;\",0,[512]],[\"&#29483;&#21674;app&#23448;&#32593;\",0,[512]],[\"&#29483;&#21674;&#22823;&#25136;&#29229; &#35282;&#33394;\",0,[512]],[\"&#29483;&#21674;&#27927;&#28577;\",0,[512]],[\"&#29483;&#21674;&#36393;&#22902;\",0,[512]],[\"&#29483;&#21674;&#23637;\",0,[512]]],{\"ag\":{\"a\":{\"40024\":[\"\",\"\",1,20]}},\"k\":1,\"q\":\"3e-YKkbWWUV1uyIpaIe2ORxb5OE\"}]"
val sss = SearchTipUtils.parseSearchTip(ss)
}
}
\ No newline at end of file
......@@ -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
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();
}
}
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
......@@ -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)
......
......@@ -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?) {
......
......@@ -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
......@@ -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, "")
......
<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_scan"
app:layout_constraintEnd_toStartOf="@id/fl_search"
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/saoyisao" />
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
<?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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment