Skip to content
Snippets Groups Projects
Commit 5a478454 authored by Taras's avatar Taras
Browse files

Remove setup circles screen

parent b0d82eda
No related branches found
No related tags found
No related merge requests found
Showing
with 14 additions and 453 deletions
package org.futo.circles.feature.circles.setup
import android.content.Context
import android.net.Uri
import androidx.lifecycle.MutableLiveData
import dagger.hilt.android.qualifiers.ApplicationContext
import org.futo.circles.R
import org.futo.circles.core.extensions.notEmptyDisplayName
import org.futo.circles.core.provider.MatrixSessionProvider
import org.futo.circles.model.SetupCircleListItem
import org.matrix.android.sdk.api.session.getUser
import javax.inject.Inject
class SetupCirclesDataSource @Inject constructor(
@ApplicationContext private val context: Context
) {
val circlesLiveData = MutableLiveData(getInitialCirclesList())
private fun getInitialCirclesList(): List<SetupCircleListItem> =
context.resources.getStringArray(R.array.setup_circles_list).mapIndexed { i, name ->
SetupCircleListItem(
id = i,
name = name,
userName = getUserName()
)
}
private fun getUserName(): String {
val session = MatrixSessionProvider.currentSession
val userId = session?.myUserId ?: return ""
return session.getUser(userId)?.notEmptyDisplayName() ?: ""
}
fun addCirclesCoverImage(id: Int, uri: Uri) {
val list = circlesLiveData.value?.map {
if (it.id == id) it.copy(coverUri = uri) else it
} ?: emptyList()
circlesLiveData.postValue(list)
}
}
\ No newline at end of file
package org.futo.circles.feature.circles.setup
import android.os.Bundle
import android.view.View
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.DividerItemDecoration
import by.kirich1409.viewbindingdelegate.viewBinding
import dagger.hilt.android.AndroidEntryPoint
import org.futo.circles.R
import org.futo.circles.core.extensions.navigateSafe
import org.futo.circles.core.extensions.observeData
import org.futo.circles.core.extensions.observeResponse
import org.futo.circles.core.extensions.showError
import org.futo.circles.core.extensions.showSuccess
import org.futo.circles.core.fragment.HasLoadingState
import org.futo.circles.core.model.LoadingData
import org.futo.circles.core.picker.helper.MediaPickerHelper
import org.futo.circles.core.view.LoadingDialog
import org.futo.circles.databinding.FragmentSetupCirclesBinding
import org.futo.circles.feature.circles.setup.list.SetupCirclesAdapter
import org.futo.circles.model.SetupCircleListItem
@AndroidEntryPoint
class SetupCirclesFragment : Fragment(R.layout.fragment_setup_circles), HasLoadingState {
override val fragment: Fragment = this
private val viewModel by viewModels<SetupCirclesViewModel>()
private val binding by viewBinding(FragmentSetupCirclesBinding::bind)
private val listAdapter by lazy { SetupCirclesAdapter(::onCircleListItemClicked) }
private val mediaPickerHelper = MediaPickerHelper(this, isGalleryAvailable = false)
private val loadingDialog by lazy { LoadingDialog(requireContext()) }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setupViews()
setupObservers()
}
private fun setupViews() {
with(binding) {
rvSetupCircles.apply {
addItemDecoration(DividerItemDecoration(context, DividerItemDecoration.VERTICAL))
adapter = listAdapter
}
btnSkip.setOnClickListener { navigateToBottomMenuScreen() }
btnSave.setOnClickListener {
showLoading()
viewModel.createCircles()
}
}
}
private fun setupObservers() {
viewModel.circlesLiveData.observeData(this, ::setCirclesList)
viewModel.createCirclesResponseLiveData.observeResponse(this,
success = {
loadingDialog.dismiss()
showSuccess(getString(R.string.circles_created))
navigateToBottomMenuScreen()
},
error = {
showError(it)
loadingDialog.dismiss()
}
)
}
private fun setCirclesList(list: List<SetupCircleListItem>) {
listAdapter.submitList(list)
}
private fun onCircleListItemClicked(circle: SetupCircleListItem) {
mediaPickerHelper.showMediaPickerDialog(
onImageSelected = { id, uri -> viewModel.addImageForCircle(id, uri) },
id = circle.id
)
}
private fun showLoading() {
startLoading(binding.btnSave)
loadingDialog.handleLoading(LoadingData(messageId = R.string.configuring_workspace))
}
private fun navigateToBottomMenuScreen() {
findNavController().navigateSafe(SetupCirclesFragmentDirections.toHomeFragment())
}
}
\ No newline at end of file
package org.futo.circles.feature.circles.setup
import android.net.Uri
import androidx.lifecycle.ViewModel
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.delay
import org.futo.circles.core.CREATE_ROOM_DELAY
import org.futo.circles.core.SingleEventLiveData
import org.futo.circles.core.extensions.Response
import org.futo.circles.core.extensions.createResult
import org.futo.circles.core.extensions.launchBg
import org.futo.circles.core.room.CreateRoomDataSource
import javax.inject.Inject
@HiltViewModel
class SetupCirclesViewModel @Inject constructor(
private val setupCirclesDataSource: SetupCirclesDataSource,
private val createRoomDataSource: CreateRoomDataSource
) : ViewModel() {
val circlesLiveData = setupCirclesDataSource.circlesLiveData
val createCirclesResponseLiveData = SingleEventLiveData<Response<Unit?>>()
fun createCircles() {
val circlesList = circlesLiveData.value ?: return
val lastItemIndex = circlesList.size - 1
launchBg {
val response = createResult {
circlesList.forEachIndexed { i, item ->
createRoomDataSource.createCircleWithTimeline(
name = item.name,
iconUri = item.coverUri,
null, false
)
if (i != lastItemIndex) delay(CREATE_ROOM_DELAY)
}
}
createCirclesResponseLiveData.postValue(response)
}
}
fun addImageForCircle(id: Int?, uri: Uri) {
id?.let { setupCirclesDataSource.addCirclesCoverImage(it, uri) }
}
}
\ No newline at end of file
package org.futo.circles.feature.circles.setup.list
import android.view.ViewGroup
import org.futo.circles.core.list.BaseRvAdapter
import org.futo.circles.model.SetupCircleListItem
class SetupCirclesAdapter(
private val onCircleClicked: (SetupCircleListItem) -> Unit
) : BaseRvAdapter<SetupCircleListItem, SetupCirclesViewHolder>(DefaultIdEntityCallback()) {
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): SetupCirclesViewHolder = SetupCirclesViewHolder(
parent = parent,
onCircleClicked = { position -> onCircleClicked(getItem(position)) }
)
override fun onBindViewHolder(holder: SetupCirclesViewHolder, position: Int) {
holder.bind(getItem(position))
}
}
\ No newline at end of file
package org.futo.circles.feature.circles.setup.list
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import org.futo.circles.R
import org.futo.circles.core.extensions.onClick
import org.futo.circles.core.list.ViewBindingHolder
import org.futo.circles.databinding.ListItemSetupCircleBinding
import org.futo.circles.model.SetupCircleListItem
class SetupCirclesViewHolder(
parent: ViewGroup,
onCircleClicked: (Int) -> Unit
) : RecyclerView.ViewHolder(inflate(parent, ListItemSetupCircleBinding::inflate)) {
private companion object : ViewBindingHolder
private val binding = baseBinding as ListItemSetupCircleBinding
init {
onClick(itemView) { position -> onCircleClicked(position) }
}
fun bind(data: SetupCircleListItem) {
with(binding) {
data.coverUri?.let { ivCircleCover.setImageURI(it) }
?: ivCircleCover.setImageResource(R.drawable.add_image_placeholder)
tvCircleName.text = data.name
tvUserName.text = data.userName
}
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="0dp"
android:layout_height="?attr/actionBarSize"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:title="@string/setup_circles"
app:titleCentered="true" />
<View
android:id="@+id/toolbarDivider"
android:layout_width="0dp"
android:layout_height="@dimen/divider_height"
android:background="@color/divider_color"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/toolbar" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_begin="36dp" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineEnd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_end="36dp" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvSetupCircles"
android:layout_width="0dp"
android:layout_height="0dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintBottom_toTopOf="@id/tvEncryptionWarning"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/toolbarDivider" />
<TextView
android:id="@+id/tvEncryptionWarning"
style="@style/footNote"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:drawablePadding="8dp"
android:text="@string/circle_encryption_warning"
android:textColor="@color/yellow"
app:drawableStartCompat="@drawable/ic_info"
app:drawableTint="@color/yellow"
app:layout_constraintBottom_toTopOf="@id/btnSave"
app:layout_constraintEnd_toEndOf="@id/guidelineEnd"
app:layout_constraintStart_toStartOf="@id/guidelineStart" />
<org.futo.circles.core.view.LoadingButton
android:id="@+id/btnSave"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="24dp"
android:text="@string/save"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@id/guidelineEnd"
app:layout_constraintStart_toEndOf="@id/btnSkip" />
<com.google.android.material.button.MaterialButton
android:id="@+id/btnSkip"
style="@style/NegativeButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/skip"
app:layout_constraintBottom_toBottomOf="@id/btnSave"
app:layout_constraintEnd_toStartOf="@id/btnSave"
app:layout_constraintStart_toStartOf="@id/guidelineStart" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:padding="4dp">
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/ivCircleCover"
android:layout_width="@dimen/group_icon_size"
android:layout_height="@dimen/group_icon_size"
android:scaleType="centerCrop"
android:src="@drawable/add_image_placeholder"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.App.GroupIconRadius" />
<TextView
android:id="@+id/tvCircleName"
style="@style/title2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:ellipsize="end"
android:gravity="center"
android:lines="1"
app:layout_constraintBottom_toTopOf="@id/tvUserName"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/ivCircleCover"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed"
tools:text="texsdt" />
<TextView
android:id="@+id/tvUserName"
style="@style/subheadline"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:ellipsize="end"
android:gravity="center"
android:lines="1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@id/tvCircleName"
app:layout_constraintTop_toBottomOf="@id/tvCircleName"
tools:text="texsdt" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -54,18 +54,6 @@
</action>
</fragment>
<fragment
android:id="@+id/setupCirclesFragment"
android:name="org.futo.circles.feature.circles.setup.SetupCirclesFragment"
android:label="SetupCirclesFragment"
tools:layout="@layout/fragment_setup_circles">
<action
android:id="@+id/to_homeFragment"
app:destination="@id/homeFragment"
app:popUpTo="@id/setupCirclesFragment"
app:popUpToInclusive="true" />
</fragment>
<include app:graph="@navigation/nav_graph_auth" />
<dialog
......
......@@ -17,7 +17,6 @@ import org.futo.circles.auth.base.LoginStageNavigationEvent
import org.futo.circles.auth.databinding.FragmentLoginStagesBinding
import org.futo.circles.auth.feature.log_in.recovery.EnterPassPhraseDialog
import org.futo.circles.auth.feature.log_in.recovery.EnterPassPhraseDialogListener
import org.futo.circles.core.CirclesAppConfig
import org.futo.circles.core.extensions.navigateSafe
import org.futo.circles.core.extensions.observeData
import org.futo.circles.core.extensions.observeResponse
......@@ -79,15 +78,11 @@ class LogInStagesFragment : Fragment(R.layout.fragment_login_stages),
viewModel.passPhraseLoadingLiveData.observeData(this) {
loadingDialog.handleLoading(it)
}
viewModel.spacesTreeLoadingLiveData.observeData(this) {
loadingDialog.handleLoading(it)
}
viewModel.loginNavigationLiveData.observeData(this) { event ->
when (event) {
LoginNavigationEvent.Main -> navigateToBottomMenuFragment()
LoginNavigationEvent.SetupCircles -> navigateToSetupCirclesOrHome()
LoginNavigationEvent.Main -> navigateToHome()
LoginNavigationEvent.PassPhrase -> showPassPhraseDialog()
else -> navigateToBottomMenuFragment()
else -> navigateToHome()
}
}
viewModel.messageEventLiveData.observeData(this) { messageId ->
......@@ -123,19 +118,10 @@ class LogInStagesFragment : Fragment(R.layout.fragment_login_stages),
}
}
private fun navigateToBottomMenuFragment() {
private fun navigateToHome() {
findNavController().navigateSafe(LogInStagesFragmentDirections.toHomeFragment())
}
private fun navigateToSetupCirclesOrHome() {
findNavController().navigateSafe(
if (CirclesAppConfig.isSetupCirclesEnabled)
LogInStagesFragmentDirections.toSetupCirclesFragment()
else
LogInStagesFragmentDirections.toHomeFragment()
)
}
private fun showDiscardDialog() {
showDialog(
titleResIdRes = R.string.discard_current_login_progress,
......
......@@ -20,20 +20,18 @@ import org.matrix.android.sdk.api.util.JsonDict
import javax.inject.Inject
import javax.inject.Singleton
enum class LoginNavigationEvent { Main, SetupCircles, PassPhrase }
enum class LoginNavigationEvent { Main, PassPhrase }
@Singleton
class LoginStagesDataSource @Inject constructor(
@ApplicationContext private val context: Context,
private val restoreBackupDataSource: RestoreBackupDataSource,
private val coreSpacesTreeBuilder: CoreSpacesTreeBuilder,
private val encryptionAlgorithmHelper: EncryptionAlgorithmHelper,
private val createPassPhraseDataSource: CreatePassPhraseDataSource
) : BaseLoginStagesDataSource(context) {
val loginNavigationLiveData = SingleEventLiveData<LoginNavigationEvent>()
val passPhraseLoadingLiveData = restoreBackupDataSource.loadingLiveData
val spacesTreeLoadingLiveData = coreSpacesTreeBuilder.loadingLiveData
val messageEventLiveData = SingleEventLiveData<Int>()
override suspend fun performLoginStage(
......@@ -112,17 +110,12 @@ class LoginStagesDataSource @Inject constructor(
private suspend fun handleRestoreResult(restoreResult: Response<Unit>): Response<Unit> {
when (restoreResult) {
is Response.Error -> loginNavigationLiveData.postValue(LoginNavigationEvent.PassPhrase)
is Response.Success -> createSpacesTreeIfNotExist()
is Response.Success -> navigateToMain()
}
return restoreResult
}
suspend fun createSpacesTreeIfNotExist() {
val isCirclesCreated = coreSpacesTreeBuilder.isCirclesHierarchyCreated()
if (!isCirclesCreated) createResult { coreSpacesTreeBuilder.createCoreSpacesTree() }
loginNavigationLiveData.postValue(
if (isCirclesCreated) LoginNavigationEvent.Main
else LoginNavigationEvent.SetupCircles
)
fun navigateToMain() {
loginNavigationLiveData.postValue(LoginNavigationEvent.Main)
}
}
\ No newline at end of file
......@@ -17,7 +17,6 @@ class LoginStagesViewModel @Inject constructor(
val restoreKeysLiveData = org.futo.circles.core.SingleEventLiveData<Response<Unit>>()
val loginNavigationLiveData = loginStagesDataSource.loginNavigationLiveData
val passPhraseLoadingLiveData = loginStagesDataSource.passPhraseLoadingLiveData
val spacesTreeLoadingLiveData = loginStagesDataSource.spacesTreeLoadingLiveData
val messageEventLiveData = loginStagesDataSource.messageEventLiveData
fun restoreBackupWithPassPhrase(passphrase: String) {
......@@ -41,7 +40,7 @@ class LoginStagesViewModel @Inject constructor(
}
fun onDoNotRestoreBackup() {
launchBg { loginStagesDataSource.createSpacesTreeIfNotExist() }
loginStagesDataSource.navigateToMain()
}
}
\ No newline at end of file
......@@ -10,7 +10,6 @@ import by.kirich1409.viewbindingdelegate.viewBinding
import dagger.hilt.android.AndroidEntryPoint
import org.futo.circles.auth.R
import org.futo.circles.auth.databinding.FragmentSetupProfileBinding
import org.futo.circles.core.CirclesAppConfig
import org.futo.circles.core.extensions.getText
import org.futo.circles.core.extensions.navigateSafe
import org.futo.circles.core.extensions.observeData
......@@ -35,7 +34,7 @@ class SetupProfileFragment : Fragment(R.layout.fragment_setup_profile), HasLoadi
private fun setupViews() {
with(binding) {
btnSkip.setOnClickListener { navigateToSetupCirclesOrHome() }
btnSkip.setOnClickListener { navigateToHome() }
btnSave.setOnClickListener {
startLoading(btnSave)
viewModel.saveProfileInfo(tilDisplayName.getText())
......@@ -62,17 +61,12 @@ class SetupProfileFragment : Fragment(R.layout.fragment_setup_profile), HasLoadi
}
viewModel.saveProfileResponseLiveData.observeResponse(
this,
success = { navigateToSetupCirclesOrHome() }
success = { navigateToHome() }
)
}
private fun navigateToSetupCirclesOrHome() {
findNavController().navigateSafe(
if (CirclesAppConfig.isSetupCirclesEnabled)
SetupProfileFragmentDirections.toSetupCirclesFragment()
else
SetupProfileFragmentDirections.toHomeFragment()
)
private fun navigateToHome() {
findNavController().navigateSafe(SetupProfileFragmentDirections.toHomeFragment())
}
private fun setSaveButtonEnabled() {
......
......@@ -26,7 +26,6 @@ enum class SignUpNavigationEvents { TokenValidation, Subscription, AcceptTerm, V
@Singleton
class SignUpDataSource @Inject constructor(
@ApplicationContext private val context: Context,
private val coreSpacesTreeBuilder: CoreSpacesTreeBuilder,
private val createPassPhraseDataSource: CreatePassPhraseDataSource,
private val preferencesProvider: PreferencesProvider
) {
......@@ -35,7 +34,6 @@ class SignUpDataSource @Inject constructor(
val navigationLiveData = SingleEventLiveData<SignUpNavigationEvents>()
val finishRegistrationLiveData = SingleEventLiveData<Response<Unit>>()
val passPhraseLoadingLiveData = createPassPhraseDataSource.loadingLiveData
val spaceTreeLoadingLiveData = coreSpacesTreeBuilder.loadingLiveData
val stagesToComplete = mutableListOf<Stage>()
......@@ -116,7 +114,6 @@ class SignUpDataSource @Inject constructor(
MatrixSessionProvider.awaitForSessionStart(session)
preferencesProvider.setShouldShowAllExplanations()
createPassPhraseDataSource.createPassPhraseBackup()
coreSpacesTreeBuilder.createCoreSpacesTree()
BSSpekeClientProvider.clear()
}
......
......@@ -56,9 +56,6 @@ class SignUpFragment : Fragment(R.layout.fragment_sign_up),
viewModel.passPhraseLoadingLiveData.observeData(this) {
loadingDialog.handleLoading(it)
}
viewModel.spaceTreeLoadingLiveData.observeData(this) {
loadingDialog.handleLoading(it)
}
}
......
......@@ -11,7 +11,6 @@ class SignUpViewModel @Inject constructor(
val subtitleLiveData = datasource.subtitleLiveData
val passPhraseLoadingLiveData = datasource.passPhraseLoadingLiveData
val spaceTreeLoadingLiveData = datasource.spaceTreeLoadingLiveData
val finishRegistrationLiveData = datasource.finishRegistrationLiveData
val navigationLiveData = datasource.navigationLiveData
......
......@@ -32,11 +32,6 @@
app:destination="@id/homeFragment"
app:popUpTo="@id/logInFragment"
app:popUpToInclusive="true" />
<action
android:id="@+id/to_setupCirclesFragment"
app:destination="@id/setupCirclesFragment"
app:popUpTo="@id/logInFragment"
app:popUpToInclusive="true" />
</fragment>
<fragment
android:id="@+id/signUpFragment"
......@@ -54,11 +49,7 @@
android:name="org.futo.circles.auth.feature.profile.setup.SetupProfileFragment"
android:label="SetupProfileFragment"
tools:layout="@layout/fragment_setup_profile">
<action
android:id="@+id/to_setupCirclesFragment"
app:destination="@id/setupCirclesFragment"
app:popUpTo="@id/setupProfileFragment"
app:popUpToInclusive="true" />
<action
android:id="@+id/to_homeFragment"
app:destination="@id/homeFragment"
......
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="homeFragment" type="id" />
<item name="setupCirclesFragment" type="id" />
</resources>
\ No newline at end of file
......@@ -28,9 +28,6 @@ object CirclesAppConfig {
var isRageshakeEnabled = false
private set
var isSetupCirclesEnabled = true
private set
data class Initializer(
private var appId: String? = null,
private var version: String? = null,
......@@ -40,8 +37,7 @@ object CirclesAppConfig {
private var euDomain: String? = null,
private var subscriptionEnabled: Boolean = false,
private var mediaBackupEnabled: Boolean = false,
private var rageshakeEnabled: Boolean = false,
private var setupCirclesEnabled: Boolean = true
private var rageshakeEnabled: Boolean = false
) {
fun buildConfigInfo(appId: String, version: String, flavour: String = "empty") =
......@@ -64,8 +60,6 @@ object CirclesAppConfig {
fun isRageshakeEnabled(isEnabled: Boolean) = apply { this.rageshakeEnabled = isEnabled }
fun isSetupCirclesEnabled(isEnabled: Boolean) =
apply { this.setupCirclesEnabled = isEnabled }
fun init() {
CirclesAppConfig.appId = appId?.takeIf { it.isNotEmpty() }
......@@ -89,7 +83,6 @@ object CirclesAppConfig {
isSubscriptionsEnabled = subscriptionEnabled
isMediaBackupEnabled = mediaBackupEnabled
isRageshakeEnabled = rageshakeEnabled
isSetupCirclesEnabled = setupCirclesEnabled
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment