diff --git a/app/src/main/java/com/itsaky/androidide/activities/MainActivity.kt b/app/src/main/java/com/itsaky/androidide/activities/MainActivity.kt index eb7f2376f..207ed662c 100755 --- a/app/src/main/java/com/itsaky/androidide/activities/MainActivity.kt +++ b/app/src/main/java/com/itsaky/androidide/activities/MainActivity.kt @@ -31,10 +31,7 @@ import com.google.android.material.transition.MaterialSharedAxis import com.itsaky.androidide.activities.editor.EditorActivityKt import com.itsaky.androidide.app.LimitlessIDEActivity import com.itsaky.androidide.databinding.ActivityMainBinding -import com.itsaky.androidide.preferences.internal.NO_OPENED_PROJECT -import com.itsaky.androidide.preferences.internal.autoOpenProjects -import com.itsaky.androidide.preferences.internal.confirmProjectOpen -import com.itsaky.androidide.preferences.internal.lastOpenedProject +import com.itsaky.androidide.preferences.internal.GeneralPreferences import com.itsaky.androidide.projects.ProjectManagerImpl import com.itsaky.androidide.resources.R.string import com.itsaky.androidide.templates.ITemplateProvider @@ -158,12 +155,12 @@ class MainActivity : LimitlessIDEActivity() { } private fun tryOpenLastProject() { - if (!autoOpenProjects) { + if (!GeneralPreferences.autoOpenProjects) { return } - val openedProject = lastOpenedProject - if (NO_OPENED_PROJECT == openedProject) { + val openedProject = GeneralPreferences.lastOpenedProject + if (GeneralPreferences.NO_OPENED_PROJECT == openedProject) { return } @@ -179,7 +176,7 @@ class MainActivity : LimitlessIDEActivity() { return } - if (confirmProjectOpen) { + if (GeneralPreferences.confirmProjectOpen) { askProjectOpenPermission(project) return } diff --git a/app/src/main/java/com/itsaky/androidide/activities/OnboardingActivity.kt b/app/src/main/java/com/itsaky/androidide/activities/OnboardingActivity.kt index b8942d363..acb32810b 100644 --- a/app/src/main/java/com/itsaky/androidide/activities/OnboardingActivity.kt +++ b/app/src/main/java/com/itsaky/androidide/activities/OnboardingActivity.kt @@ -35,8 +35,8 @@ import com.itsaky.androidide.fragments.onboarding.OnboardingInfoFragment import com.itsaky.androidide.fragments.onboarding.PermissionsFragment import com.itsaky.androidide.fragments.onboarding.StatisticsFragment import com.itsaky.androidide.models.JdkDistribution +import com.itsaky.androidide.preferences.internal.StatPreferences import com.itsaky.androidide.preferences.internal.prefManager -import com.itsaky.androidide.preferences.internal.statConsentDialogShown import com.itsaky.androidide.tasks.launchAsyncWithProgress import com.itsaky.androidide.ui.themes.IThemeManager import com.itsaky.androidide.utils.Environment @@ -119,9 +119,9 @@ class OnboardingActivity : AppIntro2() { return } - if (!statConsentDialogShown) { + if (!StatPreferences.statConsentDialogShown) { addSlide(StatisticsFragment.newInstance(this)) - statConsentDialogShown = true + StatPreferences.statConsentDialogShown = true } if (!PermissionsFragment.areAllPermissionsGranted(this)) { @@ -178,7 +178,7 @@ class OnboardingActivity : AppIntro2() { private fun isSetupCompleted(): Boolean { return checkToolsIsInstalled() - && statConsentDialogShown + && StatPreferences.statConsentDialogShown && PermissionsFragment.areAllPermissionsGranted(this) } diff --git a/app/src/main/java/com/itsaky/androidide/activities/editor/BaseEditorActivity.kt b/app/src/main/java/com/itsaky/androidide/activities/editor/BaseEditorActivity.kt index e956d2380..2df8af2f3 100644 --- a/app/src/main/java/com/itsaky/androidide/activities/editor/BaseEditorActivity.kt +++ b/app/src/main/java/com/itsaky/androidide/activities/editor/BaseEditorActivity.kt @@ -65,7 +65,7 @@ import com.itsaky.androidide.models.DiagnosticGroup import com.itsaky.androidide.models.OpenedFile import com.itsaky.androidide.models.Range import com.itsaky.androidide.models.SearchResult -import com.itsaky.androidide.preferences.internal.launchAppAfterInstall +import com.itsaky.androidide.preferences.internal.BuildPreferences import com.itsaky.androidide.projects.IProjectManager import com.itsaky.androidide.projects.ProjectManagerImpl import com.itsaky.androidide.tasks.cancelIfActive @@ -203,7 +203,7 @@ abstract class BaseEditorActivity : IDEActivity(), TabLayout.OnTabSelectedListen val packageName = onResult(this, intent) ?: return - if (launchAppAfterInstall) { + if (BuildPreferences.launchAppAfterInstall) { IntentUtils.launchApp(this, packageName) return } @@ -400,7 +400,8 @@ abstract class BaseEditorActivity : IDEActivity(), TabLayout.OnTabSelectedListen private fun handleUiDesignerResult(result: ActivityResult) { if (result.resultCode != RESULT_OK || result.data == null) { - log.warn("UI Designer returned invalid result: resultCode={}, data={}", result.resultCode, result.data) + log.warn("UI Designer returned invalid result: resultCode={}, data={}", result.resultCode, + result.data) return } val generated = result.data!!.getStringExtra(UIDesignerActivity.RESULT_GENERATED_XML) diff --git a/app/src/main/java/com/itsaky/androidide/activities/editor/ProjectHandlerActivity.kt b/app/src/main/java/com/itsaky/androidide/activities/editor/ProjectHandlerActivity.kt index 9cc9b4bba..ac60b69a1 100644 --- a/app/src/main/java/com/itsaky/androidide/activities/editor/ProjectHandlerActivity.kt +++ b/app/src/main/java/com/itsaky/androidide/activities/editor/ProjectHandlerActivity.kt @@ -38,8 +38,7 @@ import com.itsaky.androidide.handlers.LspHandler.destroyLanguageServers import com.itsaky.androidide.lookup.Lookup import com.itsaky.androidide.lsp.IDELanguageClientImpl import com.itsaky.androidide.lsp.java.utils.CancelChecker -import com.itsaky.androidide.preferences.internal.NO_OPENED_PROJECT -import com.itsaky.androidide.preferences.internal.lastOpenedProject +import com.itsaky.androidide.preferences.internal.GeneralPreferences import com.itsaky.androidide.projects.ProjectManagerImpl import com.itsaky.androidide.projects.api.GradleProject import com.itsaky.androidide.projects.builder.BuildService @@ -495,7 +494,7 @@ abstract class ProjectHandlerActivity : BaseEditorActivity() { val initFailed = getString(string.msg_project_initialization_failed) setStatus(initFailed) - val msg = when(failure) { + val msg = when (failure) { PROJECT_DIRECTORY_INACCESSIBLE -> string.msg_project_dir_inaccessible PROJECT_NOT_DIRECTORY -> string.msg_file_is_not_dir PROJECT_NOT_FOUND -> string.msg_project_dir_doesnt_exist @@ -634,7 +633,7 @@ abstract class ProjectHandlerActivity : BaseEditorActivity() { private fun initialSetup() { val manager = ProjectManagerImpl.getInstance() - lastOpenedProject = manager.projectDirPath + GeneralPreferences.lastOpenedProject = manager.projectDirPath try { val project = manager.rootProject if (project == null) { @@ -662,7 +661,7 @@ abstract class ProjectHandlerActivity : BaseEditorActivity() { saveOpenedFiles() // reset the lastOpenedProject if the user explicitly chose to close the project - lastOpenedProject = NO_OPENED_PROJECT + GeneralPreferences.lastOpenedProject = GeneralPreferences.NO_OPENED_PROJECT } // Make sure we close files diff --git a/app/src/main/java/com/itsaky/androidide/app/IDEApplication.kt b/app/src/main/java/com/itsaky/androidide/app/IDEApplication.kt index b8c54e965..43a7ffd23 100755 --- a/app/src/main/java/com/itsaky/androidide/app/IDEApplication.kt +++ b/app/src/main/java/com/itsaky/androidide/app/IDEApplication.kt @@ -43,13 +43,9 @@ import com.itsaky.androidide.events.EditorEventsIndex import com.itsaky.androidide.events.LspApiEventsIndex import com.itsaky.androidide.events.LspJavaEventsIndex import com.itsaky.androidide.events.ProjectsApiEventsIndex -import com.itsaky.androidide.preferences.KEY_DEVOPTS_DEBUGGING_DUMPLOGS -import com.itsaky.androidide.preferences.dumpLogs -import com.itsaky.androidide.preferences.internal.SELECTED_LOCALE -import com.itsaky.androidide.preferences.internal.STAT_OPT_IN -import com.itsaky.androidide.preferences.internal.UI_MODE -import com.itsaky.androidide.preferences.internal.statOptIn -import com.itsaky.androidide.preferences.internal.uiMode +import com.itsaky.androidide.preferences.internal.DevOpsPreferences +import com.itsaky.androidide.preferences.internal.GeneralPreferences +import com.itsaky.androidide.preferences.internal.StatPreferences import com.itsaky.androidide.resources.localization.LocaleProvider import com.itsaky.androidide.stats.AndroidIDEStats import com.itsaky.androidide.stats.StatUploadWorker @@ -95,7 +91,7 @@ class IDEApplication : TermuxApplication() { StrictMode.setVmPolicy( StrictMode.VmPolicy.Builder(StrictMode.getVmPolicy()).penaltyLog().detectAll().build()) - if (dumpLogs) { + if (DevOpsPreferences.dumpLogs) { startLogcatReader() } } @@ -106,7 +102,7 @@ class IDEApplication : TermuxApplication() { EventBus.getDefault().register(this) - AppCompatDelegate.setDefaultNightMode(uiMode) + AppCompatDelegate.setDefaultNightMode(GeneralPreferences.uiMode) if (IThemeManager.getInstance().getCurrentTheme() == IDETheme.MATERIAL_YOU) { DynamicColors.applyToActivitiesIfAvailable(this) @@ -155,21 +151,21 @@ class IDEApplication : TermuxApplication() { fun reportStatsIfNecessary() { - if (!statOptIn) { + if (!StatPreferences.statOptIn) { log.info("Stat collection is disabled.") return } val constraints = Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build() val request = PeriodicWorkRequestBuilder(Duration.ofHours(24)).setInputData( - AndroidIDEStats.statData.toInputData()).setConstraints(constraints) + AndroidIDEStats.statData.toInputData()).setConstraints(constraints) .addTag(StatUploadWorker.WORKER_WORK_NAME).build() val workManager = WorkManager.getInstance(this) log.info("reportStatsIfNecessary: Enqueuing StatUploadWorker...") val operation = workManager.enqueueUniquePeriodicWork(StatUploadWorker.WORKER_WORK_NAME, - ExistingPeriodicWorkPolicy.UPDATE, request) + ExistingPeriodicWorkPolicy.UPDATE, request) operation.state.observeForever(object : Observer { override fun onChanged(value: Operation.State) { @@ -198,24 +194,24 @@ class IDEApplication : TermuxApplication() { @Subscribe(threadMode = ThreadMode.MAIN) fun onPrefChanged(event: PreferenceChangeEvent) { val enabled = event.value as? Boolean? - if (event.key == STAT_OPT_IN) { + if (event.key == StatPreferences.STAT_OPT_IN) { if (enabled == true) { reportStatsIfNecessary() } else { cancelStatUploadWorker() } - } else if (event.key == KEY_DEVOPTS_DEBUGGING_DUMPLOGS) { + } else if (event.key == DevOpsPreferences.KEY_DEVOPTS_DEBUGGING_DUMPLOGS) { if (enabled == true) { startLogcatReader() } else { stopLogcatReader() } - } else if (event.key == UI_MODE && uiMode != AppCompatDelegate.getDefaultNightMode()) { - AppCompatDelegate.setDefaultNightMode(uiMode) - } else if (event.key == SELECTED_LOCALE) { + } else if (event.key == GeneralPreferences.UI_MODE && GeneralPreferences.uiMode != AppCompatDelegate.getDefaultNightMode()) { + AppCompatDelegate.setDefaultNightMode(GeneralPreferences.uiMode) + } else if (event.key == GeneralPreferences.SELECTED_LOCALE) { // Use empty locale list if the locale has been reset to 'System Default' - val selectedLocale = com.itsaky.androidide.preferences.internal.selectedLocale + val selectedLocale = GeneralPreferences.selectedLocale val localeListCompat = selectedLocale?.let { LocaleListCompat.create(LocaleProvider.getLocale(selectedLocale)) } ?: LocaleListCompat.getEmptyLocaleList() diff --git a/app/src/main/java/com/itsaky/androidide/app/configuration/JdkDistributionProviderImpl.kt b/app/src/main/java/com/itsaky/androidide/app/configuration/JdkDistributionProviderImpl.kt index 98ff5b2a7..b1d9140a6 100644 --- a/app/src/main/java/com/itsaky/androidide/app/configuration/JdkDistributionProviderImpl.kt +++ b/app/src/main/java/com/itsaky/androidide/app/configuration/JdkDistributionProviderImpl.kt @@ -19,7 +19,7 @@ package com.itsaky.androidide.app.configuration import com.google.auto.service.AutoService import com.itsaky.androidide.models.JdkDistribution -import com.itsaky.androidide.preferences.internal.javaHome +import com.itsaky.androidide.preferences.internal.BuildPreferences import com.itsaky.androidide.utils.Environment import com.itsaky.androidide.utils.JdkUtils import org.slf4j.LoggerFactory @@ -49,7 +49,7 @@ class JdkDistributionProviderImpl : IJdkDistributionProvider { return JdkUtils.findJavaInstallations().also { distributions -> // set the default value for the 'javaHome' preference - if (javaHome.isBlank() && distributions.isNotEmpty()) { + if (BuildPreferences.javaHome.isBlank() && distributions.isNotEmpty()) { var defaultDist = distributions.find { it.javaVersion.startsWith(IJdkDistributionProvider.DEFAULT_JAVA_VERSION) } @@ -59,10 +59,10 @@ class JdkDistributionProviderImpl : IJdkDistributionProvider { defaultDist = distributions[0] } - javaHome = defaultDist.javaHome + BuildPreferences.javaHome = defaultDist.javaHome } - val home = File(javaHome) + val home = File(BuildPreferences.javaHome) val java = File(home, "bin/java") // the previously selected JDK distribution does not exist @@ -71,7 +71,7 @@ class JdkDistributionProviderImpl : IJdkDistributionProvider { if (distributions.isNotEmpty()) { log.warn( "Previously selected java.home does not exists! Falling back to ${distributions[0]}...") - javaHome = distributions[0].javaHome + BuildPreferences.javaHome = distributions[0].javaHome } } @@ -79,9 +79,9 @@ class JdkDistributionProviderImpl : IJdkDistributionProvider { java.setExecutable(true) } - log.debug("Setting Environment.JAVA_HOME to {}", javaHome) + log.debug("Setting Environment.JAVA_HOME to {}", BuildPreferences.javaHome) - Environment.JAVA_HOME = File(javaHome) + Environment.JAVA_HOME = File(BuildPreferences.javaHome) Environment.JAVA = Environment.JAVA_HOME.resolve("bin/java") } } diff --git a/app/src/main/java/com/itsaky/androidide/fragments/onboarding/StatisticsFragment.kt b/app/src/main/java/com/itsaky/androidide/fragments/onboarding/StatisticsFragment.kt index 3f0e46845..55f696708 100644 --- a/app/src/main/java/com/itsaky/androidide/fragments/onboarding/StatisticsFragment.kt +++ b/app/src/main/java/com/itsaky/androidide/fragments/onboarding/StatisticsFragment.kt @@ -6,7 +6,6 @@ import android.view.ViewGroup import com.itsaky.androidide.R import com.itsaky.androidide.app.IDEApplication import com.itsaky.androidide.databinding.LayoutOnboardingStatisticsBinding -import com.itsaky.androidide.preferences.internal.statOptIn class StatisticsFragment : OnboardingFragment() { @@ -15,12 +14,15 @@ class StatisticsFragment : OnboardingFragment() { get() = checkNotNull(_content) { "Fragment has been destroyed" } companion object { + @JvmStatic - fun newInstance(context: Context) : StatisticsFragment { + fun newInstance(context: Context): StatisticsFragment { return StatisticsFragment().apply { arguments = Bundle().apply { - putCharSequence(KEY_ONBOARDING_TITLE, context.getString(R.string.title_androidide_statistics)) - putCharSequence(KEY_ONBOARDING_SUBTITLE, context.getString(R.string.idepref_stats_optIn_summary)) + putCharSequence(KEY_ONBOARDING_TITLE, + context.getString(R.string.title_androidide_statistics)) + putCharSequence(KEY_ONBOARDING_SUBTITLE, + context.getString(R.string.idepref_stats_optIn_summary)) } } } @@ -37,7 +39,9 @@ class StatisticsFragment : OnboardingFragment() { } fun updateStatOptInStatus() { - statOptIn = _content?.statOptIn?.isChecked ?: false + com.itsaky.androidide.preferences.internal.StatPreferences.statOptIn = + _content?.statOptIn?.isChecked ?: false + IDEApplication.instance.reportStatsIfNecessary() } } \ No newline at end of file diff --git a/app/src/main/java/com/itsaky/androidide/fragments/output/AppLogFragment.kt b/app/src/main/java/com/itsaky/androidide/fragments/output/AppLogFragment.kt index aef831bf5..dc973fb27 100644 --- a/app/src/main/java/com/itsaky/androidide/fragments/output/AppLogFragment.kt +++ b/app/src/main/java/com/itsaky/androidide/fragments/output/AppLogFragment.kt @@ -25,7 +25,7 @@ import android.os.Bundle import android.view.View import androidx.localbroadcastmanager.content.LocalBroadcastManager import com.itsaky.androidide.R -import com.itsaky.androidide.preferences.logsenderEnabled +import com.itsaky.androidide.preferences.internal.DevOpsPreferences import com.itsaky.androidide.services.log.ConnectionObserverParams import com.itsaky.androidide.services.log.LogReceiverImpl import com.itsaky.androidide.services.log.LogReceiverService @@ -86,7 +86,7 @@ class AppLogFragment : LogViewFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - emptyStateViewModel.emptyMessage.value = if (logsenderEnabled) { + emptyStateViewModel.emptyMessage.value = if (DevOpsPreferences.logsenderEnabled) { getString(R.string.msg_emptyview_applogs) } else { getString(R.string.msg_logsender_disabled) @@ -125,7 +125,7 @@ class AppLogFragment : LogViewFragment() { private fun bindToLogReceiver() { try { - if (!logsenderEnabled) { + if (!DevOpsPreferences.logsenderEnabled) { log.info("LogSender is disabled. LogReceiver service won't be started...") // release the connection listener @@ -135,7 +135,7 @@ class AppLogFragment : LogViewFragment() { val context = context ?: return val intent = Intent(context, LogReceiverService::class.java).setAction( - LogReceiverService.ACTION_CONNECT_LOG_CONSUMER) + LogReceiverService.ACTION_CONNECT_LOG_CONSUMER) val serviceConnection = logServiceConnection ?: LogReceiverServiceConnection { binder -> logReceiverImpl = binder @@ -155,7 +155,7 @@ class AppLogFragment : LogViewFragment() { private fun unbindFromLogReceiver() { try { - if (!logsenderEnabled) { + if (!DevOpsPreferences.logsenderEnabled) { return } diff --git a/app/src/main/java/com/itsaky/androidide/handlers/EditorBuildEventListener.kt b/app/src/main/java/com/itsaky/androidide/handlers/EditorBuildEventListener.kt index bd4c951e2..f0522138c 100644 --- a/app/src/main/java/com/itsaky/androidide/handlers/EditorBuildEventListener.kt +++ b/app/src/main/java/com/itsaky/androidide/handlers/EditorBuildEventListener.kt @@ -19,7 +19,7 @@ package com.itsaky.androidide.handlers import com.itsaky.androidide.R import com.itsaky.androidide.activities.editor.EditorHandlerActivity -import com.itsaky.androidide.preferences.internal.isFirstBuild +import com.itsaky.androidide.preferences.internal.GeneralPreferences import com.itsaky.androidide.resources.R.string import com.itsaky.androidide.services.builder.GradleBuildService import com.itsaky.androidide.tooling.api.messages.result.BuildInfo @@ -63,7 +63,7 @@ class EditorBuildEventListener : GradleBuildService.EventListener { override fun prepareBuild(buildInfo: BuildInfo) { checkActivity("prepareBuild") ?: return - val isFirstBuild = isFirstBuild + val isFirstBuild = GeneralPreferences.isFirstBuild activity .setStatus( activity.getString(if (isFirstBuild) string.preparing_first else string.preparing) @@ -87,7 +87,7 @@ class EditorBuildEventListener : GradleBuildService.EventListener { analyzeCurrentFile() - isFirstBuild = false + GeneralPreferences.isFirstBuild = false activity.editorViewModel.isBuildInProgress = false activity.flashSuccess(R.string.build_status_sucess) @@ -106,7 +106,7 @@ class EditorBuildEventListener : GradleBuildService.EventListener { analyzeCurrentFile() - isFirstBuild = false + GeneralPreferences.isFirstBuild = false activity.editorViewModel.isBuildInProgress = false activity.flashError(R.string.build_status_failed) diff --git a/app/src/main/java/com/itsaky/androidide/preferences/buildAndRunPrefExts.kt b/app/src/main/java/com/itsaky/androidide/preferences/buildAndRunPrefExts.kt index fbb0d7499..0e5cc087d 100644 --- a/app/src/main/java/com/itsaky/androidide/preferences/buildAndRunPrefExts.kt +++ b/app/src/main/java/com/itsaky/androidide/preferences/buildAndRunPrefExts.kt @@ -24,21 +24,21 @@ import com.google.android.material.textfield.TextInputLayout import com.itsaky.androidide.R import com.itsaky.androidide.app.configuration.IJdkDistributionProvider import com.itsaky.androidide.models.JdkDistribution -import com.itsaky.androidide.preferences.internal.CUSTOM_GRADLE_INSTALLATION -import com.itsaky.androidide.preferences.internal.GRADLE_CLEAR_CACHE -import com.itsaky.androidide.preferences.internal.GRADLE_COMMANDS -import com.itsaky.androidide.preferences.internal.LAUNCH_APP_AFTER_INSTALL -import com.itsaky.androidide.preferences.internal.PREF_JAVA_HOME -import com.itsaky.androidide.preferences.internal.gradleInstallationDir -import com.itsaky.androidide.preferences.internal.isBuildCacheEnabled -import com.itsaky.androidide.preferences.internal.isDebugEnabled -import com.itsaky.androidide.preferences.internal.isInfoEnabled -import com.itsaky.androidide.preferences.internal.isOfflineEnabled -import com.itsaky.androidide.preferences.internal.isScanEnabled -import com.itsaky.androidide.preferences.internal.isStacktraceEnabled -import com.itsaky.androidide.preferences.internal.isWarningModeAllEnabled -import com.itsaky.androidide.preferences.internal.javaHome -import com.itsaky.androidide.preferences.internal.launchAppAfterInstall +import com.itsaky.androidide.preferences.internal.BuildPreferences.CUSTOM_GRADLE_INSTALLATION +import com.itsaky.androidide.preferences.internal.BuildPreferences.GRADLE_CLEAR_CACHE +import com.itsaky.androidide.preferences.internal.BuildPreferences.GRADLE_COMMANDS +import com.itsaky.androidide.preferences.internal.BuildPreferences.LAUNCH_APP_AFTER_INSTALL +import com.itsaky.androidide.preferences.internal.BuildPreferences.PREF_JAVA_HOME +import com.itsaky.androidide.preferences.internal.BuildPreferences.gradleInstallationDir +import com.itsaky.androidide.preferences.internal.BuildPreferences.isBuildCacheEnabled +import com.itsaky.androidide.preferences.internal.BuildPreferences.isDebugEnabled +import com.itsaky.androidide.preferences.internal.BuildPreferences.isInfoEnabled +import com.itsaky.androidide.preferences.internal.BuildPreferences.isOfflineEnabled +import com.itsaky.androidide.preferences.internal.BuildPreferences.isScanEnabled +import com.itsaky.androidide.preferences.internal.BuildPreferences.isStacktraceEnabled +import com.itsaky.androidide.preferences.internal.BuildPreferences.isWarningModeAllEnabled +import com.itsaky.androidide.preferences.internal.BuildPreferences.javaHome +import com.itsaky.androidide.preferences.internal.BuildPreferences.launchAppAfterInstall import com.itsaky.androidide.resources.R.drawable import com.itsaky.androidide.resources.R.string import com.itsaky.androidide.tasks.executeAsync @@ -214,7 +214,8 @@ class GradleJDKVersionPreference( val javaVersion = jdkDistProvider.forJavaHome(javaHome)?.javaVersion ?: "" - preference.summary = preference.context.getString(R.string.idepref_jdkVersion_summary, javaVersion) + preference.summary = preference.context.getString(R.string.idepref_jdkVersion_summary, + javaVersion) preference.isEnabled = jdkDistProvider.installedDistributions.size > 1 } } \ No newline at end of file diff --git a/app/src/main/java/com/itsaky/androidide/preferences/developerOptionsPrefExts.kt b/app/src/main/java/com/itsaky/androidide/preferences/developerOptionsPrefExts.kt index c1f832c30..06c0be68f 100644 --- a/app/src/main/java/com/itsaky/androidide/preferences/developerOptionsPrefExts.kt +++ b/app/src/main/java/com/itsaky/androidide/preferences/developerOptionsPrefExts.kt @@ -18,16 +18,12 @@ package com.itsaky.androidide.preferences import com.itsaky.androidide.R -import com.itsaky.androidide.preferences.internal.prefManager +import com.itsaky.androidide.preferences.internal.DevOpsPreferences import kotlinx.parcelize.Parcelize -internal const val KEY_DEVOPTS = "ide.prefs.developerOptions" -internal const val KEY_DEVOPTS_DEBUGGING = "${KEY_DEVOPTS}.debugging" -internal const val KEY_DEVOPTS_DEBUGGING_DUMPLOGS = "${KEY_DEVOPTS_DEBUGGING}.dumpLogs" -internal const val KEY_DEVOPTS_DEBUGGING_ENABLE_LOGSENDER = "${KEY_DEVOPTS_DEBUGGING}.enableLogsender" - @Parcelize -internal class DeveloperOptionsScreen(override val key: String = KEY_DEVOPTS, +internal class DeveloperOptionsScreen( + override val key: String = DevOpsPreferences.KEY_DEVOPTS, override val title: Int = R.string.title_developer_options, override val summary: Int? = R.string.idepref_devOptions_summary, override val children: List = mutableListOf()) : IPreferenceScreen() { @@ -39,7 +35,7 @@ internal class DeveloperOptionsScreen(override val key: String = KEY_DEVOPTS, @Parcelize internal class DebuggingPreferences( - override val key: String = KEY_DEVOPTS_DEBUGGING, + override val key: String = DevOpsPreferences.KEY_DEVOPTS_DEBUGGING, override val title: Int = R.string.idepref_group_debugging, override val children: List = mutableListOf()) : IPreferenceGroup() { @@ -49,28 +45,18 @@ internal class DebuggingPreferences( } } -internal var dumpLogs: Boolean - get() = prefManager.getBoolean(KEY_DEVOPTS_DEBUGGING_DUMPLOGS, false) - set(value) { - prefManager.putBoolean(KEY_DEVOPTS_DEBUGGING_DUMPLOGS, value) - } - @Parcelize internal class DumpLogsPreference( - override val key: String = KEY_DEVOPTS_DEBUGGING_DUMPLOGS, + override val key: String = DevOpsPreferences.KEY_DEVOPTS_DEBUGGING_DUMPLOGS, override val title: Int = R.string.idepref_devOptions_dumpLogs_title, override val summary: Int? = R.string.idepref_devOptions_dumpLogs_summary) : - SwitchPreference(setValue = ::dumpLogs::set, getValue = ::dumpLogs::get) - -internal var logsenderEnabled: Boolean - get() = prefManager.getBoolean(KEY_DEVOPTS_DEBUGGING_ENABLE_LOGSENDER, true) - set(value) { - prefManager.putBoolean(KEY_DEVOPTS_DEBUGGING_ENABLE_LOGSENDER, value) - } + SwitchPreference(setValue = DevOpsPreferences::dumpLogs::set, + getValue = DevOpsPreferences::dumpLogs::get) @Parcelize internal class EnableLogSenderPreference( - override val key: String = KEY_DEVOPTS_DEBUGGING_ENABLE_LOGSENDER, + override val key: String = DevOpsPreferences.KEY_DEVOPTS_DEBUGGING_ENABLE_LOGSENDER, override val title: Int = R.string.idepref_devOptions_enableLogsender_title, override val summary: Int? = R.string.idepref_devOptions_enableLogsender_summary) : - SwitchPreference(setValue = ::logsenderEnabled::set, getValue = ::logsenderEnabled::get) \ No newline at end of file + SwitchPreference(setValue = DevOpsPreferences::logsenderEnabled::set, + getValue = DevOpsPreferences::logsenderEnabled::get) \ No newline at end of file diff --git a/app/src/main/java/com/itsaky/androidide/preferences/editorPrefExts.kt b/app/src/main/java/com/itsaky/androidide/preferences/editorPrefExts.kt index f63e0c0c5..537e0ff48 100644 --- a/app/src/main/java/com/itsaky/androidide/preferences/editorPrefExts.kt +++ b/app/src/main/java/com/itsaky/androidide/preferences/editorPrefExts.kt @@ -24,45 +24,25 @@ import com.itsaky.androidide.R import com.itsaky.androidide.databinding.LayoutTextSizeSliderBinding import com.itsaky.androidide.editor.schemes.IDEColorScheme import com.itsaky.androidide.editor.schemes.IDEColorSchemeProvider -import com.itsaky.androidide.preferences.internal.AUTO_SAVE -import com.itsaky.androidide.preferences.internal.COLOR_SCHEME -import com.itsaky.androidide.preferences.internal.COMPLETIONS_MATCH_LOWER -import com.itsaky.androidide.preferences.internal.DEFAULT_COLOR_SCHEME -import com.itsaky.androidide.preferences.internal.DELETE_EMPTY_LINES -import com.itsaky.androidide.preferences.internal.DELETE_TABS_ON_BACKSPACE -import com.itsaky.androidide.preferences.internal.FLAG_PASSWORD -import com.itsaky.androidide.preferences.internal.FONT_LIGATURES -import com.itsaky.androidide.preferences.internal.FONT_SIZE -import com.itsaky.androidide.preferences.internal.PIN_LINE_NUMBERS -import com.itsaky.androidide.preferences.internal.PRINTABLE_CHARS -import com.itsaky.androidide.preferences.internal.STICKY_SCROLL_ENABLED -import com.itsaky.androidide.preferences.internal.TAB_SIZE -import com.itsaky.androidide.preferences.internal.USE_CUSTOM_FONT -import com.itsaky.androidide.preferences.internal.USE_ICU -import com.itsaky.androidide.preferences.internal.USE_MAGNIFER -import com.itsaky.androidide.preferences.internal.USE_SOFT_TAB -import com.itsaky.androidide.preferences.internal.WORD_WRAP -import com.itsaky.androidide.preferences.internal.autoSave -import com.itsaky.androidide.preferences.internal.colorScheme -import com.itsaky.androidide.preferences.internal.completionsMatchLower -import com.itsaky.androidide.preferences.internal.deleteEmptyLines -import com.itsaky.androidide.preferences.internal.deleteTabsOnBackspace -import com.itsaky.androidide.preferences.internal.drawEmptyLineWs -import com.itsaky.androidide.preferences.internal.drawInnerWs -import com.itsaky.androidide.preferences.internal.drawLeadingWs -import com.itsaky.androidide.preferences.internal.drawLineBreak -import com.itsaky.androidide.preferences.internal.drawTrailingWs -import com.itsaky.androidide.preferences.internal.fontLigatures -import com.itsaky.androidide.preferences.internal.fontSize -import com.itsaky.androidide.preferences.internal.pinLineNumbers -import com.itsaky.androidide.preferences.internal.stickyScrollEnabled -import com.itsaky.androidide.preferences.internal.tabSize -import com.itsaky.androidide.preferences.internal.useCustomFont -import com.itsaky.androidide.preferences.internal.useIcu -import com.itsaky.androidide.preferences.internal.useMagnifier -import com.itsaky.androidide.preferences.internal.useSoftTab -import com.itsaky.androidide.preferences.internal.visiblePasswordFlag -import com.itsaky.androidide.preferences.internal.wordwrap +import com.itsaky.androidide.preferences.internal.EditorPreferences +import com.itsaky.androidide.preferences.internal.EditorPreferences.AUTO_SAVE +import com.itsaky.androidide.preferences.internal.EditorPreferences.COLOR_SCHEME +import com.itsaky.androidide.preferences.internal.EditorPreferences.COMPLETIONS_MATCH_LOWER +import com.itsaky.androidide.preferences.internal.EditorPreferences.DEFAULT_COLOR_SCHEME +import com.itsaky.androidide.preferences.internal.EditorPreferences.DELETE_EMPTY_LINES +import com.itsaky.androidide.preferences.internal.EditorPreferences.DELETE_TABS_ON_BACKSPACE +import com.itsaky.androidide.preferences.internal.EditorPreferences.FLAG_PASSWORD +import com.itsaky.androidide.preferences.internal.EditorPreferences.FONT_LIGATURES +import com.itsaky.androidide.preferences.internal.EditorPreferences.FONT_SIZE +import com.itsaky.androidide.preferences.internal.EditorPreferences.PIN_LINE_NUMBERS +import com.itsaky.androidide.preferences.internal.EditorPreferences.PRINTABLE_CHARS +import com.itsaky.androidide.preferences.internal.EditorPreferences.STICKY_SCROLL_ENABLED +import com.itsaky.androidide.preferences.internal.EditorPreferences.TAB_SIZE +import com.itsaky.androidide.preferences.internal.EditorPreferences.USE_CUSTOM_FONT +import com.itsaky.androidide.preferences.internal.EditorPreferences.USE_ICU +import com.itsaky.androidide.preferences.internal.EditorPreferences.USE_MAGNIFER +import com.itsaky.androidide.preferences.internal.EditorPreferences.USE_SOFT_TAB +import com.itsaky.androidide.preferences.internal.EditorPreferences.WORD_WRAP import com.itsaky.androidide.resources.R.drawable import com.itsaky.androidide.resources.R.string import kotlinx.parcelize.IgnoredOnParcel @@ -70,7 +50,7 @@ import kotlinx.parcelize.Parcelize import kotlin.reflect.KMutableProperty0 @Parcelize -class EditorPreferences( +class EditorPreferencesScreen( override val key: String = "idepref_editor", override val title: Int = string.idepref_editor_title, override val summary: Int? = string.idepref_editor_summary, @@ -80,7 +60,7 @@ class EditorPreferences( init { addPreference(CommonConfigurations()) addPreference(JavaCodeConfigurations()) - addPreference(XMLPreferences()) + addPreference(XMLPreferencesScreen()) } } @@ -124,7 +104,7 @@ private class TextSize( override fun onConfigureDialog(preference: Preference, dialog: MaterialAlertDialogBuilder) { val binding = LayoutTextSizeSliderBinding.inflate(LayoutInflater.from(preference.context)) - var size = fontSize + var size = EditorPreferences.fontSize if (size < 6 || size > 32) { size = 14f } @@ -144,7 +124,7 @@ private class TextSize( } private fun changeTextSize(binding: LayoutTextSizeSliderBinding, size: Float) { - fontSize = size + EditorPreferences.fontSize = size binding.slider.value = size } } @@ -155,7 +135,8 @@ private class FontLigatures( override val title: Int = string.idepref_editor_ligatures_title, override val summary: Int? = string.idepref_editor_ligatures_summary, override val icon: Int? = drawable.ic_font_ligatures, -) : SwitchPreference(setValue = ::fontLigatures::set, getValue = ::fontLigatures::get) +) : SwitchPreference(setValue = EditorPreferences::fontLigatures::set, + getValue = EditorPreferences::fontLigatures::get) @Parcelize private class UseSoftTab( @@ -163,7 +144,8 @@ private class UseSoftTab( override val title: Int = string.idepref_editor_useSoftTabs_title, override val summary: Int? = string.idepref_editor_useSoftTabs_summary, override val icon: Int? = drawable.ic_space, -) : SwitchPreference(setValue = ::useSoftTab::set, getValue = ::useSoftTab::get) +) : SwitchPreference(setValue = EditorPreferences::useSoftTab::set, + getValue = EditorPreferences::useSoftTab::get) @Parcelize private class TabSize( @@ -180,7 +162,7 @@ private class TabSize( private val tabSizes = intArrayOf(2, 4, 6, 8) override fun getEntries(preference: Preference): Array { - val currentTabSize = tabSize + val currentTabSize = EditorPreferences.tabSize return Array(tabSizes.size) { index -> PreferenceChoices.Entry( label = tabSizes[index].toString(), @@ -195,7 +177,7 @@ private class TabSize( entry: PreferenceChoices.Entry?, position: Int ) { - tabSize = (entry?.data as? Int?) ?: 4 + EditorPreferences.tabSize = (entry?.data as? Int?) ?: 4 } } @@ -214,7 +196,7 @@ private class ColorSchemePreference( private val schemes = IDEColorSchemeProvider.list() override fun getEntries(preference: Preference): Array { - val currentColorScheme = colorScheme + val currentColorScheme = EditorPreferences.colorScheme return Array(schemes.size) { index -> PreferenceChoices.Entry( schemes[index].name, @@ -229,7 +211,7 @@ private class ColorSchemePreference( entry: PreferenceChoices.Entry?, position: Int ) { - colorScheme = (entry?.data as? IDEColorScheme?)?.key ?: DEFAULT_COLOR_SCHEME + EditorPreferences.colorScheme = (entry?.data as? IDEColorScheme?)?.key ?: DEFAULT_COLOR_SCHEME } } @@ -243,11 +225,11 @@ private class NonPrintablePaintingFlags( override fun getProperties(): Map> { return linkedMapOf( - "Leading" to ::drawLeadingWs, - "Trailing" to ::drawTrailingWs, - "Inner" to ::drawInnerWs, - "Empty lines" to ::drawEmptyLineWs, - "Line breaks" to ::drawLineBreak + "Leading" to EditorPreferences::drawLeadingWs, + "Trailing" to EditorPreferences::drawTrailingWs, + "Inner" to EditorPreferences::drawInnerWs, + "Empty lines" to EditorPreferences::drawEmptyLineWs, + "Line breaks" to EditorPreferences::drawLineBreak ) } } @@ -258,7 +240,8 @@ private class WordWrap( override val title: Int = string.idepref_editor_word_wrap_title, override val summary: Int? = string.idepref_editor_word_wrap_summary, override val icon: Int? = drawable.ic_wrap_text, -) : SwitchPreference(setValue = ::wordwrap::set, getValue = ::wordwrap::get) +) : SwitchPreference(setValue = EditorPreferences::wordwrap::set, + getValue = EditorPreferences::wordwrap::get) @Parcelize private class UseMagnifier( @@ -266,7 +249,8 @@ private class UseMagnifier( override val title: Int = string.idepref_editor_use_magnifier_title, override val summary: Int? = string.idepref_editor_use_magnifier_summary, override val icon: Int? = drawable.ic_loupe, -) : SwitchPreference(setValue = ::useMagnifier::set, getValue = ::useMagnifier::get) +) : SwitchPreference(setValue = EditorPreferences::useMagnifier::set, + getValue = EditorPreferences::useMagnifier::get) @Parcelize private class AutoSave( @@ -274,7 +258,8 @@ private class AutoSave( override val title: Int = string.idepref_editor_autoSave_title, override val summary: Int? = string.idepref_editor_autoSave_summary, override val icon: Int? = drawable.ic_save, -) : SwitchPreference(setValue = ::autoSave::set, getValue = ::autoSave::get) +) : SwitchPreference(setValue = EditorPreferences::autoSave::set, + getValue = EditorPreferences::autoSave::get) @Parcelize private class CompletionsMatchLower( @@ -283,8 +268,8 @@ private class CompletionsMatchLower( override val summary: Int? = string.idepref_java_matchLower_summary, override val icon: Int? = drawable.ic_text_lower, ) : SwitchPreference( - setValue = ::completionsMatchLower::set, - getValue = ::completionsMatchLower::get + setValue = EditorPreferences::completionsMatchLower::set, + getValue = EditorPreferences::completionsMatchLower::get ) @Parcelize @@ -293,7 +278,8 @@ private class VisibiblePasswordFlag( override val title: Int = string.idepref_visiblePassword_title, override val summary: Int? = string.idepref_visiblePassword_summary, override val icon: Int? = drawable.ic_password_input, -) : SwitchPreference(setValue = ::visiblePasswordFlag::set, getValue = ::visiblePasswordFlag::get) +) : SwitchPreference(setValue = EditorPreferences::visiblePasswordFlag::set, + getValue = EditorPreferences::visiblePasswordFlag::get) @Parcelize private class UseICU( @@ -301,7 +287,8 @@ private class UseICU( override val title: Int = string.idepref_useIcu_title, override val summary: Int? = string.idepref_useIcu_summary, override val icon: Int? = drawable.ic_expand_selection, -) : SwitchPreference(setValue = ::useIcu::set, getValue = ::useIcu::get) +) : SwitchPreference(setValue = EditorPreferences::useIcu::set, + getValue = EditorPreferences::useIcu::get) @Parcelize private class UseCustomFont( @@ -309,7 +296,8 @@ private class UseCustomFont( override val title: Int = string.idepref_customFont_title, override val summary: Int? = string.idepref_customFont_summary, override val icon: Int? = drawable.ic_custom_font, -) : SwitchPreference(setValue = ::useCustomFont::set, getValue = ::useCustomFont::get) +) : SwitchPreference(setValue = EditorPreferences::useCustomFont::set, + getValue = EditorPreferences::useCustomFont::get) @Parcelize private class DeleteEmptyLines( @@ -317,7 +305,8 @@ private class DeleteEmptyLines( override val title: Int = R.string.idepref_deleteEmptyLines_title, override val summary: Int? = R.string.idepref_deleteEmptyLines_summary, override val icon: Int? = drawable.ic_backspace -) : SwitchPreference(setValue = ::deleteEmptyLines::set, getValue = ::deleteEmptyLines::get) +) : SwitchPreference(setValue = EditorPreferences::deleteEmptyLines::set, + getValue = EditorPreferences::deleteEmptyLines::get) @Parcelize private class DeleteTabs( @@ -326,7 +315,8 @@ private class DeleteTabs( override val summary: Int? = R.string.idepref_deleteTabs_summary, override val icon: Int? = drawable.ic_backspace ) : - SwitchPreference(setValue = ::deleteTabsOnBackspace::set, getValue = ::deleteTabsOnBackspace::get) + SwitchPreference(setValue = EditorPreferences::deleteTabsOnBackspace::set, + getValue = EditorPreferences::deleteTabsOnBackspace::get) @Parcelize private class StickyScrollEnabled( @@ -334,7 +324,8 @@ private class StickyScrollEnabled( override val title: Int = R.string.idepref_editor_stickScroll_title, override val summary: Int? = R.string.idepref_editor_stickyScroll_summary, override val icon: Int? = drawable.ic_sticky_scroll -) : SwitchPreference(setValue = ::stickyScrollEnabled::set, getValue = ::stickyScrollEnabled::get) +) : SwitchPreference(setValue = EditorPreferences::stickyScrollEnabled::set, + getValue = EditorPreferences::stickyScrollEnabled::get) @Parcelize private class PinLineNumbersEnabled( @@ -342,4 +333,5 @@ private class PinLineNumbersEnabled( override val title: Int = R.string.idepref_editor_pinLineNumbers_title, override val summary: Int? = R.string.idepref_editor_pinLineNumbers_summary, override val icon: Int? = drawable.ic_pin -) : SwitchPreference(setValue = ::pinLineNumbers::set, getValue = ::pinLineNumbers::get) +) : SwitchPreference(setValue = EditorPreferences::pinLineNumbers::set, + getValue = EditorPreferences::pinLineNumbers::get) diff --git a/app/src/main/java/com/itsaky/androidide/preferences/generalPrefExts.kt b/app/src/main/java/com/itsaky/androidide/preferences/generalPrefExts.kt index ad0bcb845..a7673fde6 100644 --- a/app/src/main/java/com/itsaky/androidide/preferences/generalPrefExts.kt +++ b/app/src/main/java/com/itsaky/androidide/preferences/generalPrefExts.kt @@ -22,18 +22,7 @@ import androidx.appcompat.app.AppCompatDelegate import androidx.core.content.ContextCompat import androidx.preference.Preference import com.itsaky.androidide.R -import com.itsaky.androidide.preferences.internal.CONFIRM_PROJECT_OPEN -import com.itsaky.androidide.preferences.internal.OPEN_PROJECTS -import com.itsaky.androidide.preferences.internal.SELECTED_LOCALE -import com.itsaky.androidide.preferences.internal.SELECTED_THEME -import com.itsaky.androidide.preferences.internal.TERMINAL_USE_SYSTEM_SHELL -import com.itsaky.androidide.preferences.internal.UI_MODE -import com.itsaky.androidide.preferences.internal.autoOpenProjects -import com.itsaky.androidide.preferences.internal.confirmProjectOpen -import com.itsaky.androidide.preferences.internal.selectedLocale -import com.itsaky.androidide.preferences.internal.selectedTheme -import com.itsaky.androidide.preferences.internal.uiMode -import com.itsaky.androidide.preferences.internal.useSystemShell +import com.itsaky.androidide.preferences.internal.GeneralPreferences import com.itsaky.androidide.resources.R.drawable import com.itsaky.androidide.resources.R.string import com.itsaky.androidide.resources.localization.LocaleProvider @@ -43,7 +32,7 @@ import kotlinx.parcelize.IgnoredOnParcel import kotlinx.parcelize.Parcelize @Parcelize -class GeneralPreferences( +class GeneralPreferencesScreen( override val key: String = "idepref_general", override val title: Int = string.title_general, override val summary: Int? = string.idepref_general_summary, @@ -98,7 +87,7 @@ class TerminalConfig( @Parcelize class UiMode( - override val key: String = UI_MODE, + override val key: String = GeneralPreferences.UI_MODE, override val title: Int = R.string.idepref_general_uiMode, override val summary: Int? = R.string.idepref_general_uiMode_summary, override val icon: Int? = R.drawable.ic_ui_mode @@ -109,7 +98,7 @@ class UiMode( override fun getEntries(preference: Preference): Array { val context = preference.context - val currentUiMode = uiMode + val currentUiMode = GeneralPreferences.uiMode return Array(3) { index -> val (label, mode) = when (index) { @@ -128,13 +117,13 @@ class UiMode( entry: PreferenceChoices.Entry?, position: Int ) { - uiMode = (entry?.data as? Int?) ?: AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM + GeneralPreferences.uiMode = (entry?.data as? Int?) ?: AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM } } @Parcelize class ThemeSelector( - override val key: String = SELECTED_THEME, + override val key: String = GeneralPreferences.SELECTED_THEME, override val title: Int = R.string.idepref_general_themeSelector_title, override val summary: Int? = R.string.idepref_general_themeSelector_summary, override val icon: Int? = R.drawable.ic_color_scheme @@ -161,13 +150,13 @@ class ThemeSelector( entry: PreferenceChoices.Entry?, position: Int ) { - selectedTheme = (entry?.data as? IDETheme?)?.name ?: IDETheme.DEFAULT.name + GeneralPreferences.selectedTheme = (entry?.data as? IDETheme?)?.name ?: IDETheme.DEFAULT.name } } @Parcelize class LocaleSelector( - override val key: String = SELECTED_LOCALE, + override val key: String = GeneralPreferences.SELECTED_LOCALE, override val title: Int = R.string.idepref_general_localeSelector_title, override val summary: Int? = R.string.idepref_general_localeSelector_summary, override val icon: Int? = R.drawable.ic_translate @@ -175,13 +164,13 @@ class LocaleSelector( override fun getEntries(preference: Preference): Array { val context = preference.context - val currentLocale = selectedLocale + val currentLocale = GeneralPreferences.selectedLocale val supportedLocales = LocaleProvider.SUPPORTED_LOCALES.keys.toList() return Array(supportedLocales.size + 1) { index -> if (index == 0) { PreferenceChoices.Entry( label = ContextCompat.getString(context, R.string.locale_system_default), - _isChecked = selectedLocale == null, + _isChecked = GeneralPreferences.selectedLocale == null, data = 0 ) } else { @@ -201,7 +190,7 @@ class LocaleSelector( entry: PreferenceChoices.Entry?, position: Int ) { - selectedLocale = entry?.data?.let { localeKey -> + GeneralPreferences.selectedLocale = entry?.data?.let { localeKey -> if (localeKey is Int) null else localeKey as String } } @@ -209,7 +198,7 @@ class LocaleSelector( @Parcelize class OpenLastProject( - override val key: String = OPEN_PROJECTS, + override val key: String = GeneralPreferences.OPEN_PROJECTS, override val title: Int = string.title_open_projects, override val summary: Int? = string.msg_open_projects, override val icon: Int? = drawable.ic_open_project @@ -217,19 +206,20 @@ class OpenLastProject( override fun onCreatePreference(context: Context): Preference { val pref = super.onCreatePreference(context) as androidx.preference.SwitchPreference - pref.isChecked = autoOpenProjects + pref.isChecked = GeneralPreferences.autoOpenProjects return pref } override fun onPreferenceChanged(preference: Preference, newValue: Any?): Boolean { - autoOpenProjects = newValue as Boolean? ?: autoOpenProjects + GeneralPreferences.autoOpenProjects = newValue as Boolean? + ?: GeneralPreferences.autoOpenProjects return true } } @Parcelize class ConfirmProjectOpen( - override val key: String = CONFIRM_PROJECT_OPEN, + override val key: String = GeneralPreferences.CONFIRM_PROJECT_OPEN, override val title: Int = string.title_confirm_project_open, override val summary: Int? = string.msg_confirm_project_open, override val icon: Int? = drawable.ic_open_project @@ -237,19 +227,20 @@ class ConfirmProjectOpen( override fun onCreatePreference(context: Context): Preference { val pref = super.onCreatePreference(context) as androidx.preference.SwitchPreference - pref.isChecked = confirmProjectOpen + pref.isChecked = GeneralPreferences.confirmProjectOpen return pref } override fun onPreferenceChanged(preference: Preference, newValue: Any?): Boolean { - confirmProjectOpen = newValue as Boolean? ?: confirmProjectOpen + GeneralPreferences.confirmProjectOpen = newValue as Boolean? + ?: GeneralPreferences.confirmProjectOpen return true } } @Parcelize class UseSytemShell( - override val key: String = TERMINAL_USE_SYSTEM_SHELL, + override val key: String = GeneralPreferences.TERMINAL_USE_SYSTEM_SHELL, override val title: Int = string.title_default_shell, override val summary: Int? = string.msg_default_shell, override val icon: Int? = drawable.ic_bash_commands @@ -257,12 +248,12 @@ class UseSytemShell( override fun onCreatePreference(context: Context): Preference { val pref = super.onCreatePreference(context) as androidx.preference.SwitchPreference - pref.isChecked = useSystemShell + pref.isChecked = GeneralPreferences.useSystemShell return pref } override fun onPreferenceChanged(preference: Preference, newValue: Any?): Boolean { - useSystemShell = newValue as Boolean? ?: useSystemShell + GeneralPreferences.useSystemShell = newValue as Boolean? ?: GeneralPreferences.useSystemShell return true } } diff --git a/app/src/main/java/com/itsaky/androidide/preferences/javaPrefExts.kt b/app/src/main/java/com/itsaky/androidide/preferences/javaPrefExts.kt index 2c2bdb702..9dcdc074e 100644 --- a/app/src/main/java/com/itsaky/androidide/preferences/javaPrefExts.kt +++ b/app/src/main/java/com/itsaky/androidide/preferences/javaPrefExts.kt @@ -18,10 +18,7 @@ package com.itsaky.androidide.preferences import com.itsaky.androidide.R -import com.itsaky.androidide.preferences.internal.GOOGLE_CODE_STYLE -import com.itsaky.androidide.preferences.internal.JAVA_DIAGNOSTICS_ENABLED -import com.itsaky.androidide.preferences.internal.googleCodeStyle -import com.itsaky.androidide.preferences.internal.isJavaDiagnosticsEnabled +import com.itsaky.androidide.preferences.internal.JavaPreferences import com.itsaky.androidide.resources.R.drawable import com.itsaky.androidide.resources.R.string import kotlinx.parcelize.Parcelize @@ -32,6 +29,7 @@ internal class JavaCodeConfigurations( override val title: Int = string.idepref_editor_category_java, override val children: List = mutableListOf(), ) : IPreferenceGroup() { + init { addPreference(GoogleCodeStyle()) addPreference(JavaDiagnosticsEnabled()) @@ -41,20 +39,21 @@ internal class JavaCodeConfigurations( /** @author Akash Yadav */ @Parcelize private class GoogleCodeStyle( - override val key: String = GOOGLE_CODE_STYLE, + override val key: String = JavaPreferences.GOOGLE_CODE_STYLE, override val title: Int = string.idepref_java_useGoogleStyle_title, override val summary: Int? = string.idepref_java_useGoogleStyle_summary, override val icon: Int? = drawable.ic_format_code, -) : SwitchPreference(getValue = ::googleCodeStyle::get, setValue = ::googleCodeStyle::set) +) : SwitchPreference(getValue = JavaPreferences::googleCodeStyle::get, + setValue = JavaPreferences::googleCodeStyle::set) @Parcelize private class JavaDiagnosticsEnabled( - override val key: String = JAVA_DIAGNOSTICS_ENABLED, + override val key: String = JavaPreferences.JAVA_DIAGNOSTICS_ENABLED, override val title: Int = R.string.idepref_java_diagnosticEnabled_title, override val summary: Int? = R.string.idepref_java_diagnosticsEnabled_summary, override val icon: Int? = drawable.ic_compilation_error ) : SwitchPreference( - getValue = ::isJavaDiagnosticsEnabled::get, - setValue = ::isJavaDiagnosticsEnabled::set + getValue = JavaPreferences::isJavaDiagnosticsEnabled::get, + setValue = JavaPreferences::isJavaDiagnosticsEnabled::set ) diff --git a/app/src/main/java/com/itsaky/androidide/preferences/rootPrefExts.kt b/app/src/main/java/com/itsaky/androidide/preferences/rootPrefExts.kt index ee95c1634..1d3ecd969 100644 --- a/app/src/main/java/com/itsaky/androidide/preferences/rootPrefExts.kt +++ b/app/src/main/java/com/itsaky/androidide/preferences/rootPrefExts.kt @@ -35,8 +35,8 @@ class ConfigurationPreferences( ) : IPreferenceGroup() { init { - addPreference(GeneralPreferences()) - addPreference(EditorPreferences()) + addPreference(GeneralPreferencesScreen()) + addPreference(EditorPreferencesScreen()) addPreference(BuildAndRunPreferences()) addPreference(TermuxPreferences()) } @@ -50,7 +50,7 @@ class PrivacyPreferences( ) : IPreferenceGroup() { init { - addPreference(StatPreferences()) + addPreference(StatPreferencesScreen()) } } diff --git a/app/src/main/java/com/itsaky/androidide/preferences/statPrefExts.kt b/app/src/main/java/com/itsaky/androidide/preferences/statPrefExts.kt index 5a0225b7f..b554080d6 100644 --- a/app/src/main/java/com/itsaky/androidide/preferences/statPrefExts.kt +++ b/app/src/main/java/com/itsaky/androidide/preferences/statPrefExts.kt @@ -19,15 +19,14 @@ package com.itsaky.androidide.preferences import android.content.Context import androidx.preference.Preference -import com.itsaky.androidide.preferences.internal.STAT_OPT_IN -import com.itsaky.androidide.preferences.internal.statOptIn +import com.itsaky.androidide.preferences.internal.StatPreferences import com.itsaky.androidide.resources.R import com.itsaky.androidide.stats.AndroidIDEStats import com.itsaky.androidide.stats.StatUploadWorker import kotlinx.parcelize.Parcelize @Parcelize -class StatPreferences( +class StatPreferencesScreen( override val key: String = "idepref_stats", override val title: Int = R.string.title_androidide_statistics, override val summary: Int? = R.string.summary_anonymous_usage_stats, @@ -42,11 +41,12 @@ class StatPreferences( @Parcelize class StatsCollection( - override val key: String = STAT_OPT_IN, + override val key: String = StatPreferences.STAT_OPT_IN, override val title: Int = R.string.idepref_stats_optIn_title, override val summary: Int? = R.string.idepref_stats_optIn_summary, override val icon: Int? = null -) : SwitchPreference(setValue = ::statOptIn::set, getValue = ::statOptIn::get) +) : SwitchPreference(setValue = StatPreferences::statOptIn::set, + getValue = StatPreferences::statOptIn::get) @Parcelize class PreviewDataPreferences( diff --git a/app/src/main/java/com/itsaky/androidide/preferences/xmlPrefExts.kt b/app/src/main/java/com/itsaky/androidide/preferences/xmlPrefExts.kt index 17cfb01b3..784b86f27 100644 --- a/app/src/main/java/com/itsaky/androidide/preferences/xmlPrefExts.kt +++ b/app/src/main/java/com/itsaky/androidide/preferences/xmlPrefExts.kt @@ -18,47 +18,19 @@ package com.itsaky.androidide.preferences import androidx.preference.Preference -import com.itsaky.androidide.preferences.internal.CLOSING_BRACKET_NEW_LINE -import com.itsaky.androidide.preferences.internal.EMPTY_ELEMENTS_BEHAVIOR -import com.itsaky.androidide.preferences.internal.INSERT_FINAL_NEW_LINE -import com.itsaky.androidide.preferences.internal.JOIN_CDATA_LINES -import com.itsaky.androidide.preferences.internal.JOIN_COMMENT_LINES -import com.itsaky.androidide.preferences.internal.JOIN_CONTENT_LINES -import com.itsaky.androidide.preferences.internal.MAX_LINE_WIDTH -import com.itsaky.androidide.preferences.internal.PRESERVED_NEW_LINES -import com.itsaky.androidide.preferences.internal.PRESERVE_ATTRIBUTE_LINE_BREAKS -import com.itsaky.androidide.preferences.internal.PRESERVE_EMPTY_CONTENT -import com.itsaky.androidide.preferences.internal.SPACE_BEFORE_EMPTY_CLOSE_TAG -import com.itsaky.androidide.preferences.internal.SPLIT_ATTRIBUTES -import com.itsaky.androidide.preferences.internal.SPLIT_ATTRIBUTES_INDENT_SIZE -import com.itsaky.androidide.preferences.internal.TRIM_FINAL_NEW_LINE -import com.itsaky.androidide.preferences.internal.TRIM_TRAILING_WHITESPACE -import com.itsaky.androidide.preferences.internal.closingBracketNewLine -import com.itsaky.androidide.preferences.internal.emptyElementsBehavior -import com.itsaky.androidide.preferences.internal.insertFinalNewLine -import com.itsaky.androidide.preferences.internal.joinCDataLines -import com.itsaky.androidide.preferences.internal.joinCommentLines -import com.itsaky.androidide.preferences.internal.joinContentLines -import com.itsaky.androidide.preferences.internal.maxLineWidth -import com.itsaky.androidide.preferences.internal.preserveAttributeLineBreaks -import com.itsaky.androidide.preferences.internal.preserveEmptyContent -import com.itsaky.androidide.preferences.internal.preservedNewLines -import com.itsaky.androidide.preferences.internal.spaceBeforeEmptyCloseTag -import com.itsaky.androidide.preferences.internal.splitAttributes -import com.itsaky.androidide.preferences.internal.splitAttributesIndentSize -import com.itsaky.androidide.preferences.internal.trimFinalNewLine -import com.itsaky.androidide.preferences.internal.trimTrailingWhitespace +import com.itsaky.androidide.preferences.internal.XmlPreferences import com.itsaky.androidide.resources.R.string import kotlinx.parcelize.IgnoredOnParcel import kotlinx.parcelize.Parcelize import org.eclipse.lemminx.dom.builder.EmptyElements @Parcelize -class XMLPreferences( +class XMLPreferencesScreen( override val key: String = "idepref_editor_xml", override val title: Int = string.xml, override val children: List = mutableListOf() ) : IPreferenceGroup() { + init { addPreference(XMLFormattingOptions()) } @@ -71,6 +43,7 @@ private class XMLFormattingOptions( override val summary: Int? = string.xml_formatting_options_summary, override val children: List = mutableListOf() ) : IPreferenceScreen() { + init { addPreference(TrimFinalNewLines()) addPreference(InsertFinalNewLine()) @@ -92,137 +65,144 @@ private class XMLFormattingOptions( @Parcelize private class TrimFinalNewLines( - override val key: String = TRIM_FINAL_NEW_LINE, + override val key: String = XmlPreferences.TRIM_FINAL_NEW_LINE, override val title: Int = string.idepref_xml_trimFinalNewLine_title, override val summary: Int? = string.idepref_xml_trimFinalNewLine_summary -) : SwitchPreference(setValue = ::trimFinalNewLine::set, getValue = ::trimFinalNewLine::get) +) : SwitchPreference(setValue = XmlPreferences::trimFinalNewLine::set, + getValue = XmlPreferences::trimFinalNewLine::get) @Parcelize private class InsertFinalNewLine( - override val key: String = INSERT_FINAL_NEW_LINE, + override val key: String = XmlPreferences.INSERT_FINAL_NEW_LINE, override val title: Int = string.idepref_xml_insertFinalNewLine_title, override val summary: Int? = string.idepref_xml_insertFinalNewLine_summary -) : SwitchPreference(setValue = ::insertFinalNewLine::set, getValue = ::insertFinalNewLine::get) +) : SwitchPreference(setValue = XmlPreferences::insertFinalNewLine::set, + getValue = XmlPreferences::insertFinalNewLine::get) @Parcelize private class SplitAttributes( - override val key: String = SPLIT_ATTRIBUTES, + override val key: String = XmlPreferences.SPLIT_ATTRIBUTES, override val title: Int = string.idepref_xml_splitAttributes_title, override val summary: Int? = string.idepref_xml_splitAttributes_summary -) : SwitchPreference(setValue = ::splitAttributes::set, getValue = ::splitAttributes::get) +) : SwitchPreference(setValue = XmlPreferences::splitAttributes::set, + getValue = XmlPreferences::splitAttributes::get) @Parcelize private class JoinCDataLines( - override val key: String = JOIN_CDATA_LINES, + override val key: String = XmlPreferences.JOIN_CDATA_LINES, override val title: Int = string.idepref_xml_joinCDataLines_title, override val summary: Int? = string.idepref_xml_joinCDataLines_summary -) : SwitchPreference(setValue = ::joinCDataLines::set, getValue = ::joinCDataLines::get) +) : SwitchPreference(setValue = XmlPreferences::joinCDataLines::set, + getValue = XmlPreferences::joinCDataLines::get) @Parcelize private class JoinCommentLines( - override val key: String = JOIN_COMMENT_LINES, + override val key: String = XmlPreferences.JOIN_COMMENT_LINES, override val title: Int = string.idepref_xml_joinComment_title, override val summary: Int? = string.idepref_xml_joinComment_summary -) : SwitchPreference(setValue = ::joinCommentLines::set, getValue = ::joinCommentLines::get) +) : SwitchPreference(setValue = XmlPreferences::joinCommentLines::set, + getValue = XmlPreferences::joinCommentLines::get) @Parcelize private class JoinContentLines( - override val key: String = JOIN_CONTENT_LINES, + override val key: String = XmlPreferences.JOIN_CONTENT_LINES, override val title: Int = string.idepref_xml_joinContent_title, override val summary: Int? = string.idepref_xml_joinContent_summary -) : SwitchPreference(setValue = ::joinContentLines::set, getValue = ::joinContentLines::get) +) : SwitchPreference(setValue = XmlPreferences::joinContentLines::set, + getValue = XmlPreferences::joinContentLines::get) @Parcelize private class SpaceBeforeEmptyCloseTag( - override val key: String = SPACE_BEFORE_EMPTY_CLOSE_TAG, + override val key: String = XmlPreferences.SPACE_BEFORE_EMPTY_CLOSE_TAG, override val title: Int = string.idepref_xml_spaceBeforeEmptyClose_title, override val summary: Int? = string.idepref_xml_spaceBeforeEmptyClose_summary ) : SwitchPreference( - setValue = ::spaceBeforeEmptyCloseTag::set, - getValue = ::spaceBeforeEmptyCloseTag::get + setValue = XmlPreferences::spaceBeforeEmptyCloseTag::set, + getValue = XmlPreferences::spaceBeforeEmptyCloseTag::get ) @Parcelize private class PreserveEmptyContent( - override val key: String = PRESERVE_EMPTY_CONTENT, + override val key: String = XmlPreferences.PRESERVE_EMPTY_CONTENT, override val title: Int = string.idepref_xml_preserveEmptyContent_title, override val summary: Int? = string.idepref_xml_preserveEmptyContent_summary ) : - SwitchPreference(setValue = ::preserveEmptyContent::set, getValue = ::preserveEmptyContent::get) + SwitchPreference(setValue = XmlPreferences::preserveEmptyContent::set, + getValue = XmlPreferences::preserveEmptyContent::get) @Parcelize private class PreserveAttributeLineBreaks( - override val key: String = PRESERVE_ATTRIBUTE_LINE_BREAKS, + override val key: String = XmlPreferences.PRESERVE_ATTRIBUTE_LINE_BREAKS, override val title: Int = string.idepref_xml_preserveAttrLineBreaks_title, override val summary: Int? = string.idepref_xml_preserveAttrLineBreaks_summary ) : SwitchPreference( - setValue = ::preserveAttributeLineBreaks::set, - getValue = ::preserveAttributeLineBreaks::get + setValue = XmlPreferences::preserveAttributeLineBreaks::set, + getValue = XmlPreferences::preserveAttributeLineBreaks::get ) @Parcelize private class ClosingBracketNewLine( - override val key: String = CLOSING_BRACKET_NEW_LINE, + override val key: String = XmlPreferences.CLOSING_BRACKET_NEW_LINE, override val title: Int = string.idepref_xml_closingBrackNewLine_title, override val summary: Int? = string.idepref_xml_closingBrackNewLine_summary ) : SwitchPreference( - setValue = ::closingBracketNewLine::set, - getValue = ::closingBracketNewLine::get + setValue = XmlPreferences::closingBracketNewLine::set, + getValue = XmlPreferences::closingBracketNewLine::get ) @Parcelize private class TrimTrailingWhitespace( - override val key: String = TRIM_TRAILING_WHITESPACE, + override val key: String = XmlPreferences.TRIM_TRAILING_WHITESPACE, override val title: Int = string.idepref_xml_trimTrailingWs_title, override val summary: Int? = string.idepref_xml_trimTrailingWs_summary ) : SwitchPreference( - setValue = ::trimTrailingWhitespace::set, - getValue = ::trimTrailingWhitespace::get + setValue = XmlPreferences::trimTrailingWhitespace::set, + getValue = XmlPreferences::trimTrailingWhitespace::get ) @Parcelize private class MaxLineWidth( - override val key: String = MAX_LINE_WIDTH, + override val key: String = XmlPreferences.MAX_LINE_WIDTH, override val title: Int = string.idepref_maxLineWidth_title, override val summary: Int? = string.idepref_maxLineWidth_summary ) : NumberInputEditTextPreference( hint = string.idepref_maxLineWidth_title, - setValue = ::maxLineWidth::set, - getValue = ::maxLineWidth::get + setValue = XmlPreferences::maxLineWidth::set, + getValue = XmlPreferences::maxLineWidth::get ) @Parcelize private class PreservedNewLines( - override val key: String = PRESERVED_NEW_LINES, + override val key: String = XmlPreferences.PRESERVED_NEW_LINES, override val title: Int = string.idepref_preservedNewLines_title, override val summary: Int? = string.idepref_preservedNewLines_summary ) : NumberInputEditTextPreference( hint = string.idepref_preservedNewLines_title, - setValue = ::preservedNewLines::set, - getValue = ::preservedNewLines::get + setValue = XmlPreferences::preservedNewLines::set, + getValue = XmlPreferences::preservedNewLines::get ) @Parcelize private class SplitAttributesIndentSize( - override val key: String = SPLIT_ATTRIBUTES_INDENT_SIZE, + override val key: String = XmlPreferences.SPLIT_ATTRIBUTES_INDENT_SIZE, override val title: Int = string.idepref_splitAttrIndentSize_title, override val summary: Int? = string.idepref_splitAttrIndentSize_summary ) : NumberInputEditTextPreference( hint = string.idepref_splitAttrIndentSize_title, - setValue = ::splitAttributesIndentSize::set, - getValue = ::splitAttributesIndentSize::get + setValue = XmlPreferences::splitAttributesIndentSize::set, + getValue = XmlPreferences::splitAttributesIndentSize::get ) @Parcelize private class EmptyElementsBehavior( - override val key: String = EMPTY_ELEMENTS_BEHAVIOR, + override val key: String = XmlPreferences.EMPTY_ELEMENTS_BEHAVIOR, override val title: Int = string.idepref_emptyElements_title, override val summary: Int? = string.idepref_emptyElements_summary ) : SingleChoicePreference() { @@ -232,7 +212,7 @@ private class EmptyElementsBehavior( override fun getEntries(preference: Preference): Array { val entries = EmptyElements.entries - val currentBehavior = EmptyElements.valueOf(emptyElementsBehavior) + val currentBehavior = EmptyElements.valueOf(XmlPreferences.emptyElementsBehavior) return Array(entries.size) { index -> PreferenceChoices.Entry( @@ -248,6 +228,7 @@ private class EmptyElementsBehavior( entry: PreferenceChoices.Entry?, position: Int ) { - emptyElementsBehavior = (entry?.data as? EmptyElements?)?.toString() ?: "Collapse" + XmlPreferences.emptyElementsBehavior = (entry?.data as? EmptyElements?)?.toString() + ?: "Collapse" } } diff --git a/app/src/main/java/com/itsaky/androidide/services/builder/GradleBuildService.kt b/app/src/main/java/com/itsaky/androidide/services/builder/GradleBuildService.kt index e65b91188..1bb3d211f 100644 --- a/app/src/main/java/com/itsaky/androidide/services/builder/GradleBuildService.kt +++ b/app/src/main/java/com/itsaky/androidide/services/builder/GradleBuildService.kt @@ -32,14 +32,8 @@ import com.itsaky.androidide.R.* import com.itsaky.androidide.app.BaseApplication import com.itsaky.androidide.lookup.Lookup import com.itsaky.androidide.managers.ToolsManager -import com.itsaky.androidide.preferences.internal.isBuildCacheEnabled -import com.itsaky.androidide.preferences.internal.isDebugEnabled -import com.itsaky.androidide.preferences.internal.isInfoEnabled -import com.itsaky.androidide.preferences.internal.isOfflineEnabled -import com.itsaky.androidide.preferences.internal.isScanEnabled -import com.itsaky.androidide.preferences.internal.isStacktraceEnabled -import com.itsaky.androidide.preferences.internal.isWarningModeAllEnabled -import com.itsaky.androidide.preferences.logsenderEnabled +import com.itsaky.androidide.preferences.internal.BuildPreferences +import com.itsaky.androidide.preferences.internal.DevOpsPreferences import com.itsaky.androidide.projects.ProjectManagerImpl import com.itsaky.androidide.projects.builder.BuildService import com.itsaky.androidide.resources.R @@ -292,27 +286,27 @@ class GradleBuildService : Service(), BuildService, IToolingApiClient, // Override AAPT2 binary // The one downloaded from Maven is not built for Android extraArgs.add("-Pandroid.aapt2FromMavenOverride=" + Environment.AAPT2.absolutePath) - extraArgs.add("-P${PROPERTY_LOGSENDER_ENABLED}=${logsenderEnabled}") - if (isStacktraceEnabled) { + extraArgs.add("-P${PROPERTY_LOGSENDER_ENABLED}=${DevOpsPreferences.logsenderEnabled}") + if (BuildPreferences.isStacktraceEnabled) { extraArgs.add("--stacktrace") } - if (isInfoEnabled) { + if (BuildPreferences.isInfoEnabled) { extraArgs.add("--info") } - if (isDebugEnabled) { + if (BuildPreferences.isDebugEnabled) { extraArgs.add("--debug") } - if (isScanEnabled) { + if (BuildPreferences.isScanEnabled) { extraArgs.add("--scan") } - if (isWarningModeAllEnabled) { + if (BuildPreferences.isWarningModeAllEnabled) { extraArgs.add("--warning-mode") extraArgs.add("all") } - if (isBuildCacheEnabled) { + if (BuildPreferences.isBuildCacheEnabled) { extraArgs.add("--build-cache") } - if (isOfflineEnabled) { + if (BuildPreferences.isOfflineEnabled) { extraArgs.add("--offline") } return CompletableFuture.completedFuture(extraArgs) diff --git a/app/src/main/java/com/itsaky/androidide/services/builder/util.kt b/app/src/main/java/com/itsaky/androidide/services/builder/util.kt index 4305ae2b2..1c012c90c 100644 --- a/app/src/main/java/com/itsaky/androidide/services/builder/util.kt +++ b/app/src/main/java/com/itsaky/androidide/services/builder/util.kt @@ -17,7 +17,7 @@ package com.itsaky.androidide.services.builder -import com.itsaky.androidide.preferences.internal.gradleInstallationDir +import com.itsaky.androidide.preferences.internal.BuildPreferences import com.itsaky.androidide.tooling.api.messages.GradleDistributionParams /** @@ -25,9 +25,9 @@ import com.itsaky.androidide.tooling.api.messages.GradleDistributionParams */ val gradleDistributionParams: GradleDistributionParams get() { - if (gradleInstallationDir.isBlank()) { + if (BuildPreferences.gradleInstallationDir.isBlank()) { return GradleDistributionParams.WRAPPER } - return GradleDistributionParams.forInstallationDir(gradleInstallationDir) + return GradleDistributionParams.forInstallationDir(BuildPreferences.gradleInstallationDir) } \ No newline at end of file diff --git a/app/src/main/java/com/itsaky/androidide/services/log/LogReceiverService.kt b/app/src/main/java/com/itsaky/androidide/services/log/LogReceiverService.kt index 3774fb499..623cdf7ec 100644 --- a/app/src/main/java/com/itsaky/androidide/services/log/LogReceiverService.kt +++ b/app/src/main/java/com/itsaky/androidide/services/log/LogReceiverService.kt @@ -24,7 +24,7 @@ import androidx.localbroadcastmanager.content.LocalBroadcastManager import com.itsaky.androidide.logsender.LogSender import com.itsaky.androidide.lookup.Lookup import com.itsaky.androidide.models.LogLine -import com.itsaky.androidide.preferences.logsenderEnabled +import com.itsaky.androidide.preferences.internal.DevOpsPreferences import org.slf4j.LoggerFactory import java.util.concurrent.Executors import java.util.concurrent.TimeUnit @@ -65,7 +65,7 @@ class LogReceiverService : Service() { override fun onBind(intent: Intent?): IBinder? { log.debug("Received bind request: {}", intent) - if (!logsenderEnabled) { + if (!DevOpsPreferences.logsenderEnabled) { log.debug("Rejecting bind request. LogReceiver is disabled.") return null } diff --git a/app/src/main/java/com/itsaky/androidide/ui/CodeEditorView.kt b/app/src/main/java/com/itsaky/androidide/ui/CodeEditorView.kt index 856f3781e..620d9df40 100644 --- a/app/src/main/java/com/itsaky/androidide/ui/CodeEditorView.kt +++ b/app/src/main/java/com/itsaky/androidide/ui/CodeEditorView.kt @@ -41,37 +41,7 @@ import com.itsaky.androidide.lsp.api.ILanguageServerRegistry import com.itsaky.androidide.lsp.java.JavaLanguageServer import com.itsaky.androidide.lsp.xml.XMLLanguageServer import com.itsaky.androidide.models.Range -import com.itsaky.androidide.preferences.internal.DELETE_EMPTY_LINES -import com.itsaky.androidide.preferences.internal.DELETE_TABS_ON_BACKSPACE -import com.itsaky.androidide.preferences.internal.FLAG_LINE_BREAK -import com.itsaky.androidide.preferences.internal.FLAG_PASSWORD -import com.itsaky.androidide.preferences.internal.FLAG_WS_EMPTY_LINE -import com.itsaky.androidide.preferences.internal.FLAG_WS_INNER -import com.itsaky.androidide.preferences.internal.FLAG_WS_LEADING -import com.itsaky.androidide.preferences.internal.FLAG_WS_TRAILING -import com.itsaky.androidide.preferences.internal.FONT_LIGATURES -import com.itsaky.androidide.preferences.internal.FONT_SIZE -import com.itsaky.androidide.preferences.internal.PIN_LINE_NUMBERS -import com.itsaky.androidide.preferences.internal.STICKY_SCROLL_ENABLED -import com.itsaky.androidide.preferences.internal.USE_CUSTOM_FONT -import com.itsaky.androidide.preferences.internal.USE_ICU -import com.itsaky.androidide.preferences.internal.USE_MAGNIFER -import com.itsaky.androidide.preferences.internal.WORD_WRAP -import com.itsaky.androidide.preferences.internal.deleteEmptyLines -import com.itsaky.androidide.preferences.internal.deleteTabsOnBackspace -import com.itsaky.androidide.preferences.internal.drawEmptyLineWs -import com.itsaky.androidide.preferences.internal.drawInnerWs -import com.itsaky.androidide.preferences.internal.drawLeadingWs -import com.itsaky.androidide.preferences.internal.drawLineBreak -import com.itsaky.androidide.preferences.internal.drawTrailingWs -import com.itsaky.androidide.preferences.internal.fontLigatures -import com.itsaky.androidide.preferences.internal.fontSize -import com.itsaky.androidide.preferences.internal.pinLineNumbers -import com.itsaky.androidide.preferences.internal.stickyScrollEnabled -import com.itsaky.androidide.preferences.internal.useCustomFont -import com.itsaky.androidide.preferences.internal.useIcu -import com.itsaky.androidide.preferences.internal.useMagnifier -import com.itsaky.androidide.preferences.internal.wordwrap +import com.itsaky.androidide.preferences.internal.EditorPreferences import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE import com.itsaky.androidide.tasks.cancelIfActive import com.itsaky.androidide.tasks.runOnUiThread @@ -376,11 +346,11 @@ class CodeEditorView( } private fun onMagnifierPrefChanged() { - binding.editor.getComponent(Magnifier::class.java).isEnabled = useMagnifier + binding.editor.getComponent(Magnifier::class.java).isEnabled = EditorPreferences.useMagnifier } private fun onWordwrapPrefChanged() { - val enabled = wordwrap + val enabled = EditorPreferences.wordwrap binding.editor.isWordwrap = enabled } @@ -390,31 +360,31 @@ class CodeEditorView( private fun onPrintingFlagsPrefChanged() { var flags = 0 - if (drawLeadingWs) { + if (EditorPreferences.drawLeadingWs) { flags = flags or CodeEditor.FLAG_DRAW_WHITESPACE_LEADING } - if (drawTrailingWs) { + if (EditorPreferences.drawTrailingWs) { flags = flags or CodeEditor.FLAG_DRAW_WHITESPACE_TRAILING } - if (drawInnerWs) { + if (EditorPreferences.drawInnerWs) { flags = flags or CodeEditor.FLAG_DRAW_WHITESPACE_INNER } - if (drawEmptyLineWs) { + if (EditorPreferences.drawEmptyLineWs) { flags = flags or CodeEditor.FLAG_DRAW_WHITESPACE_FOR_EMPTY_LINE } - if (drawLineBreak) { + if (EditorPreferences.drawLineBreak) { flags = flags or CodeEditor.FLAG_DRAW_LINE_SEPARATOR } binding.editor.nonPrintablePaintingFlags = flags } private fun onFontLigaturesPrefChanged() { - val enabled = fontLigatures + val enabled = EditorPreferences.fontLigatures binding.editor.isLigatureEnabled = enabled } private fun onFontSizePrefChanged() { - var textSize = fontSize + var textSize = EditorPreferences.fontSize if (textSize < 6 || textSize > 32) { textSize = 14f } @@ -422,29 +392,29 @@ class CodeEditorView( } private fun onUseIcuPrefChanged() { - binding.editor.props.useICULibToSelectWords = useIcu + binding.editor.props.useICULibToSelectWords = EditorPreferences.useIcu } private fun onCustomFontPrefChanged() { - val state = useCustomFont + val state = EditorPreferences.useCustomFont binding.editor.typefaceText = customOrJBMono(state) binding.editor.typefaceLineNumber = customOrJBMono(state) } private fun onDeleteEmptyLinesPrefChanged() { - binding.editor.props.deleteEmptyLineFast = deleteEmptyLines + binding.editor.props.deleteEmptyLineFast = EditorPreferences.deleteEmptyLines } private fun onDeleteTabsPrefChanged() { - binding.editor.props.deleteMultiSpaces = if (deleteTabsOnBackspace) -1 else 1 + binding.editor.props.deleteMultiSpaces = if (EditorPreferences.deleteTabsOnBackspace) -1 else 1 } private fun onStickyScrollEnabeldPrefChanged() { - binding.editor.props.stickyScroll = stickyScrollEnabled + binding.editor.props.stickyScroll = EditorPreferences.stickyScrollEnabled } private fun onPinLineNumbersPrefChanged() { - binding.editor.setPinLineNumber(pinLineNumbers) + binding.editor.setPinLineNumber(EditorPreferences.pinLineNumbers) } /** @@ -476,24 +446,24 @@ class CodeEditorView( BaseApplication.getBaseInstance().prefManager when (event.key) { - FONT_SIZE -> onFontSizePrefChanged() - FONT_LIGATURES -> onFontLigaturesPrefChanged() + EditorPreferences.FONT_SIZE -> onFontSizePrefChanged() + EditorPreferences.FONT_LIGATURES -> onFontLigaturesPrefChanged() - FLAG_LINE_BREAK, - FLAG_WS_INNER, - FLAG_WS_EMPTY_LINE, - FLAG_WS_LEADING, - FLAG_WS_TRAILING -> onPrintingFlagsPrefChanged() + EditorPreferences.FLAG_LINE_BREAK, + EditorPreferences.FLAG_WS_INNER, + EditorPreferences.FLAG_WS_EMPTY_LINE, + EditorPreferences.FLAG_WS_LEADING, + EditorPreferences.FLAG_WS_TRAILING -> onPrintingFlagsPrefChanged() - FLAG_PASSWORD -> onInputTypePrefChanged() - WORD_WRAP -> onWordwrapPrefChanged() - USE_MAGNIFER -> onMagnifierPrefChanged() - USE_ICU -> onUseIcuPrefChanged() - USE_CUSTOM_FONT -> onCustomFontPrefChanged() - DELETE_EMPTY_LINES -> onDeleteEmptyLinesPrefChanged() - DELETE_TABS_ON_BACKSPACE -> onDeleteTabsPrefChanged() - STICKY_SCROLL_ENABLED -> onStickyScrollEnabeldPrefChanged() - PIN_LINE_NUMBERS -> onPinLineNumbersPrefChanged() + EditorPreferences.FLAG_PASSWORD -> onInputTypePrefChanged() + EditorPreferences.WORD_WRAP -> onWordwrapPrefChanged() + EditorPreferences.USE_MAGNIFER -> onMagnifierPrefChanged() + EditorPreferences.USE_ICU -> onUseIcuPrefChanged() + EditorPreferences.USE_CUSTOM_FONT -> onCustomFontPrefChanged() + EditorPreferences.DELETE_EMPTY_LINES -> onDeleteEmptyLinesPrefChanged() + EditorPreferences.DELETE_TABS_ON_BACKSPACE -> onDeleteTabsPrefChanged() + EditorPreferences.STICKY_SCROLL_ENABLED -> onStickyScrollEnabeldPrefChanged() + EditorPreferences.PIN_LINE_NUMBERS -> onPinLineNumbersPrefChanged() } } diff --git a/app/src/main/java/com/itsaky/androidide/ui/themes/ThemeManager.kt b/app/src/main/java/com/itsaky/androidide/ui/themes/ThemeManager.kt index 5bb9847e8..947b9152a 100644 --- a/app/src/main/java/com/itsaky/androidide/ui/themes/ThemeManager.kt +++ b/app/src/main/java/com/itsaky/androidide/ui/themes/ThemeManager.kt @@ -19,7 +19,7 @@ package com.itsaky.androidide.ui.themes import android.app.Activity import com.google.auto.service.AutoService -import com.itsaky.androidide.preferences.internal.selectedTheme +import com.itsaky.androidide.preferences.internal.GeneralPreferences import com.itsaky.androidide.utils.isSystemInDarkMode /** @@ -55,6 +55,6 @@ class ThemeManager : IThemeManager { * Get the currently selected theme. */ override fun getCurrentTheme(): IDETheme { - return selectedTheme?.let { IDETheme.valueOf(it) } ?: IDETheme.DEFAULT + return GeneralPreferences.selectedTheme?.let { IDETheme.valueOf(it) } ?: IDETheme.DEFAULT } } \ No newline at end of file diff --git a/editor/src/main/java/com/itsaky/androidide/editor/adapters/CompletionListAdapter.kt b/editor/src/main/java/com/itsaky/androidide/editor/adapters/CompletionListAdapter.kt index 9a9a37b22..a43471c8c 100755 --- a/editor/src/main/java/com/itsaky/androidide/editor/adapters/CompletionListAdapter.kt +++ b/editor/src/main/java/com/itsaky/androidide/editor/adapters/CompletionListAdapter.kt @@ -37,7 +37,7 @@ import com.itsaky.androidide.lsp.models.CompletionItemKind.INTERFACE import com.itsaky.androidide.lsp.models.CompletionItemKind.METHOD import com.itsaky.androidide.lsp.models.MemberCompletionData import com.itsaky.androidide.lsp.models.MethodCompletionData -import com.itsaky.androidide.preferences.internal.useCustomFont +import com.itsaky.androidide.preferences.internal.EditorPreferences import com.itsaky.androidide.resources.R.string.msg_api_info_deprecated import com.itsaky.androidide.resources.R.string.msg_api_info_removed import com.itsaky.androidide.resources.R.string.msg_api_info_since @@ -85,7 +85,8 @@ class CompletionListAdapter : EditorCompletionAdapter() { binding.completionLabel.text = label binding.completionType.text = type binding.completionDetail.text = desc - binding.completionIconText.setTypeface(customOrJBMono(useCustomFont), Typeface.BOLD) + binding.completionIconText.setTypeface(customOrJBMono(EditorPreferences.useCustomFont), + Typeface.BOLD) if (desc.isEmpty()) { binding.completionDetail.visibility = View.GONE } diff --git a/editor/src/main/java/com/itsaky/androidide/editor/language/IDELanguage.kt b/editor/src/main/java/com/itsaky/androidide/editor/language/IDELanguage.kt index 6ff9b660f..6934b6d51 100644 --- a/editor/src/main/java/com/itsaky/androidide/editor/language/IDELanguage.kt +++ b/editor/src/main/java/com/itsaky/androidide/editor/language/IDELanguage.kt @@ -21,8 +21,7 @@ import com.itsaky.androidide.editor.api.IEditor import com.itsaky.androidide.editor.ui.IDECompletionPublisher import com.itsaky.androidide.lookup.Lookup import com.itsaky.androidide.lsp.api.ILanguageServer -import com.itsaky.androidide.preferences.internal.tabSize -import com.itsaky.androidide.preferences.internal.useSoftTab +import com.itsaky.androidide.preferences.internal.EditorPreferences import com.itsaky.androidide.progress.ICancelChecker import io.github.rosemoe.sora.lang.Language import io.github.rosemoe.sora.lang.completion.CompletionCancelledException @@ -46,7 +45,7 @@ abstract class IDELanguage : Language { get() = null open fun getTabSize(): Int { - return tabSize + return EditorPreferences.tabSize } @Throws(CompletionCancelledException::class) @@ -99,7 +98,7 @@ abstract class IDELanguage : Language { } override fun useTab(): Boolean { - return !useSoftTab + return !EditorPreferences.useSoftTab } override fun getFormatter(): Formatter { diff --git a/editor/src/main/java/com/itsaky/androidide/editor/schemes/IDEColorSchemeProvider.kt b/editor/src/main/java/com/itsaky/androidide/editor/schemes/IDEColorSchemeProvider.kt index e72ad0bea..4d43bdb1b 100644 --- a/editor/src/main/java/com/itsaky/androidide/editor/schemes/IDEColorSchemeProvider.kt +++ b/editor/src/main/java/com/itsaky/androidide/editor/schemes/IDEColorSchemeProvider.kt @@ -20,8 +20,7 @@ package com.itsaky.androidide.editor.schemes import android.content.Context import androidx.annotation.WorkerThread import com.itsaky.androidide.eventbus.events.editor.ColorSchemeInvalidatedEvent -import com.itsaky.androidide.preferences.internal.DEFAULT_COLOR_SCHEME -import com.itsaky.androidide.preferences.internal.colorScheme +import com.itsaky.androidide.preferences.internal.EditorPreferences import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE import com.itsaky.androidide.utils.Environment import com.itsaky.androidide.utils.isSystemInDarkMode @@ -61,7 +60,7 @@ object IDEColorSchemeProvider { */ private var defaultScheme: IDEColorScheme? = null get() { - return field ?: getColorScheme(DEFAULT_COLOR_SCHEME).also { scheme -> + return field ?: getColorScheme(EditorPreferences.DEFAULT_COLOR_SCHEME).also { scheme -> field = scheme isDefaultSchemeLoaded = scheme != null } @@ -75,7 +74,7 @@ object IDEColorSchemeProvider { */ private var currentScheme: IDEColorScheme? = null get() { - return field ?: getColorScheme(colorScheme).also { scheme -> + return field ?: getColorScheme(EditorPreferences.colorScheme).also { scheme -> field = scheme isCurrentSchemeLoaded = scheme != null } @@ -99,7 +98,8 @@ object IDEColorSchemeProvider { scheme.darkVariant?.load() scheme } catch (err: Exception) { - log.error("An error occurred while loading color scheme '{}'", colorScheme, err) + log.error("An error occurred while loading color scheme '{}'", EditorPreferences.colorScheme, + err) null } } diff --git a/editor/src/main/java/com/itsaky/androidide/editor/ui/IDEEditor.kt b/editor/src/main/java/com/itsaky/androidide/editor/ui/IDEEditor.kt index 02bea6595..efa8ad25f 100644 --- a/editor/src/main/java/com/itsaky/androidide/editor/ui/IDEEditor.kt +++ b/editor/src/main/java/com/itsaky/androidide/editor/ui/IDEEditor.kt @@ -63,8 +63,7 @@ import com.itsaky.androidide.lsp.models.SignatureHelp import com.itsaky.androidide.lsp.models.SignatureHelpParams import com.itsaky.androidide.models.Position import com.itsaky.androidide.models.Range -import com.itsaky.androidide.preferences.internal.tabSize -import com.itsaky.androidide.preferences.internal.visiblePasswordFlag +import com.itsaky.androidide.preferences.internal.EditorPreferences import com.itsaky.androidide.progress.ICancelChecker import com.itsaky.androidide.syntax.colorschemes.DynamicColorScheme import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE @@ -187,7 +186,7 @@ open class IDEEditor @JvmOverloads constructor( */ fun createInputTypeFlags(): Int { var flags = EditorInfo.TYPE_CLASS_TEXT or EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE or EditorInfo.TYPE_TEXT_FLAG_NO_SUGGESTIONS - if (visiblePasswordFlag) { + if (EditorPreferences.visiblePasswordFlag) { flags = flags or EditorInfo.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD } return flags @@ -438,7 +437,7 @@ open class IDEEditor @JvmOverloads constructor( } override fun getTabWidth(): Int { - return tabSize + return EditorPreferences.tabSize } override fun beginSearchMode() { diff --git a/lsp/api/src/main/java/com/itsaky/androidide/lsp/api/IServerSettings.java b/lsp/api/src/main/java/com/itsaky/androidide/lsp/api/IServerSettings.java index 4aa002d33..1fa269dd3 100644 --- a/lsp/api/src/main/java/com/itsaky/androidide/lsp/api/IServerSettings.java +++ b/lsp/api/src/main/java/com/itsaky/androidide/lsp/api/IServerSettings.java @@ -17,9 +17,8 @@ package com.itsaky.androidide.lsp.api; -import static com.itsaky.androidide.preferences.internal.EditorPreferencesKt.COMPLETIONS_MATCH_LOWER; - import com.itsaky.androidide.lsp.models.CompletionsKt; +import com.itsaky.androidide.preferences.internal.EditorPreferences; /** * Settings contain preferences for the language server. Clients can use settings to enable/disable @@ -29,7 +28,7 @@ import com.itsaky.androidide.lsp.models.CompletionsKt; */ public interface IServerSettings { - String KEY_COMPLETIONS_MATCH_LOWER = COMPLETIONS_MATCH_LOWER; + String KEY_COMPLETIONS_MATCH_LOWER = EditorPreferences.COMPLETIONS_MATCH_LOWER; /** * Called by language server to check if the completions are enabled. If not enabled, the server @@ -38,9 +37,10 @@ public interface IServerSettings { * @return {@code true} if enabled, {@code false} otherwise. */ boolean completionsEnabled(); - + /** * Called by the language server to check if the source code analysis is enabled or not. + * * @return {@code true} if enabled, {@code false} otherwise. */ default boolean diagnosticsEnabled() { diff --git a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/generators/GenerateSettersAndGettersAction.kt b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/generators/GenerateSettersAndGettersAction.kt index 4d2fac1cd..1685e8d69 100644 --- a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/generators/GenerateSettersAndGettersAction.kt +++ b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/generators/GenerateSettersAndGettersAction.kt @@ -34,7 +34,7 @@ import com.itsaky.androidide.lsp.java.compiler.CompileTask import com.itsaky.androidide.lsp.java.utils.EditHelper import com.itsaky.androidide.lsp.java.utils.JavaParserUtils import com.itsaky.androidide.lsp.java.utils.TypeUtils.toType -import com.itsaky.androidide.preferences.internal.tabSize +import com.itsaky.androidide.preferences.internal.EditorPreferences import com.itsaky.androidide.preferences.utils.indentationString import com.itsaky.androidide.projects.IProjectManager import com.itsaky.androidide.resources.R @@ -126,7 +126,7 @@ class GenerateSettersAndGettersAction : FieldBasedAction() { } val leaf = path.leaf - val indent = EditHelper.indent(task.task, task.root(file), leaf) + tabSize + val indent = EditHelper.indent(task.task, task.root(file), leaf) + EditorPreferences.tabSize sb.append(createGetter(element, indent)) if (!element.modifiers.contains(FINAL)) { sb.append(createSetter(element, indent)) diff --git a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/generators/GenerateToStringMethodAction.kt b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/generators/GenerateToStringMethodAction.kt index f67a13d10..2712ebe1b 100644 --- a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/generators/GenerateToStringMethodAction.kt +++ b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/generators/GenerateToStringMethodAction.kt @@ -29,7 +29,7 @@ import com.itsaky.androidide.lsp.java.JavaCompilerProvider import com.itsaky.androidide.lsp.java.actions.FieldBasedAction import com.itsaky.androidide.lsp.java.compiler.CompileTask import com.itsaky.androidide.lsp.java.utils.EditHelper -import com.itsaky.androidide.preferences.internal.tabSize +import com.itsaky.androidide.preferences.internal.EditorPreferences import com.itsaky.androidide.preferences.utils.indentationString import com.itsaky.androidide.projects.IProjectManager import com.itsaky.androidide.resources.R @@ -119,7 +119,7 @@ class GenerateToStringMethodAction : FieldBasedAction() { val file = data.requirePath() val editor = data[CodeEditor::class.java]!! val trees = JavacTrees.instance(task.task) - val indent = EditHelper.indent(task.task, task.root(), type) + tabSize + val indent = EditHelper.indent(task.task, task.root(), type) + EditorPreferences.tabSize val insert = EditHelper.insertAtEndOfClass(task.task, task.root(file), type) val string = StringBuilder() var isFirst = true diff --git a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/generators/OverrideSuperclassMethodsAction.kt b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/generators/OverrideSuperclassMethodsAction.kt index e0b8ef4fa..f8c859277 100644 --- a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/generators/OverrideSuperclassMethodsAction.kt +++ b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/generators/OverrideSuperclassMethodsAction.kt @@ -36,7 +36,7 @@ import com.itsaky.androidide.lsp.java.utils.JavaParserUtils import com.itsaky.androidide.lsp.java.utils.MethodPtr import com.itsaky.androidide.lsp.java.visitors.FindTypeDeclarationAt import com.itsaky.androidide.models.Position -import com.itsaky.androidide.preferences.internal.tabSize +import com.itsaky.androidide.preferences.internal.EditorPreferences import com.itsaky.androidide.preferences.utils.indentationString import com.itsaky.androidide.projects.IProjectManager import com.itsaky.androidide.resources.R @@ -215,7 +215,7 @@ class OverrideSuperclassMethodsAction : BaseJavaCodeAction() { val typeFinder = FindTypeDeclarationAt(task.task) val classTree = typeFinder.scan(task.root(), position) val thisClass = trees.getElement(typeFinder.path) as TypeElement - val indent = EditHelper.indent(task.task, task.root(), classTree) + tabSize + val indent = EditHelper.indent(task.task, task.root(), classTree) + EditorPreferences.tabSize val fileImports = task.root(file).imports.map { it.qualifiedIdentifier.toString() }.toSet() val filePackage = task.root(file).`package`.packageName.toString() diff --git a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/models/JavaServerSettings.java b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/models/JavaServerSettings.java index 7b1fb9857..da7185748 100644 --- a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/models/JavaServerSettings.java +++ b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/models/JavaServerSettings.java @@ -16,13 +16,11 @@ */ package com.itsaky.androidide.lsp.java.models; -import static com.itsaky.androidide.preferences.internal.JavaPreferencesKt.GOOGLE_CODE_STYLE; -import static com.itsaky.androidide.preferences.internal.JavaPreferencesKt.isJavaDiagnosticsEnabled; - import androidx.annotation.NonNull; import com.google.googlejavaformat.java.JavaFormatterOptions; import com.itsaky.androidide.lsp.util.PrefBasedServerSettings; import com.itsaky.androidide.managers.PreferenceManager; +import com.itsaky.androidide.preferences.internal.JavaPreferences; import com.itsaky.androidide.utils.VMUtils; /** @@ -32,7 +30,7 @@ import com.itsaky.androidide.utils.VMUtils; */ public class JavaServerSettings extends PrefBasedServerSettings { - public static final String KEY_JAVA_PREF_GOOGLE_CODE_STYLE = GOOGLE_CODE_STYLE; + public static final String KEY_JAVA_PREF_GOOGLE_CODE_STYLE = JavaPreferences.GOOGLE_CODE_STYLE; public static final int CODE_STYLE_AOSP = 0; public static final int CODE_STYLE_GOOGLE = 1; private static JavaServerSettings instance; @@ -45,12 +43,12 @@ public class JavaServerSettings extends PrefBasedServerSettings { return instance; } - + @Override public boolean diagnosticsEnabled() { - return VMUtils.isJvm() || isJavaDiagnosticsEnabled(); + return VMUtils.isJvm() || JavaPreferences.INSTANCE.isJavaDiagnosticsEnabled(); } - + public JavaFormatterOptions getFormatterOptions() { return JavaFormatterOptions.builder().formatJavadoc(true).style(getStyle()).build(); } diff --git a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/providers/completion/SnippetCompletionProvider.kt b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/providers/completion/SnippetCompletionProvider.kt index 551e9f056..fae50b8c2 100644 --- a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/providers/completion/SnippetCompletionProvider.kt +++ b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/providers/completion/SnippetCompletionProvider.kt @@ -26,7 +26,7 @@ import com.itsaky.androidide.lsp.models.CompletionItem import com.itsaky.androidide.lsp.models.CompletionResult import com.itsaky.androidide.lsp.models.MatchLevel import com.itsaky.androidide.lsp.snippets.ISnippet -import com.itsaky.androidide.preferences.internal.tabSize +import com.itsaky.androidide.preferences.internal.EditorPreferences import io.github.rosemoe.sora.text.TextUtils import openjdk.source.tree.ClassTree import openjdk.source.tree.CompilationUnitTree @@ -94,7 +94,8 @@ class SnippetCompletionProvider( } --start } - return TextUtils.countLeadingSpaceCount(charContent.substring(start, cursor.toInt()), tabSize) + return TextUtils.countLeadingSpaceCount(charContent.substring(start, cursor.toInt()), + EditorPreferences.tabSize) } private fun findSnippetScope(path: TreePath?): TreePath? { diff --git a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/rewrite/CreateMissingMethod.java b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/rewrite/CreateMissingMethod.java index 3b6ae1935..bd3bffa87 100644 --- a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/rewrite/CreateMissingMethod.java +++ b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/rewrite/CreateMissingMethod.java @@ -30,7 +30,7 @@ import com.itsaky.androidide.lsp.java.visitors.FindMethodCallAt; import com.itsaky.androidide.lsp.models.TextEdit; import com.itsaky.androidide.models.Position; import com.itsaky.androidide.models.Range; -import com.itsaky.androidide.preferences.internal.EditorPreferencesKt; +import com.itsaky.androidide.preferences.internal.EditorPreferences; import com.itsaky.androidide.preferences.utils.EditorUtilKt; import java.nio.file.Path; import java.nio.file.Paths; @@ -121,7 +121,7 @@ public class CreateMissingMethod extends Rewrite { } final int indentSpaces = - indent(task.task, compilationUnit, enclosingClass) + EditorPreferencesKt.getTabSize(); + indent(task.task, compilationUnit, enclosingClass) + EditorPreferences.INSTANCE.getTabSize(); insertText = insertText.replaceAll("\n", "\n" + EditorUtilKt.indentationString(indentSpaces)); insertText += "\n"; diff --git a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/rewrite/GenerateRecordConstructor.java b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/rewrite/GenerateRecordConstructor.java index 8181793fa..2d4ba69ec 100644 --- a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/rewrite/GenerateRecordConstructor.java +++ b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/rewrite/GenerateRecordConstructor.java @@ -25,7 +25,7 @@ import com.itsaky.androidide.lsp.java.utils.EditHelper; import com.itsaky.androidide.lsp.models.TextEdit; import com.itsaky.androidide.models.Position; import com.itsaky.androidide.models.Range; -import com.itsaky.androidide.preferences.internal.EditorPreferencesKt; +import com.itsaky.androidide.preferences.internal.EditorPreferences; import com.itsaky.androidide.preferences.utils.EditorUtilKt; import java.io.IOException; import java.nio.file.Path; @@ -88,7 +88,8 @@ public class GenerateRecordConstructor extends Rewrite { .append(initializers) .append("\n}"); String string = buf.toString(); - int indent = EditHelper.indent(task.task, task.root(), typeTree) + EditorPreferencesKt.getTabSize(); + int indent = EditHelper.indent(task.task, task.root(), typeTree) + + EditorPreferences.INSTANCE.getTabSize(); string = string.replaceAll("\n", "\n" + EditorUtilKt.indentationString(indent)); string = string + "\n\n"; Position insert = insertPoint(task, typeTree); @@ -100,12 +101,20 @@ public class GenerateRecordConstructor extends Rewrite { private List fieldsNeedingInitialization(ClassTree typeTree) { List fields = new ArrayList<>(); for (Tree member : typeTree.getMembers()) { - if (!(member instanceof VariableTree)) continue; + if (!(member instanceof VariableTree)) { + continue; + } VariableTree field = (VariableTree) member; - if (field.getInitializer() != null) continue; + if (field.getInitializer() != null) { + continue; + } Set flags = field.getModifiers().getFlags(); - if (flags.contains(Modifier.STATIC)) continue; - if (!flags.contains(Modifier.FINAL)) continue; + if (flags.contains(Modifier.STATIC)) { + continue; + } + if (!flags.contains(Modifier.FINAL)) { + continue; + } fields.add(field); } @@ -152,7 +161,9 @@ public class GenerateRecordConstructor extends Rewrite { for (Tree member : typeTree.getMembers()) { if (member.getKind() == Tree.Kind.METHOD) { MethodTree method = (MethodTree) member; - if (method.getReturnType() == null) continue; + if (method.getReturnType() == null) { + continue; + } LOG.info("...insert constructor before {}", method.getName()); return EditHelper.insertBefore(task.task, task.root(), method); } diff --git a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/rewrite/ImplementAbstractMethods.java b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/rewrite/ImplementAbstractMethods.java index 25f39d898..5524ee3ef 100644 --- a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/rewrite/ImplementAbstractMethods.java +++ b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/rewrite/ImplementAbstractMethods.java @@ -30,7 +30,7 @@ import com.itsaky.androidide.lsp.models.Command; import com.itsaky.androidide.lsp.models.TextEdit; import com.itsaky.androidide.models.Position; import com.itsaky.androidide.models.Range; -import com.itsaky.androidide.preferences.internal.EditorPreferencesKt; +import com.itsaky.androidide.preferences.internal.EditorPreferences; import com.itsaky.androidide.preferences.utils.EditorUtilKt; import com.squareup.javapoet.MethodSpec; import java.nio.file.Path; @@ -105,7 +105,8 @@ public class ImplementAbstractMethods extends Rewrite { } final Set imports = new TreeSet<>(); - int indent = EditHelper.indent(task.task, task.root(), thisTree) + EditorPreferencesKt.getTabSize(); + int indent = EditHelper.indent(task.task, task.root(), thisTree) + + EditorPreferences.INSTANCE.getTabSize(); for (Element member : elements.getAllMembers(thisClass)) { if (member.getKind() == ElementKind.METHOD && member.getModifiers().contains(Modifier.ABSTRACT)) { diff --git a/lsp/xml/src/main/java/com/itsaky/androidide/lsp/xml/models/XMLFormattingOptions.kt b/lsp/xml/src/main/java/com/itsaky/androidide/lsp/xml/models/XMLFormattingOptions.kt index b0d28ad78..686a3483b 100644 --- a/lsp/xml/src/main/java/com/itsaky/androidide/lsp/xml/models/XMLFormattingOptions.kt +++ b/lsp/xml/src/main/java/com/itsaky/androidide/lsp/xml/models/XMLFormattingOptions.kt @@ -19,6 +19,7 @@ package com.itsaky.androidide.lsp.xml.models import com.itsaky.androidide.lsp.xml.providers.format.FormatElementCategory import com.itsaky.androidide.lsp.xml.providers.format.FormatElementCategory.PreserveSpace +import com.itsaky.androidide.preferences.internal.XmlPreferences import org.eclipse.lemminx.dom.DOMElement import org.eclipse.lemminx.dom.builder.BaseXmlFormattingOptions import org.eclipse.lemminx.dom.builder.EmptyElements @@ -31,38 +32,38 @@ import org.eclipse.lemminx.dom.builder.EmptyElements open class XMLFormattingOptions : BaseXmlFormattingOptions() { override val isTrimFinalNewLine: Boolean - get() = com.itsaky.androidide.preferences.internal.trimFinalNewLine + get() = XmlPreferences.trimFinalNewLine override val isInsertFinalNewLine: Boolean - get() = com.itsaky.androidide.preferences.internal.insertFinalNewLine + get() = XmlPreferences.insertFinalNewLine override val isSplitAttributes: Boolean - get() = com.itsaky.androidide.preferences.internal.splitAttributes + get() = XmlPreferences.splitAttributes override val isJoinCDataLines: Boolean - get() = com.itsaky.androidide.preferences.internal.joinCDataLines + get() = XmlPreferences.joinCDataLines override val isJoinCommentLines: Boolean - get() = com.itsaky.androidide.preferences.internal.joinCommentLines + get() = XmlPreferences.joinCommentLines override val isJoinContentLines: Boolean - get() = com.itsaky.androidide.preferences.internal.joinContentLines + get() = XmlPreferences.joinContentLines override val isSpaceBeforeEmptyCloseTag: Boolean - get() = com.itsaky.androidide.preferences.internal.spaceBeforeEmptyCloseTag + get() = XmlPreferences.spaceBeforeEmptyCloseTag override val isPreserveEmptyContent: Boolean - get() = com.itsaky.androidide.preferences.internal.preserveEmptyContent + get() = XmlPreferences.preserveEmptyContent override val isPreserveAttributeLineBreaks: Boolean - get() = com.itsaky.androidide.preferences.internal.preserveAttributeLineBreaks + get() = XmlPreferences.preserveAttributeLineBreaks override val isClosingBracketNewLine: Boolean - get() = com.itsaky.androidide.preferences.internal.closingBracketNewLine + get() = XmlPreferences.closingBracketNewLine override val isTrimTrailingWhitespace: Boolean - get() = com.itsaky.androidide.preferences.internal.trimTrailingWhitespace + get() = XmlPreferences.trimTrailingWhitespace override val maxLineWidth: Int - get() = com.itsaky.androidide.preferences.internal.maxLineWidth + get() = XmlPreferences.maxLineWidth override val preservedNewLines: Int - get() = com.itsaky.androidide.preferences.internal.preservedNewLines + get() = XmlPreferences.preservedNewLines override val splitAttributesIndentSize: Int - get() = com.itsaky.androidide.preferences.internal.splitAttributesIndentSize + get() = XmlPreferences.splitAttributesIndentSize override val emptyElementsBehavior: EmptyElements get() = EmptyElements.valueOf( - com.itsaky.androidide.preferences.internal.emptyElementsBehavior) + XmlPreferences.emptyElementsBehavior) private val preserveSpace = listOf("xsl:text", "xsl:comment", "xsl:processing-instruction", diff --git a/lsp/xml/src/main/java/com/itsaky/androidide/lsp/xml/providers/format/DOMCDATAFormatter.java b/lsp/xml/src/main/java/com/itsaky/androidide/lsp/xml/providers/format/DOMCDATAFormatter.java index d544a322a..de7944ea9 100644 --- a/lsp/xml/src/main/java/com/itsaky/androidide/lsp/xml/providers/format/DOMCDATAFormatter.java +++ b/lsp/xml/src/main/java/com/itsaky/androidide/lsp/xml/providers/format/DOMCDATAFormatter.java @@ -29,7 +29,7 @@ package com.itsaky.androidide.lsp.xml.providers.format; import com.itsaky.androidide.lsp.models.TextEdit; -import com.itsaky.androidide.preferences.internal.EditorPreferencesKt; +import com.itsaky.androidide.preferences.internal.EditorPreferences; import java.util.List; import org.eclipse.lemminx.dom.DOMCDATASection; @@ -115,7 +115,7 @@ public class DOMCDATAFormatter { } private int getTabSize() { - return EditorPreferencesKt.getTabSize(); + return EditorPreferences.INSTANCE.getTabSize(); } private int getMaxLineWidth() { diff --git a/lsp/xml/src/main/java/com/itsaky/androidide/lsp/xml/providers/format/DOMCommentFormatter.java b/lsp/xml/src/main/java/com/itsaky/androidide/lsp/xml/providers/format/DOMCommentFormatter.java index f23939751..cff03062d 100644 --- a/lsp/xml/src/main/java/com/itsaky/androidide/lsp/xml/providers/format/DOMCommentFormatter.java +++ b/lsp/xml/src/main/java/com/itsaky/androidide/lsp/xml/providers/format/DOMCommentFormatter.java @@ -29,7 +29,7 @@ package com.itsaky.androidide.lsp.xml.providers.format; import com.itsaky.androidide.lsp.models.TextEdit; -import com.itsaky.androidide.preferences.internal.EditorPreferencesKt; +import com.itsaky.androidide.preferences.internal.EditorPreferences; import java.util.List; import org.eclipse.lemminx.dom.DOMComment; @@ -111,7 +111,7 @@ public class DOMCommentFormatter { } private int getTabSize() { - return EditorPreferencesKt.getTabSize(); + return EditorPreferences.INSTANCE.getTabSize(); } private int getMaxLineWidth() { diff --git a/lsp/xml/src/main/java/com/itsaky/androidide/lsp/xml/providers/format/XMLFormatterDocument.java b/lsp/xml/src/main/java/com/itsaky/androidide/lsp/xml/providers/format/XMLFormatterDocument.java index a391d34ef..5d2bdc049 100644 --- a/lsp/xml/src/main/java/com/itsaky/androidide/lsp/xml/providers/format/XMLFormatterDocument.java +++ b/lsp/xml/src/main/java/com/itsaky/androidide/lsp/xml/providers/format/XMLFormatterDocument.java @@ -32,7 +32,7 @@ import com.itsaky.androidide.lsp.xml.models.XMLServerSettings; import com.itsaky.androidide.lsp.xml.utils.XMLBuilder; import com.itsaky.androidide.models.Position; import com.itsaky.androidide.models.Range; -import com.itsaky.androidide.preferences.internal.EditorPreferencesKt; +import com.itsaky.androidide.preferences.internal.EditorPreferences; import java.util.ArrayList; import java.util.List; import org.eclipse.lemminx.commons.BadLocationException; @@ -59,6 +59,7 @@ import org.eclipse.lemminx.dom.builder.EmptyElements; * @author Angelo ZERR */ public class XMLFormatterDocument { + private final TextDocument textDocument; private final Range range; private final XMLServerSettings sharedSettings = XMLServerSettings.INSTANCE; @@ -73,7 +74,9 @@ public class XMLFormatterDocument { private boolean linefeedOnNextWrite; private boolean withinDTDContent; - /** XML formatter document. */ + /** + * XML formatter document. + */ public XMLFormatterDocument(TextDocument textDocument, Range range) { this.textDocument = textDocument; this.range = range; @@ -217,8 +220,8 @@ public class XMLFormatterDocument { int spaceOrTab = getSpaceOrTabStartOfString(textBeforeNode); - if (EditorPreferencesKt.getUseSoftTab()) { - return (spaceOrTab / EditorPreferencesKt.getTabSize()); + if (EditorPreferences.INSTANCE.getUseSoftTab()) { + return (spaceOrTab / EditorPreferences.INSTANCE.getTabSize()); } return spaceOrTab; } @@ -290,7 +293,7 @@ public class XMLFormatterDocument { !node.getOwnerDocument().isDTD() && !(node.isComment() && ((DOMComment) node).isCommentSameLineEndTag()) && (!node.isText() - || (!((DOMText) node).isWhitespace() && ((DOMText) node).hasSiblings())); + || (!((DOMText) node).isWhitespace() && ((DOMText) node).hasSiblings())); if (this.indentLevel > 0 && doLineFeed) { // add new line + indent @@ -395,7 +398,9 @@ public class XMLFormatterDocument { } } - /** Format the given DOM ProcessingIntsruction. */ + /** + * Format the given DOM ProcessingIntsruction. + */ private void formatProcessingInstruction(DOMNode node) { addPIToXMLBuilder(node, this.xmlBuilder); if (this.indentLevel == 0) { @@ -403,7 +408,9 @@ public class XMLFormatterDocument { } } - /** Format the given DOM Comment */ + /** + * Format the given DOM Comment + */ private void formatComment(DOMComment comment) { this.xmlBuilder.startComment(comment); this.xmlBuilder.addContentComment(comment.getData()); @@ -416,7 +423,9 @@ public class XMLFormatterDocument { } } - /** Format the given DOM CDATA */ + /** + * Format the given DOM CDATA + */ private void formatCDATA(DOMCDATASection cdata) { this.xmlBuilder.startCDATA(); this.xmlBuilder.addContentCDATA(cdata.getData()); @@ -492,8 +501,8 @@ public class XMLFormatterDocument { } /** - * Formats the start tag's closing bracket (>) according to {@code - * XMLFormattingOptions#isPreserveAttrLineBreaks()} + * Formats the start tag's closing bracket (>) according to + * {@code XMLFormattingOptions#isPreserveAttrLineBreaks()} * *

{@code XMLFormattingOptions#isPreserveAttrLineBreaks()}: If true, must add a newline + * indent before the closing bracket if the last attribute of the element and the closing bracket @@ -513,8 +522,8 @@ public class XMLFormatterDocument { } /** - * Formats the self-closing tag (/>) according to {@code - * XMLFormattingOptions#isPreserveAttrLineBreaks()} + * Formats the self-closing tag (/>) according to + * {@code XMLFormattingOptions#isPreserveAttrLineBreaks()} * *

{@code XMLFormattingOptions#isPreserveAttrLineBreaks()}: If true, must add a newline + * indent before the self-closing tag if the last attribute of the element and the closing bracket @@ -549,7 +558,7 @@ public class XMLFormatterDocument { prevOffset = attr.getEnd(); } if ((this.sharedSettings.getFormattingOptions().isClosingBracketNewLine() - && this.sharedSettings.getFormattingOptions().isSplitAttributes()) + && this.sharedSettings.getFormattingOptions().isSplitAttributes()) && !isSingleAttribute) { xmlBuilder.linefeed(); // Indent by tag + splitAttributesIndentSize to match with attribute indent @@ -581,7 +590,7 @@ public class XMLFormatterDocument { *

If current formatting is range formatting, the provided offsets must be ranged offsets * (offsets relative to the formatting range) * - * @param first the first offset + * @param first the first offset * @param second the second offset * @return true if first offset and second offset belong in the same line of the document * @throws BadLocationException @@ -613,7 +622,7 @@ public class XMLFormatterDocument { * * @param element * @return true if the provided element has one attribute in the fullDomDocument (not the - * rangeDomDocument) + * rangeDomDocument) */ private boolean hasSingleAttributeInFullDoc(DOMElement element) { DOMElement fullElement = getFullDocElemFromRangeElem(element); @@ -632,17 +641,16 @@ public class XMLFormatterDocument { // Element is empty and closed switch (this.emptyElements) { case Expand: - case Collapse: - { - if (this.sharedSettings.getFormattingOptions().isPreserveEmptyContent()) { - // preserve content - if (element.hasChildNodes()) { - // The element is empty and contains somes spaces which must be preserved - return EmptyElements.Ignore; - } + case Collapse: { + if (this.sharedSettings.getFormattingOptions().isPreserveEmptyContent()) { + // preserve content + if (element.hasChildNodes()) { + // The element is empty and contains somes spaces which must be preserved + return EmptyElements.Ignore; } - return this.emptyElements; } + return this.emptyElements; + } default: return this.emptyElements; } @@ -787,7 +795,9 @@ public class XMLFormatterDocument { xml.endPrologOrPI(); } - /** Will add all attributes, to the given builder, on a single line */ + /** + * Will add all attributes, to the given builder, on a single line + */ private static void addPrologAttributes(DOMNode node, XMLBuilder xmlBuilder) { List attrs = node.getAttributeNodes(); if (attrs == null) { diff --git a/lsp/xml/src/main/java/com/itsaky/androidide/lsp/xml/providers/format/XMLFormatterDocumentNew.java b/lsp/xml/src/main/java/com/itsaky/androidide/lsp/xml/providers/format/XMLFormatterDocumentNew.java index a9c08c8f6..538f6dd82 100644 --- a/lsp/xml/src/main/java/com/itsaky/androidide/lsp/xml/providers/format/XMLFormatterDocumentNew.java +++ b/lsp/xml/src/main/java/com/itsaky/androidide/lsp/xml/providers/format/XMLFormatterDocumentNew.java @@ -33,7 +33,7 @@ import com.itsaky.androidide.lsp.xml.models.XMLFormattingOptions; import com.itsaky.androidide.lsp.xml.models.XMLServerSettings; import com.itsaky.androidide.models.Position; import com.itsaky.androidide.models.Range; -import com.itsaky.androidide.preferences.internal.EditorPreferencesKt; +import com.itsaky.androidide.preferences.internal.EditorPreferences; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; @@ -94,7 +94,9 @@ public class XMLFormatterDocumentNew { private CancelChecker cancelChecker; - /** XML formatter document. */ + /** + * XML formatter document. + */ public XMLFormatterDocumentNew(DOMDocument xmlDocument, Range range) { this.xmlDocument = xmlDocument; this.textDocument = xmlDocument.getTextDocument(); @@ -198,8 +200,8 @@ public class XMLFormatterDocumentNew { * Returns the DOM node to format according to the given range and the DOM document otherwise. * * @param document the DOM document. - * @param start the start range offset and -1 otherwise. - * @param end the end range offset and -1 otherwise. + * @param start the start range offset and -1 otherwise. + * @param end the end range offset and -1 otherwise. * @return the DOM node to format according to the given range and the DOM document otherwise. */ private static DOMNode getDOMNodeToFormat(DOMDocument document, int start, int end) { @@ -340,7 +342,8 @@ public class XMLFormatterDocumentNew { } } - public void formatAttributeValue(DOMAttr attr, int indentLevel, List edits) {} + public void formatAttributeValue(DOMAttr attr, int indentLevel, List edits) { + } public void removeLeftSpaces(int leftLimit, int to, List edits) { replaceLeftSpacesWith(leftLimit, to, "", edits); @@ -515,7 +518,7 @@ public class XMLFormatterDocumentNew { /** * Returns the format element category of the given DOM element. * - * @param element the DOM element. + * @param element the DOM element. * @param parentConstraints the parent constraints. * @return the format element category of the given DOM element. */ @@ -593,7 +596,7 @@ public class XMLFormatterDocumentNew { /** * Return the expected indent spaces and new lines with the specified number of new lines. * - * @param level the indent level. + * @param level the indent level. * @param newLineCount the number of new lines to be added. * @return the expected indent spaces and new lines with the specified number of new lines. */ @@ -673,11 +676,11 @@ public class XMLFormatterDocumentNew { } private int getTabSize() { - return EditorPreferencesKt.getTabSize(); + return EditorPreferences.INSTANCE.getTabSize(); } private boolean isInsertSpaces() { - return EditorPreferencesKt.getUseSoftTab(); + return EditorPreferences.INSTANCE.getUseSoftTab(); } private boolean isTrimFinalNewlines() { diff --git a/preferences/src/main/java/com/itsaky/androidide/preferences/internal/BuildPreferences.kt b/preferences/src/main/java/com/itsaky/androidide/preferences/internal/BuildPreferences.kt new file mode 100644 index 000000000..a849d4185 --- /dev/null +++ b/preferences/src/main/java/com/itsaky/androidide/preferences/internal/BuildPreferences.kt @@ -0,0 +1,113 @@ +/* + * This file is part of AndroidIDE. + * + * AndroidIDE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AndroidIDE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with AndroidIDE. If not, see . + */ + +package com.itsaky.androidide.preferences.internal + +/** + * @author Akash Yadav + */ +@Suppress("MemberVisibilityCanBePrivate") +object BuildPreferences { + + const val STACKTRACE = "idepref_gradleCmd_stacktrace" + const val DEBUG = "idepref_gradleCmd_debug" + const val SCAN = "idepref_gradleCmd_scan" + const val INFO = "idepref_gradleCmd_info" + const val WARNING_MODE = "idepref_gradleCmd_warningMode" + const val BUILD_CACHE = "idepref_gradleCmd_buildCache" + const val OFFLINE_MODE = "idepref_gradleCmd_offlineMode" + + const val GRADLE_COMMANDS = "idepref_build_gradleCommands" + const val GRADLE_CLEAR_CACHE = "idepref_build_gradleClearCache" + const val CUSTOM_GRADLE_INSTALLATION = "idepref_build_customGradleInstallation" + const val LAUNCH_APP_AFTER_INSTALL = "ide.build.run.launchAppAfterInstall" + const val PREF_JAVA_HOME = "ide.build.javaHome" + + /** Switch for Gradle `--debug` option. */ + var isDebugEnabled: Boolean + get() = prefManager.getBoolean(DEBUG) + set(enabled) { + prefManager.putBoolean(DEBUG, enabled) + } + + /** Switch for Gradle `--scan` option. */ + var isScanEnabled: Boolean + get() = prefManager.getBoolean(SCAN) + set(enabled) { + prefManager.putBoolean(SCAN, enabled) + } + + /** Switch for Gradle `--warning-mode all` option. */ + var isWarningModeAllEnabled: Boolean + get() = prefManager.getBoolean(WARNING_MODE) + set(enabled) { + prefManager.putBoolean(WARNING_MODE, enabled) + } + + /** Switch for Gradle `--build-cache` option. */ + var isBuildCacheEnabled: Boolean + get() = prefManager.getBoolean(BUILD_CACHE) + set(enabled) { + prefManager.putBoolean(BUILD_CACHE, enabled) + } + + /** Switch for Gradle `--offline` option. */ + var isOfflineEnabled: Boolean + get() = prefManager.getBoolean(OFFLINE_MODE) + set(enabled) { + prefManager.putBoolean(OFFLINE_MODE, enabled) + } + + /** Switch for Gradle `--stacktrace` option. */ + var isStacktraceEnabled: Boolean + get() = prefManager.getBoolean(STACKTRACE) + set(value) { + prefManager.putBoolean(STACKTRACE, value) + } + + /** Switch for Gradle `--info` option. */ + var isInfoEnabled: Boolean + get() = prefManager.getBoolean(INFO, GeneralPreferences.isFirstBuild) + set(enabled) { + prefManager.putBoolean(INFO, enabled) + } + + /** Custom Gradle installation directory path. */ + var gradleInstallationDir: String + get() = prefManager.getString(CUSTOM_GRADLE_INSTALLATION, "") + set(value) { + prefManager.putString(CUSTOM_GRADLE_INSTALLATION, value) + } + + /** + * Whether the app should be launched automatically after installation (after build). + */ + var launchAppAfterInstall: Boolean + get() = prefManager.getBoolean(LAUNCH_APP_AFTER_INSTALL, false) + set(value) { + prefManager.putBoolean(LAUNCH_APP_AFTER_INSTALL, value) + } + + /** + * The selected Java installation. + */ + var javaHome: String + get() = prefManager.getString(PREF_JAVA_HOME, "") + set(value) { + prefManager.putString(PREF_JAVA_HOME, value) + } +} \ No newline at end of file diff --git a/preferences/src/main/java/com/itsaky/androidide/preferences/internal/DevOpsPreferences.kt b/preferences/src/main/java/com/itsaky/androidide/preferences/internal/DevOpsPreferences.kt new file mode 100644 index 000000000..d92b3f81d --- /dev/null +++ b/preferences/src/main/java/com/itsaky/androidide/preferences/internal/DevOpsPreferences.kt @@ -0,0 +1,42 @@ +/* + * This file is part of AndroidIDE. + * + * AndroidIDE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AndroidIDE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with AndroidIDE. If not, see . + */ + +package com.itsaky.androidide.preferences.internal + +/** + * @author Akash Yadav + */ +@Suppress("MemberVisibilityCanBePrivate") +object DevOpsPreferences { + + const val KEY_DEVOPTS = "ide.prefs.developerOptions" + const val KEY_DEVOPTS_DEBUGGING = "${KEY_DEVOPTS}.debugging" + const val KEY_DEVOPTS_DEBUGGING_DUMPLOGS = "${KEY_DEVOPTS_DEBUGGING}.dumpLogs" + const val KEY_DEVOPTS_DEBUGGING_ENABLE_LOGSENDER = "${KEY_DEVOPTS_DEBUGGING}.enableLogsender" + + var dumpLogs: Boolean + get() = prefManager.getBoolean(KEY_DEVOPTS_DEBUGGING_DUMPLOGS, false) + set(value) { + prefManager.putBoolean(KEY_DEVOPTS_DEBUGGING_DUMPLOGS, value) + } + + var logsenderEnabled: Boolean + get() = prefManager.getBoolean(KEY_DEVOPTS_DEBUGGING_ENABLE_LOGSENDER, true) + set(value) { + prefManager.putBoolean(KEY_DEVOPTS_DEBUGGING_ENABLE_LOGSENDER, value) + } +} \ No newline at end of file diff --git a/preferences/src/main/java/com/itsaky/androidide/preferences/internal/EditorPreferences.kt b/preferences/src/main/java/com/itsaky/androidide/preferences/internal/EditorPreferences.kt new file mode 100644 index 000000000..fbdfc296f --- /dev/null +++ b/preferences/src/main/java/com/itsaky/androidide/preferences/internal/EditorPreferences.kt @@ -0,0 +1,177 @@ +/* + * This file is part of AndroidIDE. + * + * AndroidIDE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AndroidIDE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with AndroidIDE. If not, see . + */ + +package com.itsaky.androidide.preferences.internal + +/** + * Preferences for the code editor. + * + * @author Akash Yadav + */ +@Suppress("MemberVisibilityCanBePrivate") +object EditorPreferences { + + const val COMPLETIONS_MATCH_LOWER = "idepref_editor_completions_matchLower" + + const val FLAG_WS_LEADING = "idepref_editor_wsLeading" + const val FLAG_WS_TRAILING = "idepref_editor_wsTrailing" + const val FLAG_WS_INNER = "idepref_editor_wsInner" + const val FLAG_WS_EMPTY_LINE = "idepref_editor_wsEmptyLine" + const val FLAG_LINE_BREAK = "idepref_editor_lineBreak" + const val FONT_SIZE = "idepref_editor_fontSize" + const val PRINTABLE_CHARS = "idepref_editor_nonPrintableFlags" + const val TAB_SIZE = "idepref_editor_tabSize" + const val AUTO_SAVE = "idepref_editor_autoSave" + const val FONT_LIGATURES = "idepref_editor_fontLigatures" + const val FLAG_PASSWORD = "idepref_editor_flagPassword" + const val WORD_WRAP = "idepref_editor_word_wrap" + const val USE_MAGNIFER = "idepref_editor_use_magnifier" + const val USE_ICU = "idepref_editor_useIcu" + const val USE_SOFT_TAB = "idepref_editor_useSoftTab" + const val USE_CUSTOM_FONT = "idepref_editor_useCustomFont" + const val DELETE_EMPTY_LINES = "idepref_editor_deleteEmptyLines" + const val DELETE_TABS_ON_BACKSPACE = "idepref_editor_deleteTab" + const val STICKY_SCROLL_ENABLED = "idepref_editor_stickyScrollEnabled" + const val PIN_LINE_NUMBERS = "idepref_editor_pinLineNumbers" + + const val COLOR_SCHEME = "idepref_editor_colorScheme" + const val DEFAULT_COLOR_SCHEME = "default" + + var completionsMatchLower: Boolean + get() = prefManager.getBoolean(COMPLETIONS_MATCH_LOWER, false) + set(value) { + prefManager.putBoolean(COMPLETIONS_MATCH_LOWER, value) + } + + var drawLeadingWs: Boolean + get() = prefManager.getBoolean(FLAG_WS_LEADING, false) + set(value) { + prefManager.putBoolean(FLAG_WS_LEADING, value) + } + + var drawTrailingWs: Boolean + get() = prefManager.getBoolean(FLAG_WS_TRAILING, false) + set(value) { + prefManager.putBoolean(FLAG_WS_TRAILING, value) + } + + var drawInnerWs: Boolean + get() = prefManager.getBoolean(FLAG_WS_INNER, false) + set(value) { + prefManager.putBoolean(FLAG_WS_INNER, value) + } + + var drawEmptyLineWs: Boolean + get() = prefManager.getBoolean(FLAG_WS_EMPTY_LINE, false) + set(value) { + prefManager.putBoolean(FLAG_WS_EMPTY_LINE, value) + } + + var drawLineBreak: Boolean + get() = prefManager.getBoolean(FLAG_LINE_BREAK, false) + set(value) { + prefManager.putBoolean(FLAG_LINE_BREAK, value) + } + + var fontSize: Float + get() = prefManager.getFloat(FONT_SIZE, 14f) + set(value) { + prefManager.putFloat(FONT_SIZE, value) + } + + var tabSize: Int + get() = prefManager.getInt(TAB_SIZE, 4) + set(value) { + prefManager.putInt(TAB_SIZE, value) + } + + var autoSave: Boolean + get() = prefManager.getBoolean(AUTO_SAVE, false) + set(value) { + prefManager.putBoolean(AUTO_SAVE, value) + } + + var fontLigatures: Boolean + get() = prefManager.getBoolean(FONT_LIGATURES, true) + set(value) { + prefManager.putBoolean(FONT_LIGATURES, value) + } + + var visiblePasswordFlag: Boolean + get() = prefManager.getBoolean(FLAG_PASSWORD, true) + set(value) { + prefManager.putBoolean(FLAG_PASSWORD, value) + } + + var wordwrap: Boolean + get() = prefManager.getBoolean(WORD_WRAP, false) + set(value) { + prefManager.putBoolean(WORD_WRAP, value) + } + + var useMagnifier: Boolean + get() = prefManager.getBoolean(USE_MAGNIFER, true) + set(value) { + prefManager.putBoolean(USE_MAGNIFER, value) + } + + var useIcu: Boolean + get() = prefManager.getBoolean(USE_ICU, false) + set(value) { + prefManager.putBoolean(USE_ICU, value) + } + + var useSoftTab: Boolean + get() = prefManager.getBoolean(USE_SOFT_TAB, true) + set(value) { + prefManager.putBoolean(USE_SOFT_TAB, value) + } + + var useCustomFont: Boolean + get() = prefManager.getBoolean(USE_CUSTOM_FONT, false) + set(value) { + prefManager.putBoolean(USE_CUSTOM_FONT, value) + } + + var colorScheme: String + get() = prefManager.getString(COLOR_SCHEME, DEFAULT_COLOR_SCHEME) + set(value) { + prefManager.putString(COLOR_SCHEME, value) + } + + var deleteEmptyLines: Boolean + get() = prefManager.getBoolean(DELETE_EMPTY_LINES, true) + set(value) { + prefManager.putBoolean(DELETE_EMPTY_LINES, value) + } + + var deleteTabsOnBackspace: Boolean + get() = prefManager.getBoolean(DELETE_TABS_ON_BACKSPACE, true) + set(value) { + prefManager.putBoolean(DELETE_TABS_ON_BACKSPACE, value) + } + + var stickyScrollEnabled: Boolean + get() = prefManager.getBoolean(STICKY_SCROLL_ENABLED, false) + set(value) { + prefManager.putBoolean(STICKY_SCROLL_ENABLED, value) + } + + var pinLineNumbers: Boolean + get() = prefManager.getBoolean(PIN_LINE_NUMBERS, true) + set(value) = prefManager.putBoolean(PIN_LINE_NUMBERS, value) +} \ No newline at end of file diff --git a/preferences/src/main/java/com/itsaky/androidide/preferences/internal/GeneralPreferences.kt b/preferences/src/main/java/com/itsaky/androidide/preferences/internal/GeneralPreferences.kt new file mode 100644 index 000000000..afc78fda8 --- /dev/null +++ b/preferences/src/main/java/com/itsaky/androidide/preferences/internal/GeneralPreferences.kt @@ -0,0 +1,98 @@ +/* + * This file is part of AndroidIDE. + * + * AndroidIDE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AndroidIDE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with AndroidIDE. If not, see . + */ + +package com.itsaky.androidide.preferences.internal + +import androidx.appcompat.app.AppCompatDelegate +import com.itsaky.androidide.resources.localization.LocaleProvider + +/** + * @author Akash Yadav + */ +@Suppress("MemberVisibilityCanBePrivate") +object GeneralPreferences { + + const val IS_FIRST_PROJECT_BUILD = "project_isFirstBuild" + const val UI_MODE = "idepref_general_uiMode" + const val SELECTED_THEME = "idpref_general_theme" + const val SELECTED_LOCALE = "idpref_general_locale" + const val OPEN_PROJECTS = "idepref_general_autoOpenProjects" + const val CONFIRM_PROJECT_OPEN = "idepref_general_confirmProjectOpen" + const val TERMINAL_USE_SYSTEM_SHELL = "idepref_general_terminalShell" + const val LAST_OPENED_PROJECT = "ide_last_project" + + const val NO_OPENED_PROJECT = "" + + var uiMode: Int + get() = prefManager.getInt(UI_MODE, AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM) + set(value) { + prefManager.putInt(UI_MODE, value) + } + + var selectedTheme: String? + get() = prefManager.getString(SELECTED_THEME, null) + set(value) { + prefManager.putString(SELECTED_THEME, value) + } + + var selectedLocale: String? + get() = prefManager.getString(SELECTED_LOCALE, null).let { locale -> + + // if the locale is set to a locale key that is not supported, + // fall back to 'System default' + if (LocaleProvider.getLocale(locale) == null) { + null + } else { + locale + } + } + set(value) { + prefManager.putString(SELECTED_LOCALE, value) + } + + var isFirstBuild: Boolean + get() = prefManager.getBoolean(IS_FIRST_PROJECT_BUILD, true) + set(value) { + prefManager.putBoolean(IS_FIRST_PROJECT_BUILD, value) + } + + var autoOpenProjects: Boolean + get() = prefManager.getBoolean(OPEN_PROJECTS, true) + set(value) { + prefManager.putBoolean(OPEN_PROJECTS, value) + } + + var confirmProjectOpen: Boolean + get() = prefManager.getBoolean(CONFIRM_PROJECT_OPEN, false) + set(value) { + prefManager.putBoolean(CONFIRM_PROJECT_OPEN, value) + } + + var useSystemShell: Boolean + get() = prefManager.getBoolean(TERMINAL_USE_SYSTEM_SHELL, false) + set(value) { + prefManager.putBoolean(TERMINAL_USE_SYSTEM_SHELL, value) + } + + var lastOpenedProject: String + get() = prefManager.getString(LAST_OPENED_PROJECT, NO_OPENED_PROJECT) + set(value) { + prefManager.putString(LAST_OPENED_PROJECT, value) + } + + +} \ No newline at end of file diff --git a/preferences/src/main/java/com/itsaky/androidide/preferences/internal/statPreferences.kt b/preferences/src/main/java/com/itsaky/androidide/preferences/internal/JavaPreferences.kt similarity index 52% rename from preferences/src/main/java/com/itsaky/androidide/preferences/internal/statPreferences.kt rename to preferences/src/main/java/com/itsaky/androidide/preferences/internal/JavaPreferences.kt index f50bab91e..457175443 100644 --- a/preferences/src/main/java/com/itsaky/androidide/preferences/internal/statPreferences.kt +++ b/preferences/src/main/java/com/itsaky/androidide/preferences/internal/JavaPreferences.kt @@ -17,24 +17,26 @@ package com.itsaky.androidide.preferences.internal -const val STAT_COLLECTION_CONSENT_SHOWN = "ide.stats.consentShown" -const val STAT_OPT_IN = "ide.stats.optIn" -const val STAT_LAST_REPORTED = "ide.stats.lastReported" +/** + * @author Akash Yadav + */ +@Suppress("MemberVisibilityCanBePrivate") +object JavaPreferences { -var statConsentDialogShown: Boolean - get() = prefManager.getBoolean(STAT_COLLECTION_CONSENT_SHOWN, false) - set(value) { - prefManager.putBoolean(STAT_COLLECTION_CONSENT_SHOWN, value) - } + const val GOOGLE_CODE_STYLE = "idepref_editor_java_googleCodeStyle" + const val JAVA_DIAGNOSTICS_ENABLED = "idepref_editor_java_diagnosticsEnabled" -var statOptIn: Boolean - get() = prefManager.getBoolean(STAT_OPT_IN, true) - set(value) { - prefManager.putBoolean(STAT_OPT_IN, value) - } + var googleCodeStyle: Boolean + get() = prefManager.getBoolean(GOOGLE_CODE_STYLE, false) + set(value) { + prefManager.putBoolean(GOOGLE_CODE_STYLE, value) + } -var statLastReported: Long - get() = prefManager.getLong(STAT_LAST_REPORTED, 0L) - set(value) { - prefManager.putLong(STAT_LAST_REPORTED, value) - } \ No newline at end of file + /** Whether diagnostics are enabled for the Java source files. */ + var isJavaDiagnosticsEnabled: Boolean + get() = prefManager.getBoolean(JAVA_DIAGNOSTICS_ENABLED, true) + set(value) { + prefManager.putBoolean(JAVA_DIAGNOSTICS_ENABLED, value) + } + +} \ No newline at end of file diff --git a/preferences/src/main/java/com/itsaky/androidide/preferences/internal/StatPreferences.kt b/preferences/src/main/java/com/itsaky/androidide/preferences/internal/StatPreferences.kt new file mode 100644 index 000000000..499be8d57 --- /dev/null +++ b/preferences/src/main/java/com/itsaky/androidide/preferences/internal/StatPreferences.kt @@ -0,0 +1,47 @@ +/* + * This file is part of AndroidIDE. + * + * AndroidIDE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AndroidIDE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with AndroidIDE. If not, see . + */ + +package com.itsaky.androidide.preferences.internal + +/** + * @author Akash Yadav + */ +@Suppress("MemberVisibilityCanBePrivate") +object StatPreferences { + + const val STAT_COLLECTION_CONSENT_SHOWN = "ide.stats.consentShown" + const val STAT_OPT_IN = "ide.stats.optIn" + const val STAT_LAST_REPORTED = "ide.stats.lastReported" + + var statConsentDialogShown: Boolean + get() = prefManager.getBoolean(STAT_COLLECTION_CONSENT_SHOWN, false) + set(value) { + prefManager.putBoolean(STAT_COLLECTION_CONSENT_SHOWN, value) + } + + var statOptIn: Boolean + get() = prefManager.getBoolean(STAT_OPT_IN, true) + set(value) { + prefManager.putBoolean(STAT_OPT_IN, value) + } + + var statLastReported: Long + get() = prefManager.getLong(STAT_LAST_REPORTED, 0L) + set(value) { + prefManager.putLong(STAT_LAST_REPORTED, value) + } +} \ No newline at end of file diff --git a/preferences/src/main/java/com/itsaky/androidide/preferences/internal/XmlPreferences.kt b/preferences/src/main/java/com/itsaky/androidide/preferences/internal/XmlPreferences.kt new file mode 100644 index 000000000..178543e74 --- /dev/null +++ b/preferences/src/main/java/com/itsaky/androidide/preferences/internal/XmlPreferences.kt @@ -0,0 +1,131 @@ +/* + * This file is part of AndroidIDE. + * + * AndroidIDE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AndroidIDE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with AndroidIDE. If not, see . + */ + +package com.itsaky.androidide.preferences.internal + +/** + * @author Akash Yadav + */ +@Suppress("MemberVisibilityCanBePrivate") +object XmlPreferences { + + const val TRIM_FINAL_NEW_LINE = "idepref_xml_trimFinalNewLine" + const val INSERT_FINAL_NEW_LINE = "idepref_xml_insertFinalNewLine" + const val SPLIT_ATTRIBUTES = "idepref_xml_splitAttributes" + const val JOIN_CDATA_LINES = "idepref_xml_joinCDataLines" + const val JOIN_COMMENT_LINES = "idepref_xml_joinCommentLines" + const val JOIN_CONTENT_LINES = "idepref_xml_joinContentLines" + const val SPACE_BEFORE_EMPTY_CLOSE_TAG = "idepref_xml_spaceBeforeEmptyCloseTag" + const val PRESERVE_EMPTY_CONTENT = "idepref_xml_preserveEmptyContent" + const val PRESERVE_ATTRIBUTE_LINE_BREAKS = "idepref_xml_preserveAttributeLineBreaks" + const val CLOSING_BRACKET_NEW_LINE = "idepref_xml_closingBracketNewLine" + const val TRIM_TRAILING_WHITESPACE = "idepref_xml_trimTrailingWhitespace" + const val MAX_LINE_WIDTH = "idepref_xml_maxLineWidth" + const val PRESERVED_NEW_LINES = "idepref_xml_preservedNewLines" + const val SPLIT_ATTRIBUTES_INDENT_SIZE = "idepref_xml_splitAttributesIndentSize" + const val EMPTY_ELEMENTS_BEHAVIOR = "idepref_xml_emptyElementsBehavior" + + var trimFinalNewLine: Boolean + get() = prefManager.getBoolean(TRIM_FINAL_NEW_LINE, false) + set(value) { + prefManager.putBoolean(TRIM_FINAL_NEW_LINE, value) + } + + var insertFinalNewLine: Boolean + get() = prefManager.getBoolean(INSERT_FINAL_NEW_LINE, true) + set(value) { + prefManager.putBoolean(INSERT_FINAL_NEW_LINE, value) + } + + var splitAttributes: Boolean + get() = prefManager.getBoolean(SPLIT_ATTRIBUTES, true) + set(value) { + prefManager.putBoolean(SPLIT_ATTRIBUTES, value) + } + + var joinCDataLines: Boolean + get() = prefManager.getBoolean(JOIN_CDATA_LINES, false) + set(value) { + prefManager.putBoolean(JOIN_CDATA_LINES, value) + } + + var joinCommentLines: Boolean + get() = prefManager.getBoolean(JOIN_COMMENT_LINES, true) + set(value) { + prefManager.putBoolean(JOIN_COMMENT_LINES, value) + } + + var joinContentLines: Boolean + get() = prefManager.getBoolean(JOIN_CONTENT_LINES, false) + set(value) { + prefManager.putBoolean(JOIN_CONTENT_LINES, value) + } + + var spaceBeforeEmptyCloseTag: Boolean + get() = prefManager.getBoolean(SPACE_BEFORE_EMPTY_CLOSE_TAG, true) + set(value) { + prefManager.putBoolean(SPACE_BEFORE_EMPTY_CLOSE_TAG, value) + } + + var preserveEmptyContent: Boolean + get() = prefManager.getBoolean(PRESERVE_EMPTY_CONTENT, true) + set(value) { + prefManager.putBoolean(PRESERVE_EMPTY_CONTENT, value) + } + + var preserveAttributeLineBreaks: Boolean + get() = prefManager.getBoolean(PRESERVE_ATTRIBUTE_LINE_BREAKS, true) + set(value) { + prefManager.putBoolean(PRESERVE_ATTRIBUTE_LINE_BREAKS, value) + } + + var closingBracketNewLine: Boolean + get() = prefManager.getBoolean(CLOSING_BRACKET_NEW_LINE, false) + set(value) { + prefManager.putBoolean(CLOSING_BRACKET_NEW_LINE, value) + } + + var trimTrailingWhitespace: Boolean + get() = prefManager.getBoolean(TRIM_TRAILING_WHITESPACE, true) + set(value) { + prefManager.putBoolean(TRIM_TRAILING_WHITESPACE, value) + } + + var maxLineWidth: Int + get() = prefManager.getInt(MAX_LINE_WIDTH, 80) + set(value) { + prefManager.putInt(MAX_LINE_WIDTH, value) + } + + var preservedNewLines: Int + get() = prefManager.getInt(PRESERVED_NEW_LINES, 2) + set(value) { + prefManager.putInt(PRESERVED_NEW_LINES, value) + } + + var splitAttributesIndentSize: Int + get() = prefManager.getInt(SPLIT_ATTRIBUTES_INDENT_SIZE, EditorPreferences.tabSize / 2) + set(value) { + prefManager.putInt(SPLIT_ATTRIBUTES_INDENT_SIZE, value) + } + + var emptyElementsBehavior: String + get() = prefManager.getString(EMPTY_ELEMENTS_BEHAVIOR, "Collapse") + set(value) { + prefManager.putString(EMPTY_ELEMENTS_BEHAVIOR, value) + } +} \ No newline at end of file diff --git a/preferences/src/main/java/com/itsaky/androidide/preferences/internal/buildPreferences.kt b/preferences/src/main/java/com/itsaky/androidide/preferences/internal/buildPreferences.kt deleted file mode 100644 index 945ed054a..000000000 --- a/preferences/src/main/java/com/itsaky/androidide/preferences/internal/buildPreferences.kt +++ /dev/null @@ -1,110 +0,0 @@ -/* - * This file is part of AndroidIDE. - * - * AndroidIDE is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * AndroidIDE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with AndroidIDE. If not, see . - */ - -package com.itsaky.androidide.preferences.internal - -import com.itsaky.androidide.utils.Environment - -// Defined in PreferenceManager so that it could be accessible from Environment class - -const val STACKTRACE = "idepref_gradleCmd_stacktrace" -const val DEBUG = "idepref_gradleCmd_debug" -const val SCAN = "idepref_gradleCmd_scan" -const val INFO = "idepref_gradleCmd_info" -const val WARNING_MODE = "idepref_gradleCmd_warningMode" -const val BUILD_CACHE = "idepref_gradleCmd_buildCache" -const val OFFLINE_MODE = "idepref_gradleCmd_offlineMode" - -const val GRADLE_COMMANDS = "idepref_build_gradleCommands" -const val GRADLE_CLEAR_CACHE = "idepref_build_gradleClearCache" -const val CUSTOM_GRADLE_INSTALLATION = "idepref_build_customGradleInstallation" -const val LAUNCH_APP_AFTER_INSTALL = "ide.build.run.launchAppAfterInstall" -const val PREF_JAVA_HOME = "ide.build.javaHome" - -/** Switch for Gradle `--debug` option. */ -var isDebugEnabled: Boolean - get() = prefManager.getBoolean(DEBUG) - set(enabled) { - prefManager.putBoolean(DEBUG, enabled) - } - -/** Switch for Gradle `--scan` option. */ -var isScanEnabled: Boolean - get() = prefManager.getBoolean(SCAN) - set(enabled) { - prefManager.putBoolean(SCAN, enabled) - } - -/** Switch for Gradle `--warning-mode all` option. */ -var isWarningModeAllEnabled: Boolean - get() = prefManager.getBoolean(WARNING_MODE) - set(enabled) { - prefManager.putBoolean(WARNING_MODE, enabled) - } - -/** Switch for Gradle `--build-cache` option. */ -var isBuildCacheEnabled: Boolean - get() = prefManager.getBoolean(BUILD_CACHE) - set(enabled) { - prefManager.putBoolean(BUILD_CACHE, enabled) - } - -/** Switch for Gradle `--offline` option. */ -var isOfflineEnabled: Boolean - get() = prefManager.getBoolean(OFFLINE_MODE) - set(enabled) { - prefManager.putBoolean(OFFLINE_MODE, enabled) - } - -/** Switch for Gradle `--stacktrace` option. */ -var isStacktraceEnabled: Boolean - get() = prefManager.getBoolean(STACKTRACE) - set(value) { - prefManager.putBoolean(STACKTRACE, value) - } - -/** Switch for Gradle `--info` option. */ -var isInfoEnabled: Boolean - get() = prefManager.getBoolean(INFO, isFirstBuild) - set(enabled) { - prefManager.putBoolean(INFO, enabled) - } - -/** Custom Gradle installation directory path. */ -var gradleInstallationDir: String - get() = prefManager.getString(CUSTOM_GRADLE_INSTALLATION, "") - set(value) { - prefManager.putString(CUSTOM_GRADLE_INSTALLATION, value) - } - -/** - * Whether the app should be launched automatically after installation (after build). - */ -var launchAppAfterInstall: Boolean - get() = prefManager.getBoolean(LAUNCH_APP_AFTER_INSTALL, false) - set(value) { - prefManager.putBoolean(LAUNCH_APP_AFTER_INSTALL, value) - } - -/** - * The selected Java installation. - */ -var javaHome : String - get() = prefManager.getString(PREF_JAVA_HOME, "") - set(value) { - prefManager.putString(PREF_JAVA_HOME, value) - } \ No newline at end of file diff --git a/preferences/src/main/java/com/itsaky/androidide/preferences/internal/editorPreferences.kt b/preferences/src/main/java/com/itsaky/androidide/preferences/internal/editorPreferences.kt deleted file mode 100644 index 8489b82ab..000000000 --- a/preferences/src/main/java/com/itsaky/androidide/preferences/internal/editorPreferences.kt +++ /dev/null @@ -1,168 +0,0 @@ -/* - * This file is part of AndroidIDE. - * - * AndroidIDE is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * AndroidIDE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with AndroidIDE. If not, see . - */ - -package com.itsaky.androidide.preferences.internal - -const val COMPLETIONS_MATCH_LOWER = "idepref_editor_completions_matchLower" - -const val FLAG_WS_LEADING = "idepref_editor_wsLeading" -const val FLAG_WS_TRAILING = "idepref_editor_wsTrailing" -const val FLAG_WS_INNER = "idepref_editor_wsInner" -const val FLAG_WS_EMPTY_LINE = "idepref_editor_wsEmptyLine" -const val FLAG_LINE_BREAK = "idepref_editor_lineBreak" -const val FONT_SIZE = "idepref_editor_fontSize" -const val PRINTABLE_CHARS = "idepref_editor_nonPrintableFlags" -const val TAB_SIZE = "idepref_editor_tabSize" -const val AUTO_SAVE = "idepref_editor_autoSave" -const val FONT_LIGATURES = "idepref_editor_fontLigatures" -const val FLAG_PASSWORD = "idepref_editor_flagPassword" -const val WORD_WRAP = "idepref_editor_word_wrap" -const val USE_MAGNIFER = "idepref_editor_use_magnifier" -const val USE_ICU = "idepref_editor_useIcu" -const val USE_SOFT_TAB = "idepref_editor_useSoftTab" -const val USE_CUSTOM_FONT = "idepref_editor_useCustomFont" -const val DELETE_EMPTY_LINES = "idepref_editor_deleteEmptyLines" -const val DELETE_TABS_ON_BACKSPACE = "idepref_editor_deleteTab" -const val STICKY_SCROLL_ENABLED = "idepref_editor_stickyScrollEnabled" -const val PIN_LINE_NUMBERS = "idepref_editor_pinLineNumbers" - -const val COLOR_SCHEME = "idepref_editor_colorScheme" -const val DEFAULT_COLOR_SCHEME = "default" - -var completionsMatchLower: Boolean - get() = prefManager.getBoolean(COMPLETIONS_MATCH_LOWER, false) - set(value) { - prefManager.putBoolean(COMPLETIONS_MATCH_LOWER, value) - } - -var drawLeadingWs: Boolean - get() = prefManager.getBoolean(FLAG_WS_LEADING, false) - set(value) { - prefManager.putBoolean(FLAG_WS_LEADING, value) - } - -var drawTrailingWs: Boolean - get() = prefManager.getBoolean(FLAG_WS_TRAILING, false) - set(value) { - prefManager.putBoolean(FLAG_WS_TRAILING, value) - } - -var drawInnerWs: Boolean - get() = prefManager.getBoolean(FLAG_WS_INNER, false) - set(value) { - prefManager.putBoolean(FLAG_WS_INNER, value) - } - -var drawEmptyLineWs: Boolean - get() = prefManager.getBoolean(FLAG_WS_EMPTY_LINE, false) - set(value) { - prefManager.putBoolean(FLAG_WS_EMPTY_LINE, value) - } - -var drawLineBreak: Boolean - get() = prefManager.getBoolean(FLAG_LINE_BREAK, false) - set(value) { - prefManager.putBoolean(FLAG_LINE_BREAK, value) - } - -var fontSize: Float - get() = prefManager.getFloat(FONT_SIZE, 14f) - set(value) { - prefManager.putFloat(FONT_SIZE, value) - } - -var tabSize: Int - get() = prefManager.getInt(TAB_SIZE, 4) - set(value) { - prefManager.putInt(TAB_SIZE, value) - } - -var autoSave: Boolean - get() = prefManager.getBoolean(AUTO_SAVE, false) - set(value) { - prefManager.putBoolean(AUTO_SAVE, value) - } - -var fontLigatures: Boolean - get() = prefManager.getBoolean(FONT_LIGATURES, true) - set(value) { - prefManager.putBoolean(FONT_LIGATURES, value) - } - -var visiblePasswordFlag: Boolean - get() = prefManager.getBoolean(FLAG_PASSWORD, true) - set(value) { - prefManager.putBoolean(FLAG_PASSWORD, value) - } - -var wordwrap: Boolean - get() = prefManager.getBoolean(WORD_WRAP, false) - set(value) { - prefManager.putBoolean(WORD_WRAP, value) - } - -var useMagnifier: Boolean - get() = prefManager.getBoolean(USE_MAGNIFER, true) - set(value) { - prefManager.putBoolean(USE_MAGNIFER, value) - } - -var useIcu: Boolean - get() = prefManager.getBoolean(USE_ICU, false) - set(value) { - prefManager.putBoolean(USE_ICU, value) - } - -var useSoftTab: Boolean - get() = prefManager.getBoolean(USE_SOFT_TAB, true) - set(value) { - prefManager.putBoolean(USE_SOFT_TAB, value) - } - -var useCustomFont: Boolean - get() = prefManager.getBoolean(USE_CUSTOM_FONT, false) - set(value) { - prefManager.putBoolean(USE_CUSTOM_FONT, value) - } - -var colorScheme: String - get() = prefManager.getString(COLOR_SCHEME, DEFAULT_COLOR_SCHEME) - set(value) { - prefManager.putString(COLOR_SCHEME, value) - } - -var deleteEmptyLines: Boolean - get() = prefManager.getBoolean(DELETE_EMPTY_LINES, true) - set(value) { - prefManager.putBoolean(DELETE_EMPTY_LINES, value) - } - -var deleteTabsOnBackspace: Boolean - get() = prefManager.getBoolean(DELETE_TABS_ON_BACKSPACE, true) - set(value) { - prefManager.putBoolean(DELETE_TABS_ON_BACKSPACE, value) - } - -var stickyScrollEnabled: Boolean - get() = prefManager.getBoolean(STICKY_SCROLL_ENABLED, false) - set(value) { - prefManager.putBoolean(STICKY_SCROLL_ENABLED, value) - } - -var pinLineNumbers: Boolean - get() = prefManager.getBoolean(PIN_LINE_NUMBERS, true) - set(value) = prefManager.putBoolean(PIN_LINE_NUMBERS, value) diff --git a/preferences/src/main/java/com/itsaky/androidide/preferences/internal/generalPreferences.kt b/preferences/src/main/java/com/itsaky/androidide/preferences/internal/generalPreferences.kt deleted file mode 100644 index 3662839e6..000000000 --- a/preferences/src/main/java/com/itsaky/androidide/preferences/internal/generalPreferences.kt +++ /dev/null @@ -1,89 +0,0 @@ -/* - * This file is part of AndroidIDE. - * - * AndroidIDE is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * AndroidIDE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with AndroidIDE. If not, see . - */ - -package com.itsaky.androidide.preferences.internal - -import androidx.appcompat.app.AppCompatDelegate -import com.itsaky.androidide.resources.localization.LocaleProvider - -const val IS_FIRST_PROJECT_BUILD = "project_isFirstBuild" -const val UI_MODE = "idepref_general_uiMode" -const val SELECTED_THEME = "idpref_general_theme" -const val SELECTED_LOCALE = "idpref_general_locale" -const val OPEN_PROJECTS = "idepref_general_autoOpenProjects" -const val CONFIRM_PROJECT_OPEN = "idepref_general_confirmProjectOpen" -const val TERMINAL_USE_SYSTEM_SHELL = "idepref_general_terminalShell" -const val LAST_OPENED_PROJECT = "ide_last_project" - -const val NO_OPENED_PROJECT = "" - -var uiMode: Int - get() = prefManager.getInt(UI_MODE, AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM) - set(value) { - prefManager.putInt(UI_MODE, value) - } - -var selectedTheme: String? - get() = prefManager.getString(SELECTED_THEME, null) - set(value) { - prefManager.putString(SELECTED_THEME, value) - } - -var selectedLocale: String? - get() = prefManager.getString(SELECTED_LOCALE, null).let { locale -> - - // if the locale is set to a locale key that is not supported, - // fall back to 'System default' - if (LocaleProvider.getLocale(locale) == null) { - null - } else { - locale - } - } - set(value) { - prefManager.putString(SELECTED_LOCALE, value) - } - -var isFirstBuild: Boolean - get() = prefManager.getBoolean(IS_FIRST_PROJECT_BUILD, true) - set(value) { - prefManager.putBoolean(IS_FIRST_PROJECT_BUILD, value) - } - -var autoOpenProjects: Boolean - get() = prefManager.getBoolean(OPEN_PROJECTS, true) - set(value) { - prefManager.putBoolean(OPEN_PROJECTS, value) - } - -var confirmProjectOpen: Boolean - get() = prefManager.getBoolean(CONFIRM_PROJECT_OPEN, false) - set(value) { - prefManager.putBoolean(CONFIRM_PROJECT_OPEN, value) - } - -var useSystemShell: Boolean - get() = prefManager.getBoolean(TERMINAL_USE_SYSTEM_SHELL, false) - set(value) { - prefManager.putBoolean(TERMINAL_USE_SYSTEM_SHELL, value) - } - -var lastOpenedProject: String - get() = prefManager.getString(LAST_OPENED_PROJECT, NO_OPENED_PROJECT) - set(value) { - prefManager.putString(LAST_OPENED_PROJECT, value) - } diff --git a/preferences/src/main/java/com/itsaky/androidide/preferences/internal/javaPreferences.kt b/preferences/src/main/java/com/itsaky/androidide/preferences/internal/javaPreferences.kt deleted file mode 100644 index ce61b8a02..000000000 --- a/preferences/src/main/java/com/itsaky/androidide/preferences/internal/javaPreferences.kt +++ /dev/null @@ -1,34 +0,0 @@ -/* - * This file is part of AndroidIDE. - * - * AndroidIDE is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * AndroidIDE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with AndroidIDE. If not, see . - */ - -package com.itsaky.androidide.preferences.internal - -const val GOOGLE_CODE_STYLE = "idepref_editor_java_googleCodeStyle" -const val JAVA_DIAGNOSTICS_ENABLED = "idepref_editor_java_diagnosticsEnabled" - -var googleCodeStyle: Boolean - get() = prefManager.getBoolean(GOOGLE_CODE_STYLE, false) - set(value) { - prefManager.putBoolean(GOOGLE_CODE_STYLE, value) - } - -/** Whether diagnostics are enabled for the Java source files. */ -var isJavaDiagnosticsEnabled: Boolean - get() = prefManager.getBoolean(JAVA_DIAGNOSTICS_ENABLED, true) - set(value) { - prefManager.putBoolean(JAVA_DIAGNOSTICS_ENABLED, value) - } diff --git a/preferences/src/main/java/com/itsaky/androidide/preferences/internal/preferences.kt b/preferences/src/main/java/com/itsaky/androidide/preferences/internal/preferences.kt index d374217d1..399ff89ab 100644 --- a/preferences/src/main/java/com/itsaky/androidide/preferences/internal/preferences.kt +++ b/preferences/src/main/java/com/itsaky/androidide/preferences/internal/preferences.kt @@ -20,6 +20,8 @@ package com.itsaky.androidide.preferences.internal import com.itsaky.androidide.app.BaseApplication import com.itsaky.androidide.managers.PreferenceManager -/** @author Akash Yadav */ +/** + * The global preference manager instance. + */ val prefManager: PreferenceManager get() = BaseApplication.getBaseInstance().prefManager diff --git a/preferences/src/main/java/com/itsaky/androidide/preferences/internal/xmlPreferences.kt b/preferences/src/main/java/com/itsaky/androidide/preferences/internal/xmlPreferences.kt deleted file mode 100644 index 977fa0129..000000000 --- a/preferences/src/main/java/com/itsaky/androidide/preferences/internal/xmlPreferences.kt +++ /dev/null @@ -1,124 +0,0 @@ -/* - * This file is part of AndroidIDE. - * - * AndroidIDE is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * AndroidIDE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with AndroidIDE. If not, see . - */ - -package com.itsaky.androidide.preferences.internal - -const val TRIM_FINAL_NEW_LINE = "idepref_xml_trimFinalNewLine" -const val INSERT_FINAL_NEW_LINE = "idepref_xml_insertFinalNewLine" -const val SPLIT_ATTRIBUTES = "idepref_xml_splitAttributes" -const val JOIN_CDATA_LINES = "idepref_xml_joinCDataLines" -const val JOIN_COMMENT_LINES = "idepref_xml_joinCommentLines" -const val JOIN_CONTENT_LINES = "idepref_xml_joinContentLines" -const val SPACE_BEFORE_EMPTY_CLOSE_TAG = "idepref_xml_spaceBeforeEmptyCloseTag" -const val PRESERVE_EMPTY_CONTENT = "idepref_xml_preserveEmptyContent" -const val PRESERVE_ATTRIBUTE_LINE_BREAKS = "idepref_xml_preserveAttributeLineBreaks" -const val CLOSING_BRACKET_NEW_LINE = "idepref_xml_closingBracketNewLine" -const val TRIM_TRAILING_WHITESPACE = "idepref_xml_trimTrailingWhitespace" -const val MAX_LINE_WIDTH = "idepref_xml_maxLineWidth" -const val PRESERVED_NEW_LINES = "idepref_xml_preservedNewLines" -const val SPLIT_ATTRIBUTES_INDENT_SIZE = "idepref_xml_splitAttributesIndentSize" -const val EMPTY_ELEMENTS_BEHAVIOR = "idepref_xml_emptyElementsBehavior" - -var trimFinalNewLine: Boolean - get() = prefManager.getBoolean(TRIM_FINAL_NEW_LINE, false) - set(value) { - prefManager.putBoolean(TRIM_FINAL_NEW_LINE, value) - } - -var insertFinalNewLine: Boolean - get() = prefManager.getBoolean(INSERT_FINAL_NEW_LINE, true) - set(value) { - prefManager.putBoolean(INSERT_FINAL_NEW_LINE, value) - } - -var splitAttributes: Boolean - get() = prefManager.getBoolean(SPLIT_ATTRIBUTES, true) - set(value) { - prefManager.putBoolean(SPLIT_ATTRIBUTES, value) - } - -var joinCDataLines: Boolean - get() = prefManager.getBoolean(JOIN_CDATA_LINES, false) - set(value) { - prefManager.putBoolean(JOIN_CDATA_LINES, value) - } - -var joinCommentLines: Boolean - get() = prefManager.getBoolean(JOIN_COMMENT_LINES, true) - set(value) { - prefManager.putBoolean(JOIN_COMMENT_LINES, value) - } - -var joinContentLines: Boolean - get() = prefManager.getBoolean(JOIN_CONTENT_LINES, false) - set(value) { - prefManager.putBoolean(JOIN_CONTENT_LINES, value) - } - -var spaceBeforeEmptyCloseTag: Boolean - get() = prefManager.getBoolean(SPACE_BEFORE_EMPTY_CLOSE_TAG, true) - set(value) { - prefManager.putBoolean(SPACE_BEFORE_EMPTY_CLOSE_TAG, value) - } - -var preserveEmptyContent: Boolean - get() = prefManager.getBoolean(PRESERVE_EMPTY_CONTENT, true) - set(value) { - prefManager.putBoolean(PRESERVE_EMPTY_CONTENT, value) - } - -var preserveAttributeLineBreaks: Boolean - get() = prefManager.getBoolean(PRESERVE_ATTRIBUTE_LINE_BREAKS, true) - set(value) { - prefManager.putBoolean(PRESERVE_ATTRIBUTE_LINE_BREAKS, value) - } - -var closingBracketNewLine: Boolean - get() = prefManager.getBoolean(CLOSING_BRACKET_NEW_LINE, false) - set(value) { - prefManager.putBoolean(CLOSING_BRACKET_NEW_LINE, value) - } - -var trimTrailingWhitespace: Boolean - get() = prefManager.getBoolean(TRIM_TRAILING_WHITESPACE, true) - set(value) { - prefManager.putBoolean(TRIM_TRAILING_WHITESPACE, value) - } - -var maxLineWidth: Int - get() = prefManager.getInt(MAX_LINE_WIDTH, 80) - set(value) { - prefManager.putInt(MAX_LINE_WIDTH, value) - } - -var preservedNewLines: Int - get() = prefManager.getInt(PRESERVED_NEW_LINES, 2) - set(value) { - prefManager.putInt(PRESERVED_NEW_LINES, value) - } - -var splitAttributesIndentSize: Int - get() = prefManager.getInt(SPLIT_ATTRIBUTES_INDENT_SIZE, tabSize / 2) - set(value) { - prefManager.putInt(SPLIT_ATTRIBUTES_INDENT_SIZE, value) - } - -var emptyElementsBehavior: String - get() = prefManager.getString(EMPTY_ELEMENTS_BEHAVIOR, "Collapse") - set(value) { - prefManager.putString(EMPTY_ELEMENTS_BEHAVIOR, value) - } \ No newline at end of file diff --git a/preferences/src/main/java/com/itsaky/androidide/preferences/utils/editorUtil.kt b/preferences/src/main/java/com/itsaky/androidide/preferences/utils/editorUtil.kt index 50a458159..474daf62e 100644 --- a/preferences/src/main/java/com/itsaky/androidide/preferences/utils/editorUtil.kt +++ b/preferences/src/main/java/com/itsaky/androidide/preferences/utils/editorUtil.kt @@ -17,8 +17,7 @@ package com.itsaky.androidide.preferences.utils -import com.itsaky.androidide.preferences.internal.tabSize -import com.itsaky.androidide.preferences.internal.useSoftTab +import com.itsaky.androidide.preferences.internal.EditorPreferences /** @author Akash Yadav */ @@ -27,11 +26,11 @@ import com.itsaky.androidide.preferences.internal.useSoftTab * '\t'. */ val indentationChar: Char - get() = if (useSoftTab) ' ' else '\t' + get() = if (EditorPreferences.useSoftTab) ' ' else '\t' /** Get the string which should be used as indentation while generating code. */ val indentationString: String - get() = if (useSoftTab) " ".repeat(tabSize) else "\t" + get() = if (EditorPreferences.useSoftTab) " ".repeat(EditorPreferences.tabSize) else "\t" /** * Creates the indentation string for the given number of spaces. The result is simply @@ -42,6 +41,6 @@ val indentationString: String * @return The indentation string. */ fun indentationString(spaceCount: Int): String { - val count = if (useSoftTab) spaceCount else spaceCount / tabSize + val count = if (EditorPreferences.useSoftTab) spaceCount else spaceCount / EditorPreferences.tabSize return indentationChar.toString().repeat(count) } diff --git a/termux/termux-shared/src/main/java/com/termux/shared/theme/ThemeUtils.java b/termux/termux-shared/src/main/java/com/termux/shared/theme/ThemeUtils.java index 72db1b78a..f2bb79931 100644 --- a/termux/termux-shared/src/main/java/com/termux/shared/theme/ThemeUtils.java +++ b/termux/termux-shared/src/main/java/com/termux/shared/theme/ThemeUtils.java @@ -1,81 +1,92 @@ package com.termux.shared.theme; -import static com.itsaky.androidide.preferences.internal.GeneralPreferencesKt.*; - import android.app.Activity; import android.content.Context; -import android.content.res.Configuration; import android.content.res.TypedArray; - import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatDelegate; +import com.itsaky.androidide.preferences.internal.GeneralPreferences; import com.itsaky.androidide.utils.ResourceUtilsKt; public class ThemeUtils { - public static final int ATTR_TEXT_COLOR_PRIMARY = android.R.attr.textColorPrimary; - public static final int ATTR_TEXT_COLOR_SECONDARY = android.R.attr.textColorSecondary; - public static final int ATTR_TEXT_COLOR = android.R.attr.textColor; - public static final int ATTR_TEXT_COLOR_LINK = android.R.attr.textColorLink; + public static final int ATTR_TEXT_COLOR_PRIMARY = android.R.attr.textColorPrimary; + public static final int ATTR_TEXT_COLOR_SECONDARY = android.R.attr.textColorSecondary; + public static final int ATTR_TEXT_COLOR = android.R.attr.textColor; + public static final int ATTR_TEXT_COLOR_LINK = android.R.attr.textColorLink; - /** - * Will return true if system has enabled night mode. - * https://developer.android.com/guide/topics/resources/providing-resources#NightQualifier - */ - public static boolean isNightModeEnabled(Context context) { - if (context == null) return false; - return ResourceUtilsKt.isSystemInDarkMode(context); + /** + * Will return true if system has enabled night mode. + * https://developer.android.com/guide/topics/resources/providing-resources#NightQualifier + */ + public static boolean isNightModeEnabled(Context context) { + if (context == null) { + return false; } + return ResourceUtilsKt.isSystemInDarkMode(context); + } - /** Will return true if mode is set to {@link NightMode#TRUE}, otherwise will return true if - * mode is set to {@link NightMode#SYSTEM} and night mode is enabled by system. */ - public static boolean shouldEnableDarkTheme(Context context, String name) { - return getUiMode() == AppCompatDelegate.getDefaultNightMode() || isNightModeEnabled(context); - } + /** + * Will return true if mode is set to {@link NightMode#TRUE}, otherwise will return true if mode + * is set to {@link NightMode#SYSTEM} and night mode is enabled by system. + */ + public static boolean shouldEnableDarkTheme(Context context, String name) { + return GeneralPreferences.INSTANCE.getUiMode() == AppCompatDelegate.getDefaultNightMode() + || isNightModeEnabled(context); + } - /** Get {@link #ATTR_TEXT_COLOR_PRIMARY} value being used by current theme. */ - public static int getTextColorPrimary(Context context) { - return getSystemAttrColor(context, ATTR_TEXT_COLOR_PRIMARY); - } + /** + * Get {@link #ATTR_TEXT_COLOR_PRIMARY} value being used by current theme. + */ + public static int getTextColorPrimary(Context context) { + return getSystemAttrColor(context, ATTR_TEXT_COLOR_PRIMARY); + } - /** Get {@link #ATTR_TEXT_COLOR_SECONDARY} value being used by current theme. */ - public static int getTextColorSecondary(Context context) { - return getSystemAttrColor(context, ATTR_TEXT_COLOR_SECONDARY); - } + /** + * Get {@link #ATTR_TEXT_COLOR_SECONDARY} value being used by current theme. + */ + public static int getTextColorSecondary(Context context) { + return getSystemAttrColor(context, ATTR_TEXT_COLOR_SECONDARY); + } - /** Get {@link #ATTR_TEXT_COLOR} value being used by current theme. */ - public static int getTextColor(Context context) { - return getSystemAttrColor(context, ATTR_TEXT_COLOR); - } + /** + * Get {@link #ATTR_TEXT_COLOR} value being used by current theme. + */ + public static int getTextColor(Context context) { + return getSystemAttrColor(context, ATTR_TEXT_COLOR); + } - /** Get {@link #ATTR_TEXT_COLOR_LINK} value being used by current theme. */ - public static int getTextColorLink(Context context) { - return getSystemAttrColor(context, ATTR_TEXT_COLOR_LINK); - } + /** + * Get {@link #ATTR_TEXT_COLOR_LINK} value being used by current theme. + */ + public static int getTextColorLink(Context context) { + return getSystemAttrColor(context, ATTR_TEXT_COLOR_LINK); + } + /** + * Wrapper for {@link #getSystemAttrColor(Context, int, int)} with {@code def} value {@code 0}. + */ + public static int getSystemAttrColor(Context context, int attr) { + return getSystemAttrColor(context, attr, 0); + } - /** Wrapper for {@link #getSystemAttrColor(Context, int, int)} with {@code def} value {@code 0}. */ - public static int getSystemAttrColor(Context context, int attr) { - return getSystemAttrColor(context, attr, 0); - } - - /** - * Get a values defined by the current heme listed in attrs. - * - * @param context The context for operations. It must be an instance of {@link Activity} or - * {@link AppCompatActivity} or one with which a theme attribute can be got. - * Do no use application context. - * @param attr The attr id. - * @param def The def value to return. - * @return Returns the {@code attr} value if found, otherwise {@code def}. - */ - public static int getSystemAttrColor(Context context, int attr, int def) { - TypedArray typedArray = context.getTheme().obtainStyledAttributes(new int[] { attr }); - int color = typedArray.getColor(0, def); - typedArray.recycle(); - return color; - } + /** + * Get a values defined by the current heme listed in attrs. + * + * @param context The context for operations. It must be an instance of {@link Activity} or + * {@link AppCompatActivity} or one with which a theme attribute can be got. Do no + * use application context. + * @param attr The attr id. + * @param def The def value to return. + * @return Returns the {@code attr} value if found, otherwise {@code def}. + */ + public static int getSystemAttrColor(Context context, int attr, int def) { + TypedArray typedArray = context.getTheme().obtainStyledAttributes(new int[]{attr}); + int color = typedArray.getColor(0, def); + typedArray.recycle(); + return color; + } } diff --git a/uidesigner/src/main/java/com/itsaky/androidide/uidesigner/ShowXmlActivity.kt b/uidesigner/src/main/java/com/itsaky/androidide/uidesigner/ShowXmlActivity.kt index dee880f29..77a72ae38 100644 --- a/uidesigner/src/main/java/com/itsaky/androidide/uidesigner/ShowXmlActivity.kt +++ b/uidesigner/src/main/java/com/itsaky/androidide/uidesigner/ShowXmlActivity.kt @@ -25,7 +25,7 @@ import com.itsaky.androidide.app.BaseIDEActivity import com.itsaky.androidide.editor.language.treesitter.XMLLanguage import com.itsaky.androidide.editor.schemes.IDEColorSchemeProvider import com.itsaky.androidide.editor.ui.IDEEditor -import com.itsaky.androidide.preferences.internal.fontSize +import com.itsaky.androidide.preferences.internal.EditorPreferences import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE import com.itsaky.androidide.uidesigner.databinding.ActivityShowXmlBinding import com.itsaky.androidide.utils.flashInfo @@ -67,7 +67,7 @@ class ShowXmlActivity : BaseIDEActivity() { editor.typefaceText = jetbrainsMono() editor.typefaceLineNumber = jetbrainsMono() editor.setText(intent?.getStringExtra(KEY_XML) ?: "") - editor.setTextSize(fontSize) + editor.setTextSize(EditorPreferences.fontSize) IDEColorSchemeProvider.readSchemeAsync( context = this,