-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Feat[controls]: implement control layout sanitizer
- Loading branch information
Showing
2 changed files
with
57 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
52 changes: 52 additions & 0 deletions
52
app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/LayoutSanitizer.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
package net.kdt.pojavlaunch.customcontrols; | ||
|
||
import java.util.Iterator; | ||
import java.util.List; | ||
|
||
public class LayoutSanitizer { | ||
|
||
// Maybe add more conditions here later? | ||
private static boolean isInvalidFormula(String formula) { | ||
return formula.contains("Infinity"); | ||
} | ||
|
||
private static boolean isSaneData(ControlData controlData) { | ||
if(controlData.getWidth() == 0 || controlData.getHeight() == 0) return false; | ||
if(isInvalidFormula(controlData.dynamicX) || isInvalidFormula(controlData.dynamicY)) return false; | ||
return true; | ||
} | ||
|
||
private static ControlData getControlData(Object dataEntry) { | ||
if(dataEntry instanceof ControlData) { | ||
return (ControlData) dataEntry; | ||
}else if(dataEntry instanceof ControlDrawerData) { | ||
return ((ControlDrawerData) dataEntry).properties; | ||
}else throw new RuntimeException("Encountered wrong type during ControlData sanitization"); | ||
} | ||
|
||
private static boolean sanitizeList(List<?> controlDataList) { | ||
boolean madeChanges = false; | ||
Iterator<?> iterator = controlDataList.iterator(); | ||
while(iterator.hasNext()) { | ||
ControlData controlData = getControlData(iterator.next()); | ||
if(!isSaneData(controlData)) { | ||
madeChanges = true; | ||
iterator.remove(); | ||
} | ||
} | ||
return madeChanges; | ||
} | ||
|
||
/** | ||
* Check all buttons in a control layout and ensure they're sane (contain values valid enough | ||
* to be displayed properly). Removes any buttons deemed not sane. | ||
* @param controls the original control layout. | ||
* @return whether the sanitization process made any changes to the layout | ||
*/ | ||
public static boolean sanitizeLayout(CustomControls controls) { | ||
boolean madeChanges = sanitizeList(controls.mControlDataList); | ||
if(sanitizeList(controls.mDrawerDataList)) madeChanges = true; | ||
if(sanitizeList(controls.mJoystickDataList)) madeChanges = true; | ||
return madeChanges; | ||
} | ||
} |