mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-08-24 16:21:16 +02:00
Make DeviceSpecificSettingsCustomizer Parcelable, fixing occasional crash
A fragment must have an empty constructor, and the settings will sometimes crash when resuming. Fixes #2560
This commit is contained in:
parent
540a9731f3
commit
1de2c32705
@ -16,11 +16,13 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
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}.
|
||||
*
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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<SonyHeadphonesSettingsCustomizer> CREATOR = new Creator<SonyHeadphonesSettingsCustomizer>() {
|
||||
@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
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user