aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/kotlin
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/kotlin')
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/FrostWebActivity.kt4
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/MainActivity.kt2
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/WebOverlayActivity.kt6
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/fragments/WebFragment.kt2
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/injectors/JsAssets.kt7
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/web/FrostJSI.kt12
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebContextMenu.kt100
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebView.kt25
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewClient.kt1
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewCore.kt18
10 files changed, 138 insertions, 39 deletions
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/FrostWebActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/FrostWebActivity.kt
index c853e8f0..98b5897f 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/FrostWebActivity.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/FrostWebActivity.kt
@@ -13,10 +13,6 @@ import com.pitchedapps.frost.utils.formattedFbUrl
*/
class FrostWebActivity : WebOverlayActivity() {
- override val url: String
- get() = intent.dataString!!.formattedFbUrl
-
-
override fun onCreate(savedInstanceState: Bundle?) {
Prefs.prevId = Prefs.userId
super.onCreate(savedInstanceState)
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/MainActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/MainActivity.kt
index b2dc676c..592c3b5b 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/MainActivity.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/MainActivity.kt
@@ -106,7 +106,7 @@ class MainActivity : BaseActivity(), FrostWebViewSearch.SearchContract,
super.onCreate(savedInstanceState)
if (BuildConfig.VERSION_CODE > Prefs.versionCode) {
Prefs.versionCode = BuildConfig.VERSION_CODE
- showChangelog(R.xml.changelog, Prefs.textColor) { theme() }
+ if (!BuildConfig.DEBUG) showChangelog(R.xml.changelog, Prefs.textColor) { theme() }
}
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/WebOverlayActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/WebOverlayActivity.kt
index 9f203970..c256b674 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/WebOverlayActivity.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/WebOverlayActivity.kt
@@ -41,7 +41,7 @@ open class WebOverlayActivity : AppCompatActivity(),
}
open val url: String
- get() = intent.extras!!.getString(ARG_URL).formattedFbUrl
+ get() = (intent.extras?.getString(ARG_URL) ?: intent.dataString).formattedFbUrl
val userId: Long
get() = intent.extras?.getLong(ARG_USER_ID, Prefs.userId) ?: Prefs.userId
@@ -61,7 +61,7 @@ open class WebOverlayActivity : AppCompatActivity(),
setFrostColors(toolbar, themeWindow = false)
coordinator.setBackgroundColor(Prefs.bgColor.withAlpha(255))
- frostWeb.web.setupWebview(url)
+ frostWeb.setupWebview(url)
frostWeb.web.addTitleListener({ toolbar.title = it })
if (userId != Prefs.userId) FbCookie.switchUser(userId) { frostWeb.web.loadBaseUrl() }
else frostWeb.web.loadBaseUrl()
@@ -80,7 +80,7 @@ open class WebOverlayActivity : AppCompatActivity(),
*/
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
- val newUrl = intent.extras!!.getString(ARG_URL).formattedFbUrl
+ val newUrl = (intent.extras?.getString(ARG_URL) ?: intent.dataString).formattedFbUrl
L.d("New intent")
if (url != newUrl) {
this.intent = intent
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/fragments/WebFragment.kt b/app/src/main/kotlin/com/pitchedapps/frost/fragments/WebFragment.kt
index b76925f5..764c0bc9 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/fragments/WebFragment.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/fragments/WebFragment.kt
@@ -63,7 +63,7 @@ class WebFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
super.onCreateView(inflater, container, savedInstanceState)
frostWebView = FrostWebView(context)
- frostWebView.web.setupWebview(url, urlEnum)
+ frostWebView.setupWebview(url, urlEnum)
return frostWebView
}
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsAssets.kt b/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsAssets.kt
index 132d1968..278f2adf 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsAssets.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsAssets.kt
@@ -9,7 +9,7 @@ import com.pitchedapps.frost.utils.L
* The enum name must match the css file name
*/
enum class JsAssets : InjectorContract {
- MENU, CLICK_A, CLICK_INTERCEPTOR, HEADER_BADGES, SEARCH
+ MENU, CLICK_A, CONTEXT_A, HEADER_BADGES, SEARCH
;
var file = "${name.toLowerCase()}.min.js"
@@ -22,9 +22,4 @@ enum class JsAssets : InjectorContract {
}
injector!!.inject(webView, callback)
}
-
- fun reset() {
- injector = null
- }
-
}
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostJSI.kt b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostJSI.kt
index 89f7d20b..68163333 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostJSI.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostJSI.kt
@@ -4,17 +4,14 @@ import android.content.Context
import android.webkit.JavascriptInterface
import com.pitchedapps.frost.MainActivity
import com.pitchedapps.frost.dbflow.CookieModel
-import com.pitchedapps.frost.utils.L
-import com.pitchedapps.frost.utils.cookies
-import com.pitchedapps.frost.utils.launchLogin
-import com.pitchedapps.frost.utils.launchWebOverlay
+import com.pitchedapps.frost.utils.*
import io.reactivex.subjects.Subject
/**
* Created by Allan Wang on 2017-06-01.
*/
-class FrostJSI(val context: Context, val webView: FrostWebViewCore) {
+class FrostJSI(val context: Context, val webView: FrostWebViewCore, val contextMenu: FrostWebContextMenu) {
val headerObservable: Subject<String>? = (context as? MainActivity)?.headerBadgeObservable
@@ -36,6 +33,11 @@ class FrostJSI(val context: Context, val webView: FrostWebViewCore) {
}
@JavascriptInterface
+ fun contextMenu(url: String) {
+ contextMenu.post { contextMenu.show(url) }
+ }
+
+ @JavascriptInterface
fun loadLogin() {
context.launchLogin(cookies, true)
}
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebContextMenu.kt b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebContextMenu.kt
new file mode 100644
index 00000000..e0aa5ebd
--- /dev/null
+++ b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebContextMenu.kt
@@ -0,0 +1,100 @@
+package com.pitchedapps.frost.web
+
+import android.content.Context
+import android.support.constraint.ConstraintLayout
+import android.support.constraint.ConstraintSet
+import android.text.method.ScrollingMovementMethod
+import android.util.AttributeSet
+import android.widget.TextView
+import ca.allanwang.kau.logging.KL
+import ca.allanwang.kau.utils.*
+import com.pitchedapps.frost.R
+import com.pitchedapps.frost.utils.Prefs
+
+/**
+ * Created by Allan Wang on 2017-07-06.
+ */
+class FrostWebContextMenu @JvmOverloads constructor(
+ context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
+) : ConstraintLayout(context, attrs, defStyleAttr) {
+
+ var url = ""
+
+ val urlHolder = TextView(context, attrs, defStyleAttr)
+
+ init {
+ layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)
+ elevation = 20f
+ setBackgroundColor(0x80000000.toInt())
+ gone()
+
+ val tc = Prefs.textColor
+ val bg = Prefs.bgColor.colorToForeground(0.1f).withAlpha(255)
+
+ urlHolder.apply {
+ isVerticalScrollBarEnabled = true
+ movementMethod = ScrollingMovementMethod()
+ maxHeight = 60.dpToPx
+ }
+ addView(urlHolder)
+
+ //collection of items in our menu and their click event
+ val data = arrayOf(
+ R.string.copy_link to { context.copyToClipboard(url) }
+ )
+
+ //add views and extract ids
+ val views = data.map {
+ (textId, onClick) ->
+ val tv = TextView(context).apply {
+ text = context.string(textId)
+ setOnClickListener({ onClick(); close() })
+ }
+ addView(tv)
+ tv
+ }.toMutableList()
+
+ views.add(0, urlHolder)
+
+ val ids = views.mapIndexed { index, textView ->
+ textView.apply {
+ id = 74329 + index //totally arbitrary
+ setTextColor(tc)
+ setBackgroundColor(bg)
+ }
+ KL.d("ID ${textView.text}")
+ textView.id
+ }
+
+ //clone to set only after ids are set
+ val set = ConstraintSet()
+ set.clone(this)
+
+ ids.forEach {
+ set.connect(it, ConstraintSet.START, ConstraintSet.PARENT_ID, ConstraintSet.START, 16)
+ set.connect(it, ConstraintSet.END, ConstraintSet.PARENT_ID, ConstraintSet.END, 16)
+ }
+
+
+ set.createVerticalChain(ConstraintSet.PARENT_ID, ConstraintSet.TOP, ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM,
+ ids.toIntArray(), null, ConstraintSet.CHAIN_PACKED)
+
+ set.applyTo(this)
+ setOnClickListener {
+ close()
+ }
+ }
+
+ fun close() {
+ transitionAuto()
+ gone()
+ }
+
+ fun show(url: String) {
+ this.url = url
+ urlHolder.text = this.url
+ transitionAuto()
+ visible()
+ }
+
+} \ No newline at end of file
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebView.kt b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebView.kt
index 7f74990e..64bdf888 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebView.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebView.kt
@@ -1,6 +1,8 @@
package com.pitchedapps.frost.web
+import android.annotation.SuppressLint
import android.content.Context
+import android.graphics.Color
import android.os.Build
import android.support.v4.widget.SwipeRefreshLayout
import android.util.AttributeSet
@@ -25,7 +27,8 @@ class FrostWebView @JvmOverloads constructor(
val refresh: SwipeRefreshLayout by bindView(R.id.swipe_refresh)
val web: FrostWebViewCore by bindView(R.id.frost_webview_core)
- val progress: ProgressBar by bindView(R.id.progressBar)
+ val progress: ProgressBar by bindView(R.id.progress_bar)
+ val contextMenu: FrostWebContextMenu by bindView(R.id.context_menu)
init {
inflate(getContext(), R.layout.swipe_webview, this)
@@ -50,6 +53,26 @@ class FrostWebView @JvmOverloads constructor(
})
}
+ @SuppressLint("SetJavaScriptEnabled")
+ fun setupWebview(url: String, enum: FbTab? = null) {
+ with (web) {
+ baseUrl = url
+ baseEnum = enum
+ with(settings) {
+ javaScriptEnabled = true
+ userAgentString = com.pitchedapps.frost.facebook.USER_AGENT_BASIC
+ allowFileAccess = true
+ defaultFontSize
+ }
+ setLayerType(View.LAYER_TYPE_HARDWARE, null)
+ frostWebClient = baseEnum?.webClient?.invoke(this) ?: FrostWebViewClient(this)
+ webViewClient = frostWebClient
+ webChromeClient = FrostChromeClient(this)
+ addJavascriptInterface(FrostJSI(context, this, contextMenu), "Frost")
+ setBackgroundColor(Color.TRANSPARENT)
+ }
+ }
+
//Some urls have postJavascript injections so make sure we load the base url
override fun onRefresh() {
when (web.baseUrl) {
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewClient.kt b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewClient.kt
index 62c28527..4484dcdb 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewClient.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewClient.kt
@@ -62,6 +62,7 @@ open class FrostWebViewClient(val webCore: FrostWebViewCore) : WebViewClient() {
webCore.jsInject(CssHider.HEADER,
Prefs.themeInjector,
JsAssets.CLICK_A.maybe(webCore.baseEnum != null),
+// JsAssets.CONTEXT_A,
callback = { refreshObservable.onNext(false) })
}
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewCore.kt b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewCore.kt
index c2c89b8a..76b04f23 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewCore.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewCore.kt
@@ -54,24 +54,6 @@ class FrostWebViewCore @JvmOverloads constructor(
titleObservable = BehaviorSubject.create<String>()
}
- @SuppressLint("SetJavaScriptEnabled")
- fun setupWebview(url: String, enum: FbTab? = null) {
- baseUrl = url
- baseEnum = enum
- with (settings) {
- javaScriptEnabled = true
- userAgentString = USER_AGENT_BASIC
- allowFileAccess = true
- defaultFontSize
- }
- setLayerType(View.LAYER_TYPE_HARDWARE, null)
- frostWebClient = baseEnum?.webClient?.invoke(this) ?: FrostWebViewClient(this)
- webViewClient = frostWebClient
- webChromeClient = FrostChromeClient(this)
- addJavascriptInterface(FrostJSI(context, this), "Frost")
- setBackgroundColor(Color.TRANSPARENT)
- }
-
fun loadUrl(url: String?, animate: Boolean) {
if (url == null) return
registerTransition(animate)