mirror of
https://gitee.com/zhangsken/AndroidIDE.git
synced 2026-10-16 07:49:44 +08:00
fix: move pref props from top-level to class fields
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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<StatUploadWorker>(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<Operation.State> {
|
||||
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()
|
||||
|
||||
+7
-7
@@ -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")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
?: "<unknown>"
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
@@ -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<IPreference> = 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<IPreference> = 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)
|
||||
SwitchPreference(setValue = DevOpsPreferences::logsenderEnabled::set,
|
||||
getValue = DevOpsPreferences::logsenderEnabled::get)
|
||||
@@ -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<PreferenceChoices.Entry> {
|
||||
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<PreferenceChoices.Entry> {
|
||||
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<String, KMutableProperty0<Boolean>> {
|
||||
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)
|
||||
|
||||
@@ -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<PreferenceChoices.Entry> {
|
||||
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<PreferenceChoices.Entry> {
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<IPreference> = 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
|
||||
)
|
||||
|
||||
@@ -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())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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<IPreference> = 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<IPreference> = 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<PreferenceChoices.Entry> {
|
||||
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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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() {
|
||||
|
||||
+2
-2
@@ -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))
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
+2
-2
@@ -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()
|
||||
|
||||
|
||||
+5
-7
@@ -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();
|
||||
}
|
||||
|
||||
+3
-2
@@ -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? {
|
||||
|
||||
+2
-2
@@ -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";
|
||||
|
||||
|
||||
+18
-7
@@ -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<VariableTree> fieldsNeedingInitialization(ClassTree typeTree) {
|
||||
List<VariableTree> 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<Modifier> 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);
|
||||
}
|
||||
|
||||
+3
-2
@@ -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<String> 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)) {
|
||||
|
||||
+16
-15
@@ -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",
|
||||
|
||||
+2
-2
@@ -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() {
|
||||
|
||||
+2
-2
@@ -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() {
|
||||
|
||||
+35
-25
@@ -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()}
|
||||
*
|
||||
* <p>{@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()}
|
||||
*
|
||||
* <p>{@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 {
|
||||
* <p>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<DOMAttr> attrs = node.getAttributeNodes();
|
||||
if (attrs == null) {
|
||||
|
||||
+12
-9
@@ -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<TextEdit> edits) {}
|
||||
public void formatAttributeValue(DOMAttr attr, int indentLevel, List<TextEdit> edits) {
|
||||
}
|
||||
|
||||
public void removeLeftSpaces(int leftLimit, int to, List<TextEdit> 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() {
|
||||
|
||||
+113
@@ -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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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)
|
||||
}
|
||||
}
|
||||
+42
@@ -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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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)
|
||||
}
|
||||
}
|
||||
+177
@@ -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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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)
|
||||
}
|
||||
+98
@@ -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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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 = "<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)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+20
-18
@@ -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)
|
||||
}
|
||||
/** 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)
|
||||
}
|
||||
|
||||
}
|
||||
+47
@@ -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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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)
|
||||
}
|
||||
}
|
||||
+131
@@ -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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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)
|
||||
}
|
||||
}
|
||||
-110
@@ -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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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)
|
||||
}
|
||||
-168
@@ -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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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)
|
||||
-89
@@ -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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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 = "<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)
|
||||
}
|
||||
-34
@@ -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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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)
|
||||
}
|
||||
@@ -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
|
||||
|
||||
-124
@@ -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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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)
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user