diff --git a/app/src/main/java/jp/juggler/subwaytooter/App1.kt b/app/src/main/java/jp/juggler/subwaytooter/App1.kt index 9171f137..5bf5a9ec 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/App1.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/App1.kt @@ -5,6 +5,7 @@ import android.app.Activity import android.app.Application import android.content.ComponentName import android.content.Context +import android.content.Intent import android.content.SharedPreferences import android.database.sqlite.SQLiteDatabase import android.database.sqlite.SQLiteOpenHelper @@ -213,8 +214,8 @@ class App1 : Application() { } private fun prepareOkHttp( - timeoutSecondsConnect:Int, - timeoutSecondsRead:Int + timeoutSecondsConnect : Int, + timeoutSecondsRead : Int ) : OkHttpClient.Builder { val spec = ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS) .cipherSuites(*APPROVED_CIPHER_SUITES) @@ -313,7 +314,6 @@ class App1 : Application() { MediaShown.deleteOld(now) MediaShownMisskey.deleteOld(now) - // if( USE_OLD_EMOJIONE ){ // if( typeface_emoji == null ){ // typeface_emoji = TypefaceUtils.load( app_context.getAssets(), "emojione_android.ttf" ); @@ -329,25 +329,24 @@ class App1 : Application() { run { // API用のHTTP設定はキャッシュを使わない - var builder = prepareOkHttp(30,60) + var builder = prepareOkHttp(30, 60) ok_http_client = builder.build() - - + // ディスクキャッシュ val cacheDir = File(app_context.cacheDir, "http2") val cache = Cache(cacheDir, 30000000L) // カスタム絵文字用のHTTP設定はキャッシュを使う - builder = prepareOkHttp(30,60) + builder = prepareOkHttp(30, 60) builder.cache(cache) ok_http_client2 = builder.build() // 内蔵メディアビューア用のHTTP設定は同じキャッシュを使うが、タイムアウトは別の値を指定する var mediaReadTimeout = Pref.spMediaReadTimeout.toInt(pref) - if( mediaReadTimeout < 3 ) mediaReadTimeout = 3 - - builder = prepareOkHttp(mediaReadTimeout,mediaReadTimeout) + if(mediaReadTimeout < 3) mediaReadTimeout = 3 + + builder = prepareOkHttp(mediaReadTimeout, mediaReadTimeout) builder.cache(cache) ok_http_client_media_viewer = builder.build() } @@ -538,57 +537,59 @@ class App1 : Application() { // Chrome Custom Tab を開く fun openCustomTab(activity : Activity, url : String) { try { - if(url.startsWith("http") && Pref.bpPriorChrome(pref)) { - try { - // 初回はChrome指定で試す - val builder = CustomTabsIntent.Builder() - builder.setToolbarColor( - Styler.getAttributeColor( - activity, - R.attr.colorPrimary + if( Pref.bpDontUseCustomTabs(pref)){ + val intent = Intent(Intent.ACTION_VIEW,Uri.parse(url)) + activity.startActivity(intent) + + }else{ + + if(url.startsWith("http") && Pref.bpPriorChrome(pref)) { + try { + // 初回はChrome指定で試す + val customTabsIntent = CustomTabsIntent.Builder() + .setToolbarColor( + Styler.getAttributeColor( + activity, + R.attr.colorPrimary + ) + ) + .setShowTitle(true) + .build() + customTabsIntent.intent.component = ComponentName( + "com.android.chrome", + "com.google.android.apps.chrome.Main" ) - ).setShowTitle(true) - val customTabsIntent = builder.build() - customTabsIntent.intent.component = ComponentName( - "com.android.chrome", - "com.google.android.apps.chrome.Main" - ) - customTabsIntent.launchUrl(activity, Uri.parse(url)) - return - } catch(ex2 : Throwable) { - log.e(ex2, "openChromeTab: missing chrome. retry to other application.") + customTabsIntent.launchUrl(activity, Uri.parse(url)) + return + } catch(ex2 : Throwable) { + log.e(ex2, "openChromeTab: missing chrome. retry to other application.") + } + } + + // Chromeがないようなのでcomponent指定なしでリトライ + CustomTabsIntent.Builder() + .setToolbarColor(Styler.getAttributeColor(activity, R.attr.colorPrimary)) + .setShowTitle(true) + .build() + .launchUrl(activity, Uri.parse(url)) } - - // chromeがないなら ResolverActivity でアプリを選択させる - val builder = CustomTabsIntent.Builder() - builder.setToolbarColor(Styler.getAttributeColor(activity, R.attr.colorPrimary)) - .setShowTitle(true) - val customTabsIntent = builder.build() - customTabsIntent.launchUrl(activity, Uri.parse(url)) } catch(ex : Throwable) { log.trace(ex) - val scheme = try{ + val scheme = try { Uri.parse(url).scheme - }catch(_:Throwable){ + } catch(_ : Throwable) { url } - showToast( - activity, - true, - "can't open browser app for %s",scheme - - ) + showToast(activity,true,"can't open browser app for %s", scheme) } } fun openCustomTab(activity : Activity, ta : TootAttachment) { - val url = ta.getLargeUrl(pref) - if(url != null) { - openCustomTab(activity, url) - } + val url = ta.getLargeUrl(pref) ?: return + openCustomTab(activity, url) } } diff --git a/app/src/main/java/jp/juggler/subwaytooter/Pref.kt b/app/src/main/java/jp/juggler/subwaytooter/Pref.kt index e9e9e02c..37e3c3d0 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/Pref.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/Pref.kt @@ -245,7 +245,11 @@ object Pref { true, R.id.swPriorChrome ) - + val bpDontUseCustomTabs = BooleanPref( + "DontUseCustomTabs", + false, + R.id.swDontUseCustomTabs + ) val bpPriorLocalURL = BooleanPref( "prior_local_url", false, diff --git a/app/src/main/res/layout/act_app_setting.xml b/app/src/main/res/layout/act_app_setting.xml index 16cf185a..86c364fb 100644 --- a/app/src/main/res/layout/act_app_setting.xml +++ b/app/src/main/res/layout/act_app_setting.xml @@ -266,6 +266,22 @@ + + + + + + + + + + ×%3$.1f\n%1$d×%2$d リンクの色 (アプリ再起動が必要) 閉じれるカラムが表示範囲内にありません + リンクを開く際に (ChromeやFirefoxの) Custom Tabsを使わない diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a1a571a2..62632e12 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -777,5 +777,6 @@ Timeout for embed media viewer (unit:seconds, app restart(delete from app history) required) Link color (app restart required) missing closeable column in visible range. + Don\'t use (Chrome/Firefox) Custom Tabs when open links