feat: update image requirements to landscape orientation and add CI/CD workflow
Some checks failed
Build App / build (push) Failing after 3m44s
@@ -1,30 +1,37 @@
|
||||
{
|
||||
"expo": {
|
||||
"name": "mobile",
|
||||
"slug": "mobile",
|
||||
"name": "TV Control",
|
||||
"slug": "tv-control",
|
||||
"version": "1.0.0",
|
||||
"orientation": "portrait",
|
||||
"icon": "./assets/icon.png",
|
||||
"userInterfaceStyle": "light",
|
||||
"userInterfaceStyle": "automatic",
|
||||
"newArchEnabled": true,
|
||||
"splash": {
|
||||
"image": "./assets/splash-icon.png",
|
||||
"resizeMode": "contain",
|
||||
"backgroundColor": "#ffffff"
|
||||
"backgroundColor": "#8c8c8c"
|
||||
},
|
||||
"ios": {
|
||||
"supportsTablet": true
|
||||
"supportsTablet": false,
|
||||
"bundleIdentifier": "dev.reversed.tvcontrol"
|
||||
},
|
||||
"android": {
|
||||
"adaptiveIcon": {
|
||||
"foregroundImage": "./assets/adaptive-icon.png",
|
||||
"backgroundColor": "#ffffff"
|
||||
"backgroundColor": "#8c8c8c"
|
||||
},
|
||||
"package": "dev.reversed.tvcontrol",
|
||||
"edgeToEdgeEnabled": true,
|
||||
"predictiveBackGestureEnabled": false
|
||||
},
|
||||
"web": {
|
||||
"favicon": "./assets/favicon.png"
|
||||
},
|
||||
"extra": {
|
||||
"eas": {
|
||||
"projectId": "4e663169-e9d3-4ca5-95e3-4c2477fcd072"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 584 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 584 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 584 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 584 KiB |
30
mobile/eas.json
Normal file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"cli": {
|
||||
"version": ">= 16.0.0",
|
||||
"appVersionSource": "local"
|
||||
},
|
||||
"build": {
|
||||
"development": {
|
||||
"developmentClient": true,
|
||||
"distribution": "internal",
|
||||
"android": {
|
||||
"buildType": "apk"
|
||||
},
|
||||
"ios": {
|
||||
"simulator": true
|
||||
}
|
||||
},
|
||||
"preview": {
|
||||
"distribution": "internal",
|
||||
"android": {
|
||||
"buildType": "apk"
|
||||
}
|
||||
},
|
||||
"production": {
|
||||
"autoIncrement": true,
|
||||
"android": {
|
||||
"buildType": "app-bundle"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -39,7 +39,7 @@ export function SettingsPage() {
|
||||
.finally(() => setLoading(false));
|
||||
}, []);
|
||||
|
||||
// ── Pick a portrait image from the gallery
|
||||
// ── Pick a landscape image from the gallery
|
||||
const handlePickBackground = async () => {
|
||||
const { granted } = await ImagePicker.requestMediaLibraryPermissionsAsync();
|
||||
if (!granted) {
|
||||
@@ -57,9 +57,9 @@ export function SettingsPage() {
|
||||
|
||||
const asset = result.assets[0];
|
||||
|
||||
// Enforce portrait orientation (height must exceed width)
|
||||
if (asset.width >= asset.height) {
|
||||
setStatus("Please pick a portrait image (height must be greater than width).");
|
||||
// Enforce landscape orientation (width must exceed height)
|
||||
if (asset.width <= asset.height) {
|
||||
setStatus("Please pick a landscape image (width must be greater than height).");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -150,7 +150,7 @@ export function SettingsPage() {
|
||||
<View style={styles.section}>
|
||||
<Text style={shared.sectionLabel}>TV Background</Text>
|
||||
<Text style={shared.hint}>
|
||||
Displayed behind all content on the TV. Must be a portrait image (taller than wide).
|
||||
Displayed behind all content on the TV. Must be a landscape image (wider than tall).
|
||||
</Text>
|
||||
|
||||
{loading ? (
|
||||
@@ -246,7 +246,7 @@ const styles = StyleSheet.create({
|
||||
},
|
||||
preview: {
|
||||
width: "100%",
|
||||
aspectRatio: 9 / 16,
|
||||
aspectRatio: 16 / 9,
|
||||
},
|
||||
pendingBadge: {
|
||||
position: "absolute",
|
||||
@@ -266,7 +266,7 @@ const styles = StyleSheet.create({
|
||||
},
|
||||
emptyPreview: {
|
||||
width: "100%",
|
||||
aspectRatio: 9 / 16,
|
||||
aspectRatio: 16 / 9,
|
||||
borderRadius: 14,
|
||||
borderWidth: 1,
|
||||
borderColor: colors.border,
|
||||
|
||||