Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 8 additions & 16 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -101,14 +101,6 @@
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.MULTIWINDOW_LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="wikipedia" />
<data android:host="*.wikipedia.org" />
<!-- Add more deeplink hosts as needed -->
</intent-filter>
</activity-alias>
<activity-alias
android:name=".YIR25Icon"
Expand All @@ -121,14 +113,6 @@
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.MULTIWINDOW_LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="wikipedia" />
<data android:host="*.wikipedia.org" />
<!-- Add more deeplink hosts as needed -->
</intent-filter>
</activity-alias>

<activity
Expand Down Expand Up @@ -156,6 +140,14 @@
<data android:host="*.wikipedia.org" android:pathPattern="/zh.*" />
<data android:host="*.wikipedia.org" android:pathPattern="/sr.*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="wikipedia" />
<data android:host="*.wikipedia.org" />
<!-- Add more deeplink hosts as needed -->
</intent-filter>
</activity>
<activity
android:name=".settings.SettingsActivity"
Expand Down
10 changes: 8 additions & 2 deletions app/src/main/java/org/wikipedia/edit/EditSectionViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -129,17 +129,23 @@ class EditSectionViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {
L.e(throwable)
_waitForRevisionState.value = Resource.Success(newRevision)
}) {
_waitForRevisionState.value = Resource.Success(retryUntilNewRevision(pageTitle, newRevision))
}
}

companion object {
suspend fun retryUntilNewRevision(pageTitle: PageTitle, newRevision: Long, maxRetries: Int = 10): Long {
// Implement a retry mechanism to wait for the revision to be available.
var retry = 0
var revision = -1L
while (revision < newRevision && retry < 10) {
while (revision < newRevision && retry < maxRetries) {
delay(2000)
val pageSummaryResponse = ServiceFactory.getRest(pageTitle.wikiSite)
.getPageSummary(pageTitle.prefixedText, cacheControl = OkHttpConnectionFactory.CACHE_CONTROL_FORCE_NETWORK.toString())
revision = pageSummaryResponse.revision
retry++
}
_waitForRevisionState.value = Resource.Success(revision)
return revision
}
}
}
226 changes: 226 additions & 0 deletions app/src/main/java/org/wikipedia/edit/EditorChoiceDialog.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,226 @@
package org.wikipedia.edit

import android.content.Context
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.selection.selectable
import androidx.compose.foundation.selection.selectableGroup
import androidx.compose.material3.Checkbox
import androidx.compose.material3.CheckboxDefaults
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.RadioButton
import androidx.compose.material3.RadioButtonDefaults
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.semantics.Role
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import org.wikipedia.R
import org.wikipedia.compose.components.AppButton
import org.wikipedia.compose.theme.BaseTheme
import org.wikipedia.compose.theme.WikipediaTheme
import org.wikipedia.settings.Prefs
import org.wikipedia.theme.Theme

const val EDITOR_CHOICE_VE = 0
const val EDITOR_CHOICE_SOURCE = 1

fun showEditorChoiceDialog(
context: Context,
allowShowAgainCheckbox: Boolean = true,
onResult: (editorChoice: Int, dontShowAgain: Boolean) -> 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)
}
}
22 changes: 0 additions & 22 deletions app/src/main/java/org/wikipedia/main/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -85,10 +82,6 @@ class MainActivity : SingleFragmentActivity<MainFragment>(), MainFragment.Callba
supportActionBar?.title = ""
supportActionBar?.setDisplayHomeAsUpEnabled(false)
binding.mainToolbar.navigationIcon = null

if (savedInstanceState == null) {
handleIntent(intent)
}
}

override fun onResume() {
Expand Down Expand Up @@ -167,21 +160,6 @@ class MainActivity : SingleFragmentActivity<MainFragment>(), 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
}
Expand Down
Loading
Loading