diff --git a/android/src/main/java/com/tailscale/ipn/App.kt b/android/src/main/java/com/tailscale/ipn/App.kt index 909e30521c..481e85de79 100644 --- a/android/src/main/java/com/tailscale/ipn/App.kt +++ b/android/src/main/java/com/tailscale/ipn/App.kt @@ -279,7 +279,12 @@ class App : UninitializedApp(), libtailscale.AppContext, ViewModelStoreOwner { TSLog.d("App", "Set Tile Ready: $ableToStartVPN") } - override fun getModelName(): String { + override fun getDeviceName(): String { + // Try user-defined device name first + android.provider.Settings.Global.getString(contentResolver, android.provider.Settings.Global.DEVICE_NAME) + ?.let { return it } + + // Otherwise fallback to manufacturer + model val manu = Build.MANUFACTURER var model = Build.MODEL // Strip manufacturer from model. diff --git a/libtailscale/interfaces.go b/libtailscale/interfaces.go index 7155f06f82..f0d6c6dea1 100644 --- a/libtailscale/interfaces.go +++ b/libtailscale/interfaces.go @@ -36,8 +36,8 @@ type AppContext interface { // GetOSVersion gets the Android version. GetOSVersion() (string, error) - // GetModelName gets the Android device's model name. - GetModelName() (string, error) + // GetDeviceName gets the Android device's user-set name, or hardware model name as a fallback. + GetDeviceName() (string, error) // GetInstallSource gets information about how the app was installed or updated. GetInstallSource() string diff --git a/libtailscale/tailscale.go b/libtailscale/tailscale.go index 63b403229f..f3c6938a8f 100644 --- a/libtailscale/tailscale.go +++ b/libtailscale/tailscale.go @@ -91,7 +91,7 @@ func (a *App) osVersion() string { // modelName return the MANUFACTURER + MODEL from // android.os.Build. func (a *App) modelName() string { - model, err := a.appCtx.GetModelName() + model, err := a.appCtx.GetDeviceName() if err != nil { panic(err) }