diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSpecificSettingsCustomizer.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSpecificSettingsCustomizer.java index bf8548dd8..6e0195f5d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSpecificSettingsCustomizer.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSpecificSettingsCustomizer.java @@ -16,11 +16,13 @@ along with this program. If not, see . */ package nodomain.freeyourgadget.gadgetbridge.activities.devicesettings; +import android.os.Parcelable; + /** * A device-specific preference handler, that allows for concrete implementations to customize the preferences in * the {@link DeviceSpecificSettingsFragment}. */ -public interface DeviceSpecificSettingsCustomizer { +public interface DeviceSpecificSettingsCustomizer extends Parcelable { /** * Customize the settings on the {@link DeviceSpecificSettingsFragment}. * diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSpecificSettingsFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSpecificSettingsFragment.java index ca8731995..382d1dda7 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSpecificSettingsFragment.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSpecificSettingsFragment.java @@ -93,18 +93,14 @@ import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PR public class DeviceSpecificSettingsFragment extends PreferenceFragmentCompat implements DeviceSpecificSettingsHandler { - private final DeviceSpecificSettingsCustomizer deviceSpecificSettingsCustomizer; - - public DeviceSpecificSettingsFragment(final DeviceSpecificSettingsCustomizer deviceSpecificSettingsCustomizer) { - this.deviceSpecificSettingsCustomizer = deviceSpecificSettingsCustomizer; - } - private static final Logger LOG = LoggerFactory.getLogger(DeviceSpecificSettingsFragment.class); static final String FRAGMENT_TAG = "DEVICE_SPECIFIC_SETTINGS_FRAGMENT"; private final SharedPreferencesChangeHandler sharedPreferencesChangeHandler = new SharedPreferencesChangeHandler(); + private DeviceSpecificSettingsCustomizer deviceSpecificSettingsCustomizer; + private void setSettingsFileSuffix(String settingsFileSuffix, @NonNull int[] supportedSettings, String[] supportedLanguages) { Bundle args = new Bundle(); args.putString("settingsFileSuffix", settingsFileSuffix); @@ -113,6 +109,11 @@ public class DeviceSpecificSettingsFragment extends PreferenceFragmentCompat imp setArguments(args); } + private void setDeviceSpecificSettingsCustomizer(final DeviceSpecificSettingsCustomizer customizer) { + final Bundle args = getArguments() != null ? getArguments() : new Bundle(); + args.putParcelable("deviceSpecificSettingsCustomizer", customizer); + setArguments(args); + } @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { @@ -123,6 +124,7 @@ public class DeviceSpecificSettingsFragment extends PreferenceFragmentCompat imp String settingsFileSuffix = arguments.getString("settingsFileSuffix", null); int[] supportedSettings = arguments.getIntArray("supportedSettings"); String[] supportedLanguages = arguments.getStringArray("supportedLanguages"); + this.deviceSpecificSettingsCustomizer = arguments.getParcelable("deviceSpecificSettingsCustomizer"); if (settingsFileSuffix == null || supportedSettings == null) { return; @@ -756,8 +758,9 @@ public class DeviceSpecificSettingsFragment extends PreferenceFragmentCompat imp @NonNull int[] supportedSettings, String[] supportedLanguages, DeviceSpecificSettingsCustomizer deviceSpecificSettingsCustomizer) { - DeviceSpecificSettingsFragment fragment = new DeviceSpecificSettingsFragment(deviceSpecificSettingsCustomizer); + final DeviceSpecificSettingsFragment fragment = new DeviceSpecificSettingsFragment(); fragment.setSettingsFileSuffix(settingsFileSuffix, supportedSettings, supportedLanguages); + fragment.setDeviceSpecificSettingsCustomizer(deviceSpecificSettingsCustomizer); return fragment; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/sony/headphones/SonyHeadphonesSettingsCustomizer.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/sony/headphones/SonyHeadphonesSettingsCustomizer.java index 7cb85c9af..7b45a5871 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/sony/headphones/SonyHeadphonesSettingsCustomizer.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/sony/headphones/SonyHeadphonesSettingsCustomizer.java @@ -20,6 +20,8 @@ import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.Dev import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_SONY_AMBIENT_SOUND_LEVEL; import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_SONY_FOCUS_VOICE; +import android.os.Parcel; + import androidx.preference.ListPreference; import androidx.preference.Preference; @@ -53,4 +55,26 @@ public class SonyHeadphonesSettingsCustomizer implements DeviceSpecificSettingsC handler.addPreferenceHandlerFor(PREF_SONY_AMBIENT_SOUND_CONTROL, ambientSoundControlPrefListener); } } + + public static final Creator CREATOR = new Creator() { + @Override + public SonyHeadphonesSettingsCustomizer createFromParcel(final Parcel in) { + return new SonyHeadphonesSettingsCustomizer(); + } + + @Override + public SonyHeadphonesSettingsCustomizer[] newArray(final int size) { + return new SonyHeadphonesSettingsCustomizer[size]; + } + }; + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(final Parcel dest, final int flags) { + // Nothing to do + } }