This commit is contained in:
Yuriy Liskov
2020-09-22 11:00:09 +03:00
parent 53161c4efa
commit 0401cf45c4
4 changed files with 87 additions and 15 deletions

View File

@@ -2,6 +2,7 @@ package com.liskovsoft.smartyoutubetv2.common.autoframerate;
import android.app.Activity;
import com.liskovsoft.sharedutils.mylogger.Log;
import com.liskovsoft.smartyoutubetv2.common.autoframerate.internal.DisplayHolder.Mode;
import com.liskovsoft.smartyoutubetv2.common.autoframerate.internal.DisplaySyncHelper;
import com.liskovsoft.smartyoutubetv2.common.autoframerate.internal.DisplaySyncHelper.AutoFrameRateListener;
import com.liskovsoft.smartyoutubetv2.common.autoframerate.internal.DisplaySyncHelperAlt;
@@ -31,7 +32,7 @@ public class AutoFrameRateHelper {
mFrameRateMapping.put(60f, 59.94f);
}
public void apply(FormatItem format) {
public void apply(FormatItem format, boolean force) {
if (mActivity == null) {
Log.e(TAG, "Activity in null. exiting...");
return;
@@ -53,12 +54,16 @@ public class AutoFrameRateHelper {
} else {
mPrevCall = System.currentTimeMillis();
}
float frameRate = correctFps(format.getFrameRate());
int width = format.getWidth();
Log.d(TAG, String.format("Applying mode change... Video fps: %s, width: %s, height: %s", frameRate, width, format.getHeight()));
mSyncHelper.syncDisplayMode(mActivity.getWindow(), width, frameRate);
mSyncHelper.syncDisplayMode(mActivity.getWindow(), width, frameRate, force);
}
public void apply(FormatItem format) {
apply(format, false);
}
public boolean isSupported() {
@@ -86,7 +91,7 @@ public class AutoFrameRateHelper {
mSyncHelper.saveOriginalState();
}
public void restoreOriginalState() {
public void restoreOriginalState(boolean force) {
if (!isSupported()) {
Log.d(TAG, "restoreOriginalState: autoframerate not enabled... exiting...");
return;
@@ -94,11 +99,15 @@ public class AutoFrameRateHelper {
Log.d(TAG, "Restoring original mode...");
boolean result = mSyncHelper.restoreOriginalState(mActivity.getWindow());
boolean result = mSyncHelper.restoreOriginalState(mActivity.getWindow(), force);
Log.d(TAG, "Restore mode result: " + result);
}
public void restoreOriginalState() {
restoreOriginalState(false);
}
public void setListener(AutoFrameRateListener listener) {
mSyncHelper.setListener(listener);
}

View File

@@ -0,0 +1,32 @@
package com.liskovsoft.smartyoutubetv2.common.autoframerate;
import android.app.Activity;
import com.liskovsoft.smartyoutubetv2.common.autoframerate.internal.DisplaySyncHelper;
import com.liskovsoft.smartyoutubetv2.common.autoframerate.internal.DisplaySyncHelperAlt;
public class ModeSyncManager {
private static ModeSyncManager sInstance;
private final DisplaySyncHelper mDisplaySyncHelper;
public ModeSyncManager(Activity activity) {
mDisplaySyncHelper = new DisplaySyncHelperAlt(activity);
}
public static ModeSyncManager instance(Activity activity) {
if (sInstance == null) {
sInstance = new ModeSyncManager(activity);
}
return sInstance;
}
public void save(Activity activity) {
mDisplaySyncHelper.setContext(activity);
mDisplaySyncHelper.saveCurrentState();
}
public void restore(Activity activity) {
mDisplaySyncHelper.setContext(activity);
mDisplaySyncHelper.restoreCurrentState(activity.getWindow());
}
}

View File

@@ -240,6 +240,10 @@ public class DisplaySyncHelper implements UhdHelperListener {
return true;
}
public boolean syncDisplayMode(Window window, int videoWidth, float videoFramerate) {
return syncDisplayMode(window, videoWidth, videoFramerate, false);
}
/**
* Tries to find best suited display params for the video
* @param window window object
@@ -247,7 +251,7 @@ public class DisplaySyncHelper implements UhdHelperListener {
* @param videoFramerate framerate of the video
* @return
*/
public boolean syncDisplayMode(Window window, int videoWidth, float videoFramerate) {
public boolean syncDisplayMode(Window window, int videoWidth, float videoFramerate, boolean force) {
if (supportsDisplayModeChange() && videoWidth >= 10) {
if (mUhdHelper == null) {
mUhdHelper = new UhdHelper(mContext);
@@ -307,7 +311,7 @@ public class DisplaySyncHelper implements UhdHelperListener {
Log.i(TAG, "Found closer mode: " + closerMode + " for fps " + videoFramerate);
Log.i(TAG, "Current mode: " + currentMode);
if (closerMode.equals(currentMode)) {
if (!force && closerMode.equals(currentMode)) {
Log.i(TAG, "Do not need to change mode.");
// NOTE: changed
@@ -351,17 +355,27 @@ public class DisplaySyncHelper implements UhdHelperListener {
saveState(STATE_CURRENT);
}
public boolean restoreOriginalState(Window window, boolean force) {
return restoreState(window, STATE_ORIGINAL, force);
}
public boolean restoreOriginalState(Window window) {
return restoreState(window, STATE_ORIGINAL);
return restoreOriginalState(window, false);
}
public boolean restoreCurrentState(Window window, boolean force) {
return restoreState(window, STATE_CURRENT, force);
}
public boolean restoreCurrentState(Window window) {
return restoreState(window, STATE_CURRENT);
return restoreState(window, STATE_CURRENT, false);
}
private void saveState(int state) {
Mode mode = getUhdHelper().getCurrentMode();
Log.d(TAG, "Saving mode: " + mode);
if (mode != null) {
switch (state) {
case STATE_ORIGINAL:
@@ -377,7 +391,7 @@ public class DisplaySyncHelper implements UhdHelperListener {
}
}
private boolean restoreState(Window window, int state) {
private boolean restoreState(Window window, int state, boolean force) {
Log.d(TAG, "Beginning to restore state...");
Mode modeTmp = null;
@@ -392,17 +406,19 @@ public class DisplaySyncHelper implements UhdHelperListener {
}
if (modeTmp == null) {
Log.e(TAG, "Can't restore state. Mode is null.");
Log.d(TAG, "Can't restore state. Mode is null.");
return false;
}
Mode mode = getUhdHelper().getCurrentMode();
if (modeTmp.equals(mode)) {
if (!force && modeTmp.equals(mode)) {
Log.d(TAG, "Do not need to restore mode. Current mode is the same as new.");
return false;
}
Log.d(TAG, "Restoring mode: " + modeTmp);
getUhdHelper().setPreferredDisplayModeId(
window,
modeTmp.getModeId(),
@@ -440,9 +456,6 @@ public class DisplaySyncHelper implements UhdHelperListener {
if (mNewMode != null) {
mOriginalMode = mNewMode;
// NOTE: changed
//CommonApplication.getPreferences().setDefaultDisplayMode(UhdHelper.formatMode(mOriginalMode));
}
}
@@ -459,5 +472,6 @@ public class DisplaySyncHelper implements UhdHelperListener {
public void setContext(Context context) {
mContext = context;
mUhdHelper = null; // uhd helper uses context, so do refresh
}
}

View File

@@ -6,6 +6,7 @@ import android.os.Bundle;
import android.view.KeyEvent;
import androidx.fragment.app.FragmentActivity;
import com.liskovsoft.sharedutils.mylogger.Log;
import com.liskovsoft.smartyoutubetv2.common.autoframerate.ModeSyncManager;
import com.liskovsoft.smartyoutubetv2.common.app.views.ViewManager;
import com.liskovsoft.smartyoutubetv2.tv.ui.search.SearchActivity;
@@ -17,6 +18,7 @@ public abstract class LeanbackActivity extends FragmentActivity {
private LongClickManager mLongClickManager;
private UriBackgroundManager mBackgroundManager;
private ViewManager mViewManager;
private ModeSyncManager mModeSyncManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -24,6 +26,7 @@ public abstract class LeanbackActivity extends FragmentActivity {
mLongClickManager = new LongClickManager();
mBackgroundManager = new UriBackgroundManager(this);
mViewManager = ViewManager.instance(this);
mModeSyncManager = ModeSyncManager.instance(this);
}
@Override
@@ -59,6 +62,20 @@ public abstract class LeanbackActivity extends FragmentActivity {
mViewManager.addTopActivity(this.getClass());
}
//@Override
//protected void onResume() {
// super.onResume();
//
// mModeSyncManager.restore(this);
//}
//@Override
//protected void onPause() {
// super.onPause();
//
// mModeSyncManager.save(this);
//}
@Override
protected void onStop() {
super.onStop();