mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 06:17:57 +01:00 
			
		
		
		
	More extreme method for enforcing WebView availability
(cherry picked from commit 6cd34614f6)
# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/App.kt
			
			
This commit is contained in:
		| @@ -49,6 +49,11 @@ | ||||
|                 android:name="android.app.shortcuts" | ||||
|                 android:resource="@xml/shortcuts" /> | ||||
|         </activity> | ||||
|         <activity | ||||
|             android:name=".ui.main.ForceCloseActivity" | ||||
|             android:clearTaskOnLaunch="true" | ||||
|             android:noHistory="true" | ||||
|             android:theme="@android:style/Theme.NoDisplay" /> | ||||
|         <activity | ||||
|             android:name=".ui.main.DeepLinkActivity" | ||||
|             android:launchMode="singleTask" | ||||
|   | ||||
| @@ -6,6 +6,7 @@ import android.content.res.Configuration | ||||
| import android.graphics.Color | ||||
| import android.os.Build | ||||
| import android.os.Environment | ||||
| import android.widget.Toast | ||||
| import androidx.lifecycle.Lifecycle | ||||
| import androidx.lifecycle.LifecycleObserver | ||||
| import androidx.lifecycle.OnLifecycleEvent | ||||
| @@ -28,8 +29,11 @@ import com.ms_square.debugoverlay.DebugOverlay | ||||
| import com.ms_square.debugoverlay.modules.FpsModule | ||||
| import eu.kanade.tachiyomi.data.notification.Notifications | ||||
| import eu.kanade.tachiyomi.data.preference.PreferencesHelper | ||||
| import eu.kanade.tachiyomi.ui.main.ForceCloseActivity | ||||
| import eu.kanade.tachiyomi.ui.security.SecureActivityDelegate | ||||
| import eu.kanade.tachiyomi.util.system.LocaleHelper | ||||
| import eu.kanade.tachiyomi.util.system.WebViewUtil | ||||
| import eu.kanade.tachiyomi.util.system.toast | ||||
| import exh.debug.DebugToggles | ||||
| import exh.log.CrashlyticsPrinter | ||||
| import exh.log.EHDebugModeOverlay | ||||
| @@ -57,6 +61,12 @@ open class App : Application(), LifecycleObserver { | ||||
|  | ||||
|         workaroundAndroid7BrokenSSL() | ||||
|  | ||||
|         // Enforce WebView availability | ||||
|         if (!WebViewUtil.supportsWebView(this)) { | ||||
|             toast(R.string.information_webview_required, Toast.LENGTH_LONG) | ||||
|             ForceCloseActivity.closeApp(this) | ||||
|         } | ||||
|  | ||||
|         Injekt = InjektScope(DefaultRegistrar()) | ||||
|         Injekt.importModule(AppModule(this)) | ||||
|  | ||||
|   | ||||
| @@ -0,0 +1,28 @@ | ||||
| package eu.kanade.tachiyomi.ui.main | ||||
|  | ||||
| import android.content.Context | ||||
| import android.content.Intent | ||||
| import android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK | ||||
| import android.os.Bundle | ||||
| import androidx.appcompat.app.AppCompatActivity | ||||
|  | ||||
| /** | ||||
|  * Activity that in conjunction with its configuration in the manifest allows for a way to | ||||
|  * "force close" the application from the main [App] class. | ||||
|  */ | ||||
| class ForceCloseActivity : AppCompatActivity() { | ||||
|     override fun onCreate(savedInstanceState: Bundle?) { | ||||
|         super.onCreate(savedInstanceState) | ||||
|         finish() | ||||
|     } | ||||
|  | ||||
|     companion object { | ||||
|         fun closeApp(context: Context) { | ||||
|             val intent = Intent(context, ForceCloseActivity::class.java).apply { | ||||
|                 addCategory(Intent.CATEGORY_HOME) | ||||
|                 addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) | ||||
|             } | ||||
|             context.startActivity(intent) | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -37,7 +37,6 @@ import eu.kanade.tachiyomi.ui.more.MoreController | ||||
| import eu.kanade.tachiyomi.ui.recent.history.HistoryController | ||||
| import eu.kanade.tachiyomi.ui.recent.updates.UpdatesController | ||||
| import eu.kanade.tachiyomi.util.lang.launchUI | ||||
| import eu.kanade.tachiyomi.util.system.WebViewUtil | ||||
| import eu.kanade.tachiyomi.util.system.toast | ||||
| import exh.EXHMigrations | ||||
| import exh.eh.EHentaiUpdateWorker | ||||
| @@ -93,12 +92,6 @@ class MainActivity : BaseActivity<MainActivityBinding>() { | ||||
|  | ||||
|         binding = MainActivityBinding.inflate(layoutInflater) | ||||
|  | ||||
|         // Enforce WebView availability | ||||
|         if (!WebViewUtil.supportsWebView(this)) { | ||||
|             toast(R.string.information_webview_required, Toast.LENGTH_LONG) | ||||
|             finishAndRemoveTask() | ||||
|         } | ||||
|  | ||||
|         // Do not let the launcher create a new activity http://stackoverflow.com/questions/16283079 | ||||
|         if (!isTaskRoot) { | ||||
|             finish() | ||||
|   | ||||
| @@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.util.system | ||||
|  | ||||
| import android.content.Context | ||||
| import android.content.pm.PackageManager | ||||
| import android.webkit.CookieManager | ||||
| import android.webkit.WebView | ||||
|  | ||||
| object WebViewUtil { | ||||
| @@ -9,9 +10,17 @@ object WebViewUtil { | ||||
|         Regex(""".*Chrome/(\d+)\..*""") | ||||
|     } | ||||
|  | ||||
|     const val MINIMUM_WEBVIEW_VERSION = 79 | ||||
|     const val MINIMUM_WEBVIEW_VERSION = 80 | ||||
|  | ||||
|     fun supportsWebView(context: Context): Boolean { | ||||
|         try { | ||||
|             // May throw android.webkit.WebViewFactory$MissingWebViewPackageException if WebView | ||||
|             // is not installed | ||||
|             CookieManager.getInstance() | ||||
|         } catch (e: Exception) { | ||||
|             return false | ||||
|         } | ||||
|  | ||||
|         return context.packageManager.hasSystemFeature(PackageManager.FEATURE_WEBVIEW) | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user