diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b01011494a7..937b8be1a40 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -101,14 +101,6 @@ - - - - - - - - - - - - - - - - + + + + + + + + Unit +) { + val composeView = ComposeView(context) + + MaterialAlertDialogBuilder(context) + .setView(composeView) + .create() + .also { dialog -> + composeView.setContent { + BaseTheme { + EditorChoiceContent( + initialChoice = Prefs.editorModeChoice, + allowShowAgainCheckbox, + onCancel = { dialog.dismiss() }, + onContinue = { editorChoice, dontShowAgain -> + onResult(editorChoice, dontShowAgain) + dialog.dismiss() + } + ) + } + } + dialog.show() + } +} + +@Composable +private fun EditorChoiceContent( + initialChoice: Int, + allowShowAgainCheckbox: Boolean = true, + onCancel: () -> Unit = {}, + onContinue: (editorChoice: Int, dontShowAgain: Boolean) -> Unit = { _, _ -> } +) { + var selectedEditor by remember { mutableIntStateOf(initialChoice) } + var dontShowAgain by remember { mutableStateOf(false) } + + Column(modifier = Modifier.padding(top = 24.dp, bottom = 24.dp)) { + Text( + modifier = Modifier.padding(horizontal = 24.dp), + text = stringResource(R.string.editor_select_dialog_title), + style = MaterialTheme.typography.headlineSmall, + color = WikipediaTheme.colors.primaryColor + ) + + Spacer(modifier = Modifier.height(16.dp)) + + Text( + modifier = Modifier.padding(horizontal = 24.dp), + text = stringResource(R.string.editor_select_dialog_subtitle), + style = MaterialTheme.typography.bodyMedium, + color = WikipediaTheme.colors.secondaryColor + ) + + Spacer(modifier = Modifier.height(24.dp)) + + Column(modifier = Modifier.selectableGroup()) { + EditorOption( + title = stringResource(R.string.editor_select_dialog_ve_title), + subtitle = stringResource(R.string.editor_select_dialog_ve_subtitle), + selected = selectedEditor == EDITOR_CHOICE_VE, + onClick = { selectedEditor = EDITOR_CHOICE_VE } + ) + + HorizontalDivider( + modifier = Modifier.padding(horizontal = 16.dp), + color = WikipediaTheme.colors.borderColor + ) + + EditorOption( + title = stringResource(R.string.editor_select_dialog_source_title), + subtitle = stringResource(R.string.editor_select_dialog_source_subtitle), + selected = selectedEditor == EDITOR_CHOICE_SOURCE, + onClick = { selectedEditor = EDITOR_CHOICE_SOURCE } + ) + } + + if (allowShowAgainCheckbox) { + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp, vertical = 8.dp) + .selectable( + selected = dontShowAgain, + onClick = { dontShowAgain = !dontShowAgain }, + role = Role.Checkbox + ) + ) { + Checkbox( + checked = dontShowAgain, + onCheckedChange = null, + colors = CheckboxDefaults.colors( + checkedColor = WikipediaTheme.colors.progressiveColor, + uncheckedColor = WikipediaTheme.colors.secondaryColor, + ) + ) + Text( + modifier = Modifier.padding(start = 8.dp), + text = stringResource(R.string.editor_select_dialog_dont_show_again), + style = MaterialTheme.typography.bodyMedium, + color = WikipediaTheme.colors.primaryColor + ) + } + } + + Spacer(modifier = Modifier.height(8.dp)) + + Row( + modifier = Modifier.fillMaxWidth().padding(horizontal = 24.dp), + horizontalArrangement = Arrangement.End, + verticalAlignment = Alignment.CenterVertically + ) { + TextButton(onClick = onCancel) { + Text( + text = stringResource(android.R.string.cancel), + style = MaterialTheme.typography.labelLarge, + color = WikipediaTheme.colors.progressiveColor + ) + } + Spacer(modifier = Modifier.width(8.dp)) + AppButton( + onClick = { onContinue(selectedEditor, dontShowAgain) }, + ) { + Text(stringResource(R.string.editor_select_dialog_continue)) + } + } + } +} + +@Composable +private fun EditorOption( + title: String, + subtitle: String, + selected: Boolean, + onClick: () -> Unit +) { + Row( + modifier = Modifier + .fillMaxWidth() + .selectable( + selected = selected, + onClick = onClick, + role = Role.RadioButton + ) + .padding(16.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Column(modifier = Modifier.weight(1f)) { + Text( + text = title, + style = MaterialTheme.typography.bodyLarge, + color = WikipediaTheme.colors.primaryColor + ) + Text( + text = subtitle, + style = MaterialTheme.typography.bodyMedium, + color = WikipediaTheme.colors.secondaryColor + ) + } + RadioButton( + selected = selected, + onClick = null, + colors = RadioButtonDefaults.colors( + selectedColor = WikipediaTheme.colors.progressiveColor, + unselectedColor = WikipediaTheme.colors.secondaryColor, + ) + ) + } +} + +@Preview +@Composable +private fun EditorChoiceDialogPreview() { + BaseTheme( + currentTheme = Theme.LIGHT + ) { + EditorChoiceContent(initialChoice = EDITOR_CHOICE_SOURCE) + } +} diff --git a/app/src/main/java/org/wikipedia/main/MainActivity.kt b/app/src/main/java/org/wikipedia/main/MainActivity.kt index d1256ad159e..34eebaf5950 100644 --- a/app/src/main/java/org/wikipedia/main/MainActivity.kt +++ b/app/src/main/java/org/wikipedia/main/MainActivity.kt @@ -10,7 +10,6 @@ import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.view.ActionMode import androidx.appcompat.widget.Toolbar import androidx.core.graphics.Insets -import androidx.core.net.toUri import androidx.core.view.WindowInsetsCompat import androidx.core.view.updatePadding import androidx.fragment.app.Fragment @@ -20,11 +19,9 @@ import org.wikipedia.activity.SingleFragmentActivity import org.wikipedia.analytics.eventplatform.ImageRecommendationsEvent import org.wikipedia.analytics.eventplatform.PatrollerExperienceEvent import org.wikipedia.databinding.ActivityMainBinding -import org.wikipedia.dataclient.WikiSite import org.wikipedia.feed.FeedFragment import org.wikipedia.navtab.NavTab import org.wikipedia.onboarding.InitialOnboardingActivity -import org.wikipedia.page.PageActivity import org.wikipedia.settings.Prefs import org.wikipedia.util.DeviceUtil import org.wikipedia.util.DimenUtil @@ -85,10 +82,6 @@ class MainActivity : SingleFragmentActivity(), MainFragment.Callba supportActionBar?.title = "" supportActionBar?.setDisplayHomeAsUpEnabled(false) binding.mainToolbar.navigationIcon = null - - if (savedInstanceState == null) { - handleIntent(intent) - } } override fun onResume() { @@ -167,21 +160,6 @@ class MainActivity : SingleFragmentActivity(), MainFragment.Callba fragment.onGoOnline() } - private fun handleIntent(intent: Intent) { - if (Intent.ACTION_VIEW == intent.action && intent.data != null) { - // TODO: handle special cases of non-article content, e.g. shared reading lists. - intent.data?.let { - if (it.authority.orEmpty().endsWith(WikiSite.BASE_DOMAIN)) { - // Pass it right along to PageActivity - val uri = it.toString().replace("wikipedia://", WikiSite.DEFAULT_SCHEME + "://").toUri() - startActivity(Intent(this, PageActivity::class.java) - .setAction(Intent.ACTION_VIEW) - .setData(uri)) - } - } - } - } - fun isCurrentFragmentSelected(f: Fragment): Boolean { return fragment.currentFragment === f } diff --git a/app/src/main/java/org/wikipedia/page/PageActivity.kt b/app/src/main/java/org/wikipedia/page/PageActivity.kt index 0ae6bb08d29..2c5553a3c7d 100644 --- a/app/src/main/java/org/wikipedia/page/PageActivity.kt +++ b/app/src/main/java/org/wikipedia/page/PageActivity.kt @@ -30,6 +30,7 @@ import androidx.lifecycle.repeatOnLifecycle import androidx.preference.PreferenceManager import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.snackbar.Snackbar +import kotlinx.coroutines.CoroutineExceptionHandler import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch import org.wikipedia.Constants @@ -52,8 +53,11 @@ import org.wikipedia.dataclient.mwapi.MwQueryPage import org.wikipedia.descriptions.DescriptionEditActivity import org.wikipedia.descriptions.DescriptionEditRevertHelpView import org.wikipedia.descriptions.DescriptionEditSuccessActivity +import org.wikipedia.edit.EDITOR_CHOICE_VE import org.wikipedia.edit.EditHandler import org.wikipedia.edit.EditSectionActivity +import org.wikipedia.edit.EditSectionViewModel +import org.wikipedia.edit.showEditorChoiceDialog import org.wikipedia.events.ArticleSavedOrDeletedEvent import org.wikipedia.events.ChangeTextSizeEvent import org.wikipedia.extensions.parcelableExtra @@ -480,7 +484,22 @@ class PageActivity : BaseActivity(), PageFragment.Callback, LinkPreviewDialog.Lo } override fun onPageRequestEditSection(sectionId: Int, sectionAnchor: String?, title: PageTitle, highlightText: String?) { - requestEditSectionLauncher.launch(EditSectionActivity.newIntent(this, sectionId, sectionAnchor, title, InvokeSource.PAGE_ACTIVITY, highlightText)) + val launchEditor = { + if (Prefs.editorModeChoice == EDITOR_CHOICE_VE) { + UriUtil.visitInExternalBrowser(this, (title.uri + "?useformat=mobile&veaction=edit§ion=$sectionId").toUri()) + } else { + requestEditSectionLauncher.launch(EditSectionActivity.newIntent(this, sectionId, sectionAnchor, title, InvokeSource.PAGE_ACTIVITY, highlightText)) + } + } + if (Prefs.editorModeChoiceShowDialog) { + showEditorChoiceDialog(this) { editorChoice, dontShowAgain -> + Prefs.editorModeChoice = editorChoice + Prefs.editorModeChoiceShowDialog = !dontShowAgain + launchEditor() + } + } else { + launchEditor() + } } override fun onPageRequestLangLinks(title: PageTitle, historyEntryId: Long) { @@ -510,71 +529,97 @@ class PageActivity : BaseActivity(), PageFragment.Callback, LinkPreviewDialog.Lo private fun handleIntent(intent: Intent) { if (Intent.ACTION_VIEW == intent.action && intent.data != null) { - var uri = intent.data - if (!ReleaseUtil.isPreBetaRelease && uri?.scheme != null && uri.scheme == "http") { + var uri = intent.data!! + + if (uri.scheme == "wikipedia") { + uri = uri.buildUpon().scheme(WikiSite.DEFAULT_SCHEME).build() + + // TODO: move this to a more appropriate spot. + uri.getQueryParameter("saved")?.let { + if (it == "true") { + val revision = uri.getQueryParameter("revision")?.toLongOrNull() + if (revision != null && pageFragment.title != null) { + lifecycleScope.launch(CoroutineExceptionHandler { _, t -> + L.e(t) + }) { + EditSectionViewModel.retryUntilNewRevision(pageFragment.title!!, revision) + FeedbackUtil.showMessage(this@PageActivity, R.string.edit_saved_successfully) + } + } else { + binding.root.post { + if (!isDestroyed) { + FeedbackUtil.showMessage(this, R.string.edit_saved_successfully) + } + } + } + } else { + L.d("Edit abandoned.") + } + } + } + + if (!ReleaseUtil.isPreBetaRelease && uri.scheme != null && uri.scheme == "http") { // For external links, ensure that they're using https. uri = uri.buildUpon().scheme(WikiSite.DEFAULT_SCHEME).build() } - uri?.let { - if (!Service.isWikimediaAuthority(it.authority)) { - UriUtil.visitInExternalBrowser(this, it) - finish() - return - } - val wiki = WikiSite(it) - val title = PageTitle.titleForUri(it, wiki) - val historyEntry = HistoryEntry(title, if (intent.hasExtra(Constants.INTENT_EXTRA_NOTIFICATION_ID)) - HistoryEntry.SOURCE_NOTIFICATION_SYSTEM else HistoryEntry.SOURCE_EXTERNAL_LINK) - // Populate the referrer with the externally-referring URL, e.g. an external Browser URL, if present. - ActivityCompat.getReferrer(this)?.let { uri -> - historyEntry.referrer = uri.toString() - } - if (title.namespace() == Namespace.SPECIAL && title.prefixedText.startsWith("Special:ReadingLists")) { - L.d("Received shareable reading lists") - val encodedListFromParameter = uri.getQueryParameter("limport") - Prefs.importReadingListsDialogShown = false - Prefs.receiveReadingListsData = encodedListFromParameter - startActivity(ReadingListActivity.newIntent(this, ReadingListMode.PREVIEW).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) - finish() - return - } - // Special cases: - // If the subdomain of the URL is not a "language" subdomain as we expect, then - // bounce it out to an external browser. This can be links to the "donate." or - // "thankyou." subdomains, or the Wikiquote "quote." subdomain, and possibly others. - val language = wiki.languageCode.lowercase(Locale.getDefault()) - if (Constants.NON_LANGUAGE_SUBDOMAINS.contains(language) || (title.isSpecial && !title.isContributions)) { - // ...Except if the URL came as a result of a successful donation, in which case - // treat it differently: - if (language == "thankyou" && uri.getQueryParameter("order_id") != null) { - CampaignCollection.addDonationResult(fromWeb = true, - amount = (uri.getQueryParameter("amount"))?.toFloat() ?: 0f, - currency = uri.getQueryParameter("currency") ?: "", - recurring = uri.getQueryParameter("recurring") == "1") - // Check if the donation started from the app, but completed via web, in which case - // show it in a SingleWebViewActivity. - val campaign = uri.getQueryParameter("wmf_campaign") - - if (campaign != null && campaign == "Android") { - var pageContentInfo = SingleWebViewActivity.PAGE_CONTENT_SOURCE_DONOR_EXPERIENCE - YearInReviewViewModel.currentCampaignId?.let { campaignId -> - YearInReviewEvent.submit(action = "impression", slide = "webpay_processed", campaignId = campaignId) - pageContentInfo = SingleWebViewActivity.PAGE_CONTENT_SOURCE_YIR - } ?: run { - DonorExperienceEvent.logAction("impression", "webpay_processed", wiki.languageCode) - } - startActivity(SingleWebViewActivity.newIntent(this@PageActivity, uri.toString(), - true, pageFragment.title, pageContentInfo)) - finish() - return + if (!Service.isWikimediaAuthority(uri.authority)) { + UriUtil.visitInExternalBrowser(this, uri) + finish() + return + } + val wiki = WikiSite(uri) + val title = PageTitle.titleForUri(uri, wiki) + val historyEntry = HistoryEntry(title, if (intent.hasExtra(Constants.INTENT_EXTRA_NOTIFICATION_ID)) + HistoryEntry.SOURCE_NOTIFICATION_SYSTEM else HistoryEntry.SOURCE_EXTERNAL_LINK) + // Populate the referrer with the externally-referring URL, e.g. an external Browser URL, if present. + ActivityCompat.getReferrer(this)?.let { uri -> + historyEntry.referrer = uri.toString() + } + if (title.namespace() == Namespace.SPECIAL && title.prefixedText.startsWith("Special:ReadingLists")) { + L.d("Received shareable reading lists") + val encodedListFromParameter = uri.getQueryParameter("limport") + Prefs.importReadingListsDialogShown = false + Prefs.receiveReadingListsData = encodedListFromParameter + startActivity(ReadingListActivity.newIntent(this, ReadingListMode.PREVIEW).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) + finish() + return + } + // Special cases: + // If the subdomain of the URL is not a "language" subdomain as we expect, then + // bounce it out to an external browser. This can be links to the "donate." or + // "thankyou." subdomains, or the Wikiquote "quote." subdomain, and possibly others. + val language = wiki.languageCode.lowercase(Locale.getDefault()) + if (Constants.NON_LANGUAGE_SUBDOMAINS.contains(language) || (title.isSpecial && !title.isContributions)) { + // ...Except if the URL came as a result of a successful donation, in which case + // treat it differently: + if (language == "thankyou" && uri.getQueryParameter("order_id") != null) { + CampaignCollection.addDonationResult(fromWeb = true, + amount = (uri.getQueryParameter("amount"))?.toFloat() ?: 0f, + currency = uri.getQueryParameter("currency") ?: "", + recurring = uri.getQueryParameter("recurring") == "1") + // Check if the donation started from the app, but completed via web, in which case + // show it in a SingleWebViewActivity. + val campaign = uri.getQueryParameter("wmf_campaign") + + if (campaign != null && campaign == "Android") { + var pageContentInfo = SingleWebViewActivity.PAGE_CONTENT_SOURCE_DONOR_EXPERIENCE + YearInReviewViewModel.currentCampaignId?.let { campaignId -> + YearInReviewEvent.submit(action = "impression", slide = "webpay_processed", campaignId = campaignId) + pageContentInfo = SingleWebViewActivity.PAGE_CONTENT_SOURCE_YIR + } ?: run { + DonorExperienceEvent.logAction("impression", "webpay_processed", wiki.languageCode) } + startActivity(SingleWebViewActivity.newIntent(this@PageActivity, uri.toString(), + true, pageFragment.title, pageContentInfo)) + finish() + return } - UriUtil.visitInExternalBrowser(this, it) - finish() - return } - loadPage(title, historyEntry, TabPosition.NEW_TAB_FOREGROUND) + UriUtil.visitInExternalBrowser(this, uri) + finish() + return } + loadPage(title, historyEntry, TabPosition.NEW_TAB_FOREGROUND) } else if ((ACTION_LOAD_IN_NEW_TAB == intent.action || ACTION_LOAD_IN_CURRENT_TAB == intent.action || ACTION_LOAD_IN_CURRENT_TAB_SQUASH == intent.action) && intent.hasExtra(EXTRA_HISTORYENTRY)) { val title = intent.parcelableExtra(Constants.ARG_TITLE) diff --git a/app/src/main/java/org/wikipedia/settings/Prefs.kt b/app/src/main/java/org/wikipedia/settings/Prefs.kt index df7393742ca..5cdb8fbeffd 100644 --- a/app/src/main/java/org/wikipedia/settings/Prefs.kt +++ b/app/src/main/java/org/wikipedia/settings/Prefs.kt @@ -14,6 +14,7 @@ import org.wikipedia.analytics.eventplatform.AppSessionEvent import org.wikipedia.dataclient.WikiSite import org.wikipedia.donate.DonationResult import org.wikipedia.donate.donationreminder.DonationReminderConfig +import org.wikipedia.edit.EDITOR_CHOICE_VE import org.wikipedia.games.onthisday.OnThisDayGameNotificationState import org.wikipedia.json.JsonUtil import org.wikipedia.page.PageTitle @@ -611,6 +612,14 @@ object Prefs { get() = PrefsIoUtil.getBoolean(R.string.preference_key_edit_typing_suggestions, true) set(value) = PrefsIoUtil.setBoolean(R.string.preference_key_edit_typing_suggestions, value) + var editorModeChoice + get() = PrefsIoUtil.getInt(R.string.preference_key_editor_mode_choice, EDITOR_CHOICE_VE) + set(value) = PrefsIoUtil.setInt(R.string.preference_key_editor_mode_choice, value) + + var editorModeChoiceShowDialog + get() = PrefsIoUtil.getBoolean(R.string.preference_key_editor_mode_choice_show_dialog, true) + set(value) = PrefsIoUtil.setBoolean(R.string.preference_key_editor_mode_choice_show_dialog, value) + val useUrlShortenerForSharing get() = PrefsIoUtil.getBoolean(R.string.preference_key_reading_lists_share_url_shorten, false) diff --git a/app/src/main/java/org/wikipedia/settings/SettingsPreferenceLoader.kt b/app/src/main/java/org/wikipedia/settings/SettingsPreferenceLoader.kt index 5921008a144..7cac62360a5 100644 --- a/app/src/main/java/org/wikipedia/settings/SettingsPreferenceLoader.kt +++ b/app/src/main/java/org/wikipedia/settings/SettingsPreferenceLoader.kt @@ -18,6 +18,8 @@ import org.wikipedia.auth.AccountUtil import org.wikipedia.donate.DonateUtil import org.wikipedia.donate.donationreminder.DonationReminderActivity import org.wikipedia.donate.donationreminder.DonationReminderHelper +import org.wikipedia.edit.EDITOR_CHOICE_VE +import org.wikipedia.edit.showEditorChoiceDialog import org.wikipedia.feed.configure.ConfigureActivity import org.wikipedia.login.LoginActivity import org.wikipedia.page.ExclusiveBottomSheetPresenter @@ -58,6 +60,16 @@ internal class SettingsPreferenceLoader(fragment: PreferenceFragmentCompat) : Ba true } } + findPreference(R.string.preference_key_editor_mode_choice).let { pref -> + pref.setSummary(if (Prefs.editorModeChoice == EDITOR_CHOICE_VE) R.string.editor_select_dialog_ve_title else R.string.editor_select_dialog_source_title) + pref.onPreferenceClickListener = Preference.OnPreferenceClickListener { + showEditorChoiceDialog(activity, allowShowAgainCheckbox = false) { editorChoice, _ -> + Prefs.editorModeChoice = editorChoice + pref.setSummary(if (editorChoice == EDITOR_CHOICE_VE) R.string.editor_select_dialog_ve_title else R.string.editor_select_dialog_source_title) + } + true + } + } findPreference(R.string.preference_key_selected_app_icon).let { it.isVisible = YearInReviewViewModel.isCustomIconAllowed diff --git a/app/src/main/res/values-qq/strings.xml b/app/src/main/res/values-qq/strings.xml index c7d5d770a21..5506b8f7d70 100644 --- a/app/src/main/res/values-qq/strings.xml +++ b/app/src/main/res/values-qq/strings.xml @@ -337,6 +337,14 @@ Instructional text encouraging the user to read the edit notices for this article. Label for checkbox that enables showing edit notices automatically when entering the editing workflow.\n\nThe words \"edit notices\" must be translated consistently with {{msg-wm|Wikipedia-android-strings-edit notices}}. Text for a tooltip that points to the button for displaying edit notices. + Title of popup dialog asking the user how they want to edit the article. + Explanation of popup dialog asking the user how they want to edit the article. + Title of checkbox selection for editing with VisualEditor. + Subtitle of checkbox selection for editing with VisualEditor. + Title of checkbox selection for editing with the native wikitext editor. + Subtitle of checkbox selection for editing with the native wikitext editor. + Checkbox for no longer showing the popup dialog for selecting the type of editor used for editing articles. + Button label for continuing with the selected mode of editing articles. Text for button that finds the next occurrence of a search term.\n{{Identical|Find next}} Text for button that finds the previous occurrence of a search term Text that shows up in hint when user tries to get to first occurence when he is already on it. diff --git a/app/src/main/res/values/preference_keys.xml b/app/src/main/res/values/preference_keys.xml index c72bb5ecc6d..944c2780c84 100644 --- a/app/src/main/res/values/preference_keys.xml +++ b/app/src/main/res/values/preference_keys.xml @@ -123,6 +123,8 @@ filterNotificationExcludedTypeCodes autoShowEditNotices editNoticesTooltipShown + editorModeChoice + editorModeChoiceShowDialog showCustomizeToolbarTooltip customizeToolbarOrder customizeToolbarMenuOrder diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8bfa5d736ef..31dd6beec56 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -306,6 +306,14 @@ Please read before editing Show edit notices automatically Tap this button to view edit notices for this article. + How would you like to edit? + The visual editor is the easiest way to make changes, and is recommended for newcomers. + Edit with the visual editor + Ideal for newcomers + Edit with the source editor + Ideal for advanced editors + Don\'t show me this again + Continue Find next Find previous This is the first occurrence diff --git a/app/src/main/res/xml/developer_preferences.xml b/app/src/main/res/xml/developer_preferences.xml index 8a99ba4fd94..3f71edd1a8a 100644 --- a/app/src/main/res/xml/developer_preferences.xml +++ b/app/src/main/res/xml/developer_preferences.xml @@ -325,6 +325,10 @@ android:key="@string/preference_key_temp_account_create_day" android:title="@string/preference_key_temp_account_create_day" /> + + diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index b0532b3999e..3c3c5f21597 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -34,6 +34,10 @@ android:defaultValue="0" android:title="@string/preference_title_app_theme" android:summary="@string/preference_summary_color_theme" /> +