mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 14:27:57 +01:00 
			
		
		
		
	Tablet UI override (#5830)
* Tablet UI override * Tablet UI advanced pref
This commit is contained in:
		| @@ -223,6 +223,8 @@ object PreferenceKeys { | ||||
|  | ||||
|     const val incognitoMode = "incognito_mode" | ||||
|  | ||||
|     const val tabletUiMode = "tablet_ui_mode" | ||||
|  | ||||
|     fun trackUsername(syncId: Int) = "pref_mangasync_username_$syncId" | ||||
|  | ||||
|     fun trackPassword(syncId: Int) = "pref_mangasync_password_$syncId" | ||||
|   | ||||
| @@ -51,4 +51,10 @@ object PreferenceValues { | ||||
|         LOW(31), | ||||
|         LOWEST(47) | ||||
|     } | ||||
|  | ||||
|     enum class TabletUiMode { | ||||
|         ALWAYS, | ||||
|         LANDSCAPE, | ||||
|         NEVER | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -17,6 +17,7 @@ import eu.kanade.tachiyomi.ui.library.setting.SortDirectionSetting | ||||
| import eu.kanade.tachiyomi.ui.library.setting.SortModeSetting | ||||
| import eu.kanade.tachiyomi.ui.reader.setting.OrientationType | ||||
| import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType | ||||
| import eu.kanade.tachiyomi.util.system.isTablet | ||||
| import eu.kanade.tachiyomi.widget.ExtendedNavigationView | ||||
| import kotlinx.coroutines.flow.Flow | ||||
| import kotlinx.coroutines.flow.onEach | ||||
| @@ -317,6 +318,11 @@ class PreferencesHelper(val context: Context) { | ||||
|  | ||||
|     fun incognitoMode() = flowPrefs.getBoolean(Keys.incognitoMode, false) | ||||
|  | ||||
|     fun tabletUiMode() = flowPrefs.getEnum( | ||||
|         Keys.tabletUiMode, | ||||
|         if (context.applicationContext.isTablet()) Values.TabletUiMode.ALWAYS else Values.TabletUiMode.NEVER | ||||
|     ) | ||||
|  | ||||
|     fun setChapterSettingsDefault(manga: Manga) { | ||||
|         prefs.edit { | ||||
|             putInt(Keys.defaultChapterFilterByRead, manga.readFilter) | ||||
|   | ||||
| @@ -1,9 +1,11 @@ | ||||
| package eu.kanade.tachiyomi.ui.base.activity | ||||
|  | ||||
| import android.content.Context | ||||
| import android.os.Bundle | ||||
| import androidx.viewbinding.ViewBinding | ||||
| import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter | ||||
| import eu.kanade.tachiyomi.ui.security.SecureActivityDelegate | ||||
| import eu.kanade.tachiyomi.util.system.prepareTabletUiContext | ||||
| import nucleus.view.NucleusAppCompatActivity | ||||
|  | ||||
| abstract class BaseRxActivity<VB : ViewBinding, P : BasePresenter<*>> : NucleusAppCompatActivity<P>() { | ||||
| @@ -13,6 +15,10 @@ abstract class BaseRxActivity<VB : ViewBinding, P : BasePresenter<*>> : NucleusA | ||||
|  | ||||
|     lateinit var binding: VB | ||||
|  | ||||
|     override fun attachBaseContext(newBase: Context) { | ||||
|         super.attachBaseContext(newBase.prepareTabletUiContext()) | ||||
|     } | ||||
|  | ||||
|     override fun onCreate(savedInstanceState: Bundle?) { | ||||
|         super.onCreate(savedInstanceState) | ||||
|  | ||||
|   | ||||
| @@ -1,16 +1,22 @@ | ||||
| package eu.kanade.tachiyomi.ui.base.activity | ||||
|  | ||||
| import android.content.Context | ||||
| import android.os.Bundle | ||||
| import androidx.appcompat.app.AppCompatActivity | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.data.preference.PreferenceValues | ||||
| import eu.kanade.tachiyomi.data.preference.PreferencesHelper | ||||
| import eu.kanade.tachiyomi.util.system.prepareTabletUiContext | ||||
| import uy.kohesive.injekt.injectLazy | ||||
|  | ||||
| abstract class BaseThemedActivity : AppCompatActivity() { | ||||
|  | ||||
|     val preferences: PreferencesHelper by injectLazy() | ||||
|  | ||||
|     override fun attachBaseContext(newBase: Context) { | ||||
|         super.attachBaseContext(newBase.prepareTabletUiContext()) | ||||
|     } | ||||
|  | ||||
|     override fun onCreate(savedInstanceState: Bundle?) { | ||||
|         applyAppTheme(preferences) | ||||
|         super.onCreate(savedInstanceState) | ||||
|   | ||||
| @@ -15,6 +15,7 @@ import eu.kanade.tachiyomi.data.cache.ChapterCache | ||||
| import eu.kanade.tachiyomi.data.database.DatabaseHelper | ||||
| import eu.kanade.tachiyomi.data.library.LibraryUpdateService | ||||
| import eu.kanade.tachiyomi.data.library.LibraryUpdateService.Target | ||||
| import eu.kanade.tachiyomi.data.preference.PreferenceValues | ||||
| import eu.kanade.tachiyomi.network.NetworkHelper | ||||
| import eu.kanade.tachiyomi.network.PREF_DOH_ADGUARD | ||||
| import eu.kanade.tachiyomi.network.PREF_DOH_CLOUDFLARE | ||||
| @@ -25,7 +26,9 @@ import eu.kanade.tachiyomi.util.CrashLogUtil | ||||
| import eu.kanade.tachiyomi.util.lang.launchIO | ||||
| import eu.kanade.tachiyomi.util.lang.withUIContext | ||||
| import eu.kanade.tachiyomi.util.preference.defaultValue | ||||
| import eu.kanade.tachiyomi.util.preference.entriesRes | ||||
| import eu.kanade.tachiyomi.util.preference.intListPreference | ||||
| import eu.kanade.tachiyomi.util.preference.listPreference | ||||
| import eu.kanade.tachiyomi.util.preference.onChange | ||||
| import eu.kanade.tachiyomi.util.preference.onClick | ||||
| import eu.kanade.tachiyomi.util.preference.preference | ||||
| @@ -33,6 +36,7 @@ import eu.kanade.tachiyomi.util.preference.preferenceCategory | ||||
| import eu.kanade.tachiyomi.util.preference.summaryRes | ||||
| import eu.kanade.tachiyomi.util.preference.switchPreference | ||||
| import eu.kanade.tachiyomi.util.preference.titleRes | ||||
| import eu.kanade.tachiyomi.util.system.isTablet | ||||
| import eu.kanade.tachiyomi.util.system.powerManager | ||||
| import eu.kanade.tachiyomi.util.system.toast | ||||
| import uy.kohesive.injekt.injectLazy | ||||
| @@ -182,6 +186,28 @@ class SettingsAdvancedController : SettingsController() { | ||||
|                 onClick { LibraryUpdateService.start(context, target = Target.TRACKING) } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         preferenceCategory { | ||||
|             titleRes = R.string.pref_category_display | ||||
|  | ||||
|             listPreference { | ||||
|                 key = Keys.tabletUiMode | ||||
|                 titleRes = R.string.pref_tablet_ui_mode | ||||
|                 summary = "%s" | ||||
|                 entriesRes = arrayOf(R.string.lock_always, R.string.landscape, R.string.lock_never) | ||||
|                 entryValues = PreferenceValues.TabletUiMode.values().map { it.name }.toTypedArray() | ||||
|                 defaultValue = if (activity!!.applicationContext.isTablet()) { | ||||
|                     PreferenceValues.TabletUiMode.ALWAYS | ||||
|                 } else { | ||||
|                     PreferenceValues.TabletUiMode.NEVER | ||||
|                 }.name | ||||
|  | ||||
|                 onChange { | ||||
|                     activity?.toast(R.string.requires_app_restart) | ||||
|                     true | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private fun clearChapterCache() { | ||||
|   | ||||
| @@ -41,6 +41,7 @@ import androidx.core.graphics.red | ||||
| import androidx.core.net.toUri | ||||
| import androidx.localbroadcastmanager.content.LocalBroadcastManager | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.data.preference.PreferenceValues | ||||
| import eu.kanade.tachiyomi.data.preference.PreferencesHelper | ||||
| import eu.kanade.tachiyomi.ui.base.activity.BaseThemedActivity | ||||
| import eu.kanade.tachiyomi.util.lang.truncateCenter | ||||
| @@ -50,6 +51,8 @@ import uy.kohesive.injekt.api.get | ||||
| import java.io.File | ||||
| import kotlin.math.roundToInt | ||||
|  | ||||
| private const val TABLET_UI_MIN_SCREEN_WIDTH_DP = 720 | ||||
|  | ||||
| /** | ||||
|  * Display a toast in this context. | ||||
|  * | ||||
| @@ -305,7 +308,27 @@ fun Context.createFileInCacheDir(name: String): File { | ||||
|  * We consider anything with a width of >= 720dp as a tablet, i.e. with layouts in layout-sw720dp. | ||||
|  */ | ||||
| fun Context.isTablet(): Boolean { | ||||
|     return resources.configuration.smallestScreenWidthDp >= 720 | ||||
|     return resources.configuration.smallestScreenWidthDp >= TABLET_UI_MIN_SCREEN_WIDTH_DP | ||||
| } | ||||
|  | ||||
| fun Context.prepareTabletUiContext(): Context { | ||||
|     val configuration = resources.configuration | ||||
|     val expected = when (Injekt.get<PreferencesHelper>().tabletUiMode().get()) { | ||||
|         PreferenceValues.TabletUiMode.ALWAYS -> true | ||||
|         PreferenceValues.TabletUiMode.LANDSCAPE -> configuration.orientation == Configuration.ORIENTATION_LANDSCAPE | ||||
|         PreferenceValues.TabletUiMode.NEVER -> false | ||||
|     } | ||||
|     if (configuration.smallestScreenWidthDp >= TABLET_UI_MIN_SCREEN_WIDTH_DP != expected) { | ||||
|         val overrideConf = Configuration() | ||||
|         overrideConf.setTo(configuration) | ||||
|         overrideConf.smallestScreenWidthDp = if (expected) { | ||||
|             overrideConf.smallestScreenWidthDp.coerceAtLeast(TABLET_UI_MIN_SCREEN_WIDTH_DP) | ||||
|         } else { | ||||
|             overrideConf.smallestScreenWidthDp.coerceAtMost(TABLET_UI_MIN_SCREEN_WIDTH_DP - 1) | ||||
|         } | ||||
|         return createConfigurationContext(overrideConf) | ||||
|     } | ||||
|     return this | ||||
| } | ||||
|  | ||||
| /** | ||||
|   | ||||
		Reference in New Issue
	
	Block a user