From 0efbea06bb2e2e770549937154a086cd604e3552 Mon Sep 17 00:00:00 2001 From: Yuriy Liskov Date: Thu, 8 Oct 2020 00:41:10 +0300 Subject: [PATCH] persist afr --- .../managers/AutoFrameRateManager.java | 73 ++++++++++++++++--- .../common/prefs/AppPrefs.java | 9 +++ 2 files changed, 70 insertions(+), 12 deletions(-) diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/managers/AutoFrameRateManager.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/managers/AutoFrameRateManager.java index 04328548e..b68bc9f5c 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/managers/AutoFrameRateManager.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/managers/AutoFrameRateManager.java @@ -1,6 +1,7 @@ package com.liskovsoft.smartyoutubetv2.common.app.models.playback.managers; import android.app.Activity; +import androidx.annotation.NonNull; import com.liskovsoft.sharedutils.mylogger.Log; import com.liskovsoft.smartyoutubetv2.common.R; import com.liskovsoft.smartyoutubetv2.common.app.models.playback.PlayerEventListenerHelper; @@ -9,6 +10,7 @@ import com.liskovsoft.smartyoutubetv2.common.app.models.playback.ui.UiOptionItem import com.liskovsoft.smartyoutubetv2.common.autoframerate.AutoFrameRateHelper; import com.liskovsoft.smartyoutubetv2.common.autoframerate.FormatItem; import com.liskovsoft.smartyoutubetv2.common.autoframerate.ModeSyncManager; +import com.liskovsoft.smartyoutubetv2.common.prefs.AppPrefs; import java.util.ArrayList; import java.util.List; @@ -16,13 +18,46 @@ import java.util.List; public class AutoFrameRateManager extends PlayerEventListenerHelper { private static final String TAG = AutoFrameRateManager.class.getSimpleName(); private final HqDialogManager mUiManager; - private boolean mAfrEnabled; - private boolean mCorrectionEnabled; - private boolean mSwitchEnabled; private boolean mMainActivityRunOnce; private FormatItem mSelectedVideoTrack; private final AutoFrameRateHelper mAutoFrameRateHelper; private final ModeSyncManager mModeSyncManager; + private AfrData mAfrData = new AfrData(); + + private static class AfrData { + public boolean afrEnabled; + public boolean afrFpsCorrectionEnabled; + public boolean afrResSwitchEnabled; + + public AfrData() { + } + + public AfrData(boolean afrEnabled, boolean afrFpsCorrectionEnabled, boolean afrResSwitchEnabled) { + this.afrEnabled = afrEnabled; + this.afrFpsCorrectionEnabled = afrFpsCorrectionEnabled; + this.afrResSwitchEnabled = afrResSwitchEnabled; + } + + @NonNull + public String toString() { + return String.format("%s,%s,%s", afrEnabled, afrFpsCorrectionEnabled, afrResSwitchEnabled); + } + + public static AfrData from(String data) { + if (data == null) { + return new AfrData(); + } + + String[] split = data.split(","); + + if (split.length < 3) { + return new AfrData(); + } + + return new AfrData( + Boolean.parseBoolean(split[0]), Boolean.parseBoolean(split[1]), Boolean.parseBoolean(split[1])); + } + } public AutoFrameRateManager(HqDialogManager uiManager) { mUiManager = uiManager; @@ -36,8 +71,11 @@ public class AutoFrameRateManager extends PlayerEventListenerHelper { super.onActivity(activity); if (!mMainActivityRunOnce) { + restoreAfrData(); + addUiOptions(); mAutoFrameRateHelper.saveOriginalState(activity); + mMainActivityRunOnce = true; } } @@ -51,22 +89,33 @@ public class AutoFrameRateManager extends PlayerEventListenerHelper { } } + private void persistAfrData() { + AppPrefs.instance(mActivity).setAfrData(mAfrData.toString()); + } + + private void restoreAfrData() { + mAfrData = AfrData.from(AppPrefs.instance(mActivity).getAfrData(null)); + } + private void onAfrOptionClick(OptionItem optionItem) { - mAfrEnabled = optionItem.isSelected(); + mAfrData.afrEnabled = optionItem.isSelected(); + persistAfrData(); } private void onFpsCorrectionClick(OptionItem optionItem) { - mCorrectionEnabled = optionItem.isSelected(); - mAutoFrameRateHelper.setFpsCorrectionEnabled(mCorrectionEnabled); + mAfrData.afrFpsCorrectionEnabled = optionItem.isSelected(); + mAutoFrameRateHelper.setFpsCorrectionEnabled(mAfrData.afrFpsCorrectionEnabled); + persistAfrData(); } private void onResolutionSwitchClick(OptionItem optionItem) { - mSwitchEnabled = optionItem.isSelected(); - mAutoFrameRateHelper.setResolutionSwitchEnabled(mSwitchEnabled); + mAfrData.afrResSwitchEnabled = optionItem.isSelected(); + mAutoFrameRateHelper.setResolutionSwitchEnabled(mAfrData.afrResSwitchEnabled); + persistAfrData(); } private void applyAfr() { - if (mAfrEnabled) { + if (mAfrData.afrEnabled) { applyAfr(mSelectedVideoTrack); } else { restoreAfr(); @@ -92,9 +141,9 @@ public class AutoFrameRateManager extends PlayerEventListenerHelper { String fpsCorrection = mActivity.getString(R.string.frame_rate_correction, "30->29.97, 60->59.94"); String resolutionSwitch = mActivity.getString(R.string.resolution_switch); List options = new ArrayList<>(); - options.add(UiOptionItem.from(title, this::onAfrOptionClick, mAfrEnabled)); - options.add(UiOptionItem.from(resolutionSwitch, this::onResolutionSwitchClick, mSwitchEnabled)); - options.add(UiOptionItem.from(fpsCorrection, this::onFpsCorrectionClick, mCorrectionEnabled)); + options.add(UiOptionItem.from(title, this::onAfrOptionClick, mAfrData.afrEnabled)); + options.add(UiOptionItem.from(resolutionSwitch, this::onResolutionSwitchClick, mAfrData.afrResSwitchEnabled)); + options.add(UiOptionItem.from(fpsCorrection, this::onFpsCorrectionClick, mAfrData.afrFpsCorrectionEnabled)); mUiManager.addCheckedCategory(title, options); diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/prefs/AppPrefs.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/prefs/AppPrefs.java index 315a548a9..fc31cbcf5 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/prefs/AppPrefs.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/prefs/AppPrefs.java @@ -13,6 +13,7 @@ public class AppPrefs extends SharedPreferencesBase { private static final String VIDEO_FORMAT = "video_format"; private static final String COMPLETED_ONBOARDING = "completed_onboarding"; private static final String VIDEO_BUFFER_TYPE = "video_buffer_type"; + private static final String AUTO_FRAME_RATE_DATA = "auto_frame_rate_data"; private String mDefaultDisplayMode; private String mCurrentDisplayMode; @@ -68,4 +69,12 @@ public class AppPrefs extends SharedPreferencesBase { public String getCurrentDisplayMode() { return mCurrentDisplayMode; } + + public String getAfrData(String defaultData) { + return getString(AUTO_FRAME_RATE_DATA, defaultData); + } + + public void setAfrData(String afrData) { + putString(AUTO_FRAME_RATE_DATA, afrData); + } }