From 31ea334898aff04b0b2b451cadc4aedb913ba01b Mon Sep 17 00:00:00 2001 From: Alex Abudaev Date: Fri, 3 Apr 2026 22:54:06 +0800 Subject: [PATCH] Initial commit --- .../java/com/duckai/app/web/MainActivity.kt | 73 +++++++++++++------ app/src/main/res/layout/activity_main.xml | 9 ++- app/src/main/res/layout/widget_search.xml | 5 +- app/src/main/res/values/colors.xml | 2 +- app/src/main/res/values/strings.xml | 5 ++ app/src/main/res/values/themes.xml | 19 ++++- 6 files changed, 82 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/com/duckai/app/web/MainActivity.kt b/app/src/main/java/com/duckai/app/web/MainActivity.kt index bf3c7cf..c7cd84f 100644 --- a/app/src/main/java/com/duckai/app/web/MainActivity.kt +++ b/app/src/main/java/com/duckai/app/web/MainActivity.kt @@ -4,7 +4,6 @@ import android.content.Context import android.content.Intent import android.net.Uri import android.os.Bundle -import android.view.View import android.view.inputmethod.InputMethodManager import android.webkit.CookieManager import android.webkit.WebView @@ -15,6 +14,10 @@ import com.duckai.app.R class MainActivity : AppCompatActivity() { private lateinit var webView: WebView + + companion object { + private const val BASE_URL = "https://duck.ai" + } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -22,12 +25,19 @@ class MainActivity : AppCompatActivity() { webView = findViewById(R.id.webView) - webView.settings.javaScriptEnabled = true - webView.settings.domStorageEnabled = true - webView.settings.databaseEnabled = true - webView.settings.setSupportZoom(false) - webView.settings.loadWithOverviewMode = true - webView.settings.useWideViewPort = true + setupWebView() + loadUrlFromIntent() + } + + private fun setupWebView() { + webView.settings.apply { + javaScriptEnabled = true + domStorageEnabled = true + databaseEnabled = true + setSupportZoom(false) + loadWithOverviewMode = true + useWideViewPort = true + } webView.isFocusable = true webView.isFocusableInTouchMode = true @@ -35,13 +45,26 @@ class MainActivity : AppCompatActivity() { CookieManager.getInstance().setAcceptCookie(true) CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true) - webView.webViewClient = WebViewClientOverride() + webView.webViewClient = object : WebViewClient() { + override fun onPageFinished(view: WebView?, url: String?) { + view?.postDelayed({ + view.evaluateJavascript( + "setTimeout(() => {" + + " const input = document.querySelector('input[type=\"text\"], textarea[id*=\"message\"], [role=\"combobox\"]');" + + " if(input) { input.focus(); input.click(); }" + + "}, 100);" + ) { _ -> } + }, 800) + } + } + } + private fun loadUrlFromIntent() { val query = intent?.data?.getQueryParameter("q") val url = if (query != null) { - "https://duck.ai/?q=${Uri.encode(query)}" + "$BASE_URL/?q=${Uri.encode(query)}" } else { - "https://duck.ai/" + BASE_URL } webView.loadUrl(url) @@ -52,32 +75,29 @@ class MainActivity : AppCompatActivity() { }, 800) } - private inner class WebViewClientOverride : WebViewClient() { - override fun onPageFinished(view: WebView?, url: String?) { - view?.postDelayed({ - view.evaluateJavascript( - "setTimeout(() => {" + - " const input = document.querySelector('input[type=\"text\"], textarea[id*=\"message\"], [role=\"combobox\"]');" + - " if(input) { input.focus(); input.click(); }" + - "}, 100);" - ) { _ -> } - }, 800) - } - } - private fun showKeyboard() { val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager webView.requestFocus() imm.showSoftInput(webView, InputMethodManager.SHOW_IMPLICIT) } + override fun onPause() { + webView.onPause() + super.onPause() + } + + override fun onResume() { + webView.onResume() + super.onResume() + } + override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) this.intent = intent val query = intent?.data?.getQueryParameter("q") if (query != null) { - val url = "https://duck.ai/?q=${Uri.encode(query)}" + val url = "$BASE_URL/?q=${Uri.encode(query)}" webView.loadUrl(url) webView.postDelayed({ webView.requestFocus() @@ -85,4 +105,9 @@ class MainActivity : AppCompatActivity() { }, 1000) } } + + override fun onDestroy() { + webView.destroy() + super.onDestroy() + } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 2b7402b..22c3a4e 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,12 +1,15 @@ - + android:layout_height="match_parent" + android:background="?attr/colorSurface"> - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/widget_search.xml b/app/src/main/res/layout/widget_search.xml index 7d7e9c5..b48fc5b 100644 --- a/app/src/main/res/layout/widget_search.xml +++ b/app/src/main/res/layout/widget_search.xml @@ -3,7 +3,7 @@ android:id="@+id/widget_container" android:layout_width="match_parent" android:layout_height="48dp" - android:background="@drawable/widget_background" + android:background="?attr/colorPrimaryContainer" android:gravity="center" android:orientation="horizontal" android:paddingHorizontal="16dp"> @@ -12,6 +12,7 @@ android:layout_width="24dp" android:layout_height="24dp" android:src="@drawable/ic_search" + android:tint="?attr/colorOnPrimaryContainer" android:contentDescription="@string/search" /> diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 700a8c7..9b5e432 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,4 +1,4 @@ - #FF5722 + #6750A4 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 631c40a..aba6527 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -4,4 +4,9 @@ Search Search DuckAI Ask AI + Clear Chat History + Clear all chat history? + Yes + No + Chat history cleared \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 640ca07..87f6316 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -1,4 +1,21 @@ - \ No newline at end of file