diff --git a/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt b/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt index b69e1cbbe..42f95043a 100644 --- a/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt +++ b/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt @@ -5,6 +5,7 @@ package org.mozilla.fenix.components import android.content.Context +import android.os.Build import androidx.lifecycle.ProcessLifecycleOwner import androidx.work.WorkManager import kotlinx.coroutines.CoroutineScope @@ -24,7 +25,6 @@ import mozilla.components.service.fxa.manager.FxaAccountManager import mozilla.components.support.base.log.logger.Logger import org.mozilla.fenix.BuildConfig import org.mozilla.fenix.Experiments -import org.mozilla.fenix.R import org.mozilla.fenix.isInExperiment import org.mozilla.fenix.test.Mockable @@ -87,11 +87,13 @@ class BackgroundServices( emptyList() } + private val defaultDeviceName = Build.MANUFACTURER + " " + Build.MODEL + val accountManager = FxaAccountManager( context, config, scopes, - DeviceTuple(context.getString(R.string.app_name), DeviceType.MOBILE, deviceCapabilities), + DeviceTuple(defaultDeviceName, DeviceType.MOBILE, deviceCapabilities), syncManager ).also { it.registerForDeviceEvents(deviceEventObserver, ProcessLifecycleOwner.get(), true) diff --git a/app/src/main/java/org/mozilla/fenix/settings/AccountSettingsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/AccountSettingsFragment.kt index 01a4a9a20..045a37544 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/AccountSettingsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/AccountSettingsFragment.kt @@ -31,6 +31,7 @@ import mozilla.components.service.fxa.FxaPanicException import mozilla.components.service.fxa.manager.FxaAccountManager import mozilla.components.support.base.log.logger.Logger import org.mozilla.fenix.R +import org.mozilla.fenix.components.FenixSnackbar import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.ext.getPreferenceKey import org.mozilla.fenix.ext.requireComponents @@ -117,6 +118,7 @@ class AccountSettingsFragment : PreferenceFragmentCompat() { onPreferenceChangeListener = getChangeListenerForDeviceName() deviceConstellation?.state()?.currentDevice?.let { device -> summary = device.displayName + text = device.displayName } setOnBindEditTextListener { editText -> editText.filters = arrayOf(InputFilter.LengthFilter(DEVICE_NAME_MAX_LENGTH)) @@ -158,6 +160,13 @@ class AccountSettingsFragment : PreferenceFragmentCompat() { private fun getChangeListenerForDeviceName(): Preference.OnPreferenceChangeListener { return Preference.OnPreferenceChangeListener { _, newValue -> + // The network request requires a nonempty string, so don't persist any changes if the user inputs one. + if (newValue.toString().trim().isEmpty()) { + FenixSnackbar.make(view!!, FenixSnackbar.LENGTH_LONG) + .setText(getString(R.string.empty_device_name_error)) + .show() + return@OnPreferenceChangeListener false + } // Optimistically set the device name to what user requested. val deviceNameKey = context!!.getPreferenceKey(R.string.pref_key_sync_device_name) val preferenceDeviceName = findPreference(deviceNameKey) @@ -175,7 +184,6 @@ class AccountSettingsFragment : PreferenceFragmentCompat() { Logger.error("Setting device name failed.", e) } } - true } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e5b52cf63..c290952d6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -155,6 +155,8 @@ Sign out Device name + + Device name cannot be empty. Syncing…