もくもくログ
主にIT 関連のメモをもくもくと綴っていきます
2020/04/04 ~ 04/10 のもくもく日記 を見てねw
Android 開発で、権限許可周りの実装でお世話になっているPermissionsDispathcer はktx 版があるようだ。
で試してみたんだけど、簡潔に書けてとても良かった。
今まではアノテーションをつけたメソッドをいくつか定義する必要があって煩雑になりがちだったけど、そこを改善できるのがすごく嬉しいw
ちょこっと個人的に気になる挙動があったので、Issue も立ててみた。
package work.shion.androidpreparation.webviewbuilder
import android.Manifest
import android.os.Bundle
import android.webkit.GeolocationPermissions
import android.webkit.WebView
import androidx.appcompat.app.AppCompatActivity
import permissions.dispatcher.NeedsPermission
import permissions.dispatcher.RuntimePermissions
@RuntimePermissions
class GeoActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.geo)
WebViewBuilder()
.geolocationEnabled(true)
.javaScriptEnabled(true)
.onGeolocationPermissionsShowPrompt { origin, callback ->
invokeGeoWithPermissionCheck(origin, callback)
}
.into(findViewById<WebView>(R.id.webview_target))
.loadUrl("https://www.google.co.jp/maps")
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
onRequestPermissionsResult(requestCode, grantResults)
}
@NeedsPermission(Manifest.permission.ACCESS_FINE_LOCATION)
fun invokeGeo(origin: String?, callback: GeolocationPermissions.Callback?) {
callback?.invoke(origin, true, false)
}
}
package work.shion.androidpreparation.webviewbuilder
import android.Manifest
import android.os.Bundle
import android.webkit.WebView
import androidx.appcompat.app.AppCompatActivity
import permissions.dispatcher.ktx.withPermissionsCheck
class GeoActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.geo)
WebViewBuilder()
.geolocationEnabled(true)
.javaScriptEnabled(true)
.onGeolocationPermissionsShowPrompt { origin, callback ->
withPermissionsCheck(
Manifest.permission.ACCESS_FINE_LOCATION,
onNeverAskAgain = { callback?.invoke(origin, false, false) },
onPermissionDenied = { callback?.invoke(origin, false, false) },
onShowRationale = { it.proceed() }
) {
callback?.invoke(origin, true, false)
}
}
.into(findViewById<WebView>(R.id.webview_target))
.loadUrl("https://www.google.co.jp/maps")
}
}
C# でエクセルの入力規則を設定したんだけど、引数省略可能なのに、標準の検証を使うとフル指定しないといけなくてハマったw
ちなみにエクセル上で同じ操作をしてみると、確かにエラーになったので、一度動作確認してからC# コードにした方がいいかもしれん
マテリアルデザインのUI コンポーネント、色々なプラットフォームに対応しているんだね
好みはあるかもだけど、OS を超えて似たようなUI に出来るのは、とても楽できるので、こういう系の採用と発掘していくのも良いなと個人的に思ったw