fix: aggiorna urgenza lista spesa live e più frequentemente

- Cache smart_shopping: 10min → 3min (urgenza fresca)
- backgroundBringSync: ogni 10min → ogni 5min + setInterval continuo
- backgroundBringSync: aggiunge anche 'high' (non solo 'critical') a Bring
- autoSyncUrgencySpecs: aggiorna spec anche se il livello di urgenza sale/scende
- Risultato: Latte/prodotti urgenti compaiono su Bring in max ~5min
This commit is contained in:
dadaloop82
2026-04-21 05:32:06 +00:00
parent cd4fd55006
commit 5bbedc8a3b
645 changed files with 74390 additions and 7 deletions
+1 -1
View File
@@ -3044,7 +3044,7 @@ function invalidateSmartShoppingCache(): void {
function smartShoppingCached(PDO $db): void { function smartShoppingCached(PDO $db): void {
$cacheFile = __DIR__ . '/../data/smart_shopping_cache.json'; $cacheFile = __DIR__ . '/../data/smart_shopping_cache.json';
$maxAge = 10 * 60; // 10 minutes $maxAge = 3 * 60; // 3 minutes — keep urgency fresh
if (file_exists($cacheFile)) { if (file_exists($cacheFile)) {
$mtime = filemtime($cacheFile); $mtime = filemtime($cacheFile);
+11 -6
View File
@@ -7366,7 +7366,11 @@ async function autoSyncUrgencySpecs() {
const currentHasUrgencyMarker = currentSpec.includes('urgente') || currentSpec.includes('presto'); const currentHasUrgencyMarker = currentSpec.includes('urgente') || currentSpec.includes('presto');
const needsUpdate = expectedSpec && !currentHasUrgencyMarker; const needsUpdate = expectedSpec && !currentHasUrgencyMarker;
const needsClear = !expectedSpec && currentHasUrgencyMarker; const needsClear = !expectedSpec && currentHasUrgencyMarker;
if (needsUpdate || needsClear) { // Also update if urgency level changed (e.g. medium→high or high→critical)
const currentIsHigh = currentSpec.includes('urgente');
const newIsHigh = (expectedSpec || '').toLowerCase().includes('urgente');
const urgencyEscalated = expectedSpec && currentHasUrgencyMarker && (currentIsHigh !== newIsHigh);
if (needsUpdate || needsClear || urgencyEscalated) {
toUpdate.push({ name: item.name, specification: expectedSpec, update_spec: true }); toUpdate.push({ name: item.name, specification: expectedSpec, update_spec: true });
// Optimistically update local item so re-render is immediate // Optimistically update local item so re-render is immediate
item.specification = expectedSpec; item.specification = expectedSpec;
@@ -10806,9 +10810,10 @@ async function _initApp() {
}); });
// ───────────────────────────────────────────────────────────────────── // ─────────────────────────────────────────────────────────────────────
// Silent background sync: update urgency specs on Bring and add missing critical items // Silent background sync: update urgency specs on Bring and add missing urgent items
// Runs once at startup (time-gated: max every 10 min) without affecting the UI // Runs at startup + every 5 min (time-gated internally)
_backgroundBringSync(); _backgroundBringSync();
setInterval(() => { if (!_screensaverActive) _backgroundBringSync(); }, 5 * 60 * 1000);
} }
/** /**
@@ -10820,7 +10825,7 @@ async function _initApp() {
*/ */
async function _backgroundBringSync() { async function _backgroundBringSync() {
const lastRun = parseInt(localStorage.getItem('_bgBringSyncTs') || '0'); const lastRun = parseInt(localStorage.getItem('_bgBringSyncTs') || '0');
if (Date.now() - lastRun < 10 * 60 * 1000) return; if (Date.now() - lastRun < 5 * 60 * 1000) return;
localStorage.setItem('_bgBringSyncTs', String(Date.now())); localStorage.setItem('_bgBringSyncTs', String(Date.now()));
try { try {
@@ -10861,8 +10866,8 @@ async function _backgroundBringSync() {
}); });
if (!bringMatch) { if (!bringMatch) {
// Not on Bring — add if critical AND not recently purchased // Not on Bring — add if high or critical AND not recently purchased
if (si.urgency === 'critical' && !_isBringPurchased(si.name, 'critical')) { if ((si.urgency === 'critical' || si.urgency === 'high') && !_isBringPurchased(si.name, si.urgency)) {
toAdd.push({ name: si.name, specification: expectedSpec }); toAdd.push({ name: si.name, specification: expectedSpec });
} }
} else { } else {
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,2 @@
#Mon Apr 20 17:42:13 UTC 2026
gradle.version=8.4
Binary file not shown.
@@ -0,0 +1,297 @@
// Generated by view binder compiler. Do not edit!
package it.dadaloop.evershelf.kiosk.databinding;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.viewbinding.ViewBinding;
import androidx.viewbinding.ViewBindings;
import com.google.android.material.button.MaterialButton;
import it.dadaloop.evershelf.kiosk.R;
import java.lang.NullPointerException;
import java.lang.Override;
import java.lang.String;
public final class ActivityKioskBinding implements ViewBinding {
@NonNull
private final FrameLayout rootView;
@NonNull
public final MaterialButton btnFinish;
@NonNull
public final MaterialButton btnGetStarted;
@NonNull
public final ImageButton btnSettings;
@NonNull
public final MaterialButton btnSkipScale;
@NonNull
public final MaterialButton btnStep2Back;
@NonNull
public final MaterialButton btnStep2Next;
@NonNull
public final MaterialButton btnStep3Back;
@NonNull
public final MaterialButton btnTestUrl;
@NonNull
public final LinearLayout scaleStatusCard;
@NonNull
public final TextView scaleStatusDetail;
@NonNull
public final TextView scaleStatusIcon;
@NonNull
public final TextView scaleStatusText;
@NonNull
public final LinearLayout splashContainer;
@NonNull
public final LinearLayout step1;
@NonNull
public final LinearLayout step2;
@NonNull
public final LinearLayout step3;
@NonNull
public final LinearLayout stepIndicator;
@NonNull
public final TextView urlStatus;
@NonNull
public final WebView webView;
@NonNull
public final ScrollView wizardContainer;
@NonNull
public final TextView wizardTitle;
@NonNull
public final EditText wizardUrl;
private ActivityKioskBinding(@NonNull FrameLayout rootView, @NonNull MaterialButton btnFinish,
@NonNull MaterialButton btnGetStarted, @NonNull ImageButton btnSettings,
@NonNull MaterialButton btnSkipScale, @NonNull MaterialButton btnStep2Back,
@NonNull MaterialButton btnStep2Next, @NonNull MaterialButton btnStep3Back,
@NonNull MaterialButton btnTestUrl, @NonNull LinearLayout scaleStatusCard,
@NonNull TextView scaleStatusDetail, @NonNull TextView scaleStatusIcon,
@NonNull TextView scaleStatusText, @NonNull LinearLayout splashContainer,
@NonNull LinearLayout step1, @NonNull LinearLayout step2, @NonNull LinearLayout step3,
@NonNull LinearLayout stepIndicator, @NonNull TextView urlStatus, @NonNull WebView webView,
@NonNull ScrollView wizardContainer, @NonNull TextView wizardTitle,
@NonNull EditText wizardUrl) {
this.rootView = rootView;
this.btnFinish = btnFinish;
this.btnGetStarted = btnGetStarted;
this.btnSettings = btnSettings;
this.btnSkipScale = btnSkipScale;
this.btnStep2Back = btnStep2Back;
this.btnStep2Next = btnStep2Next;
this.btnStep3Back = btnStep3Back;
this.btnTestUrl = btnTestUrl;
this.scaleStatusCard = scaleStatusCard;
this.scaleStatusDetail = scaleStatusDetail;
this.scaleStatusIcon = scaleStatusIcon;
this.scaleStatusText = scaleStatusText;
this.splashContainer = splashContainer;
this.step1 = step1;
this.step2 = step2;
this.step3 = step3;
this.stepIndicator = stepIndicator;
this.urlStatus = urlStatus;
this.webView = webView;
this.wizardContainer = wizardContainer;
this.wizardTitle = wizardTitle;
this.wizardUrl = wizardUrl;
}
@Override
@NonNull
public FrameLayout getRoot() {
return rootView;
}
@NonNull
public static ActivityKioskBinding inflate(@NonNull LayoutInflater inflater) {
return inflate(inflater, null, false);
}
@NonNull
public static ActivityKioskBinding inflate(@NonNull LayoutInflater inflater,
@Nullable ViewGroup parent, boolean attachToParent) {
View root = inflater.inflate(R.layout.activity_kiosk, parent, false);
if (attachToParent) {
parent.addView(root);
}
return bind(root);
}
@NonNull
public static ActivityKioskBinding bind(@NonNull View rootView) {
// The body of this method is generated in a way you would not otherwise write.
// This is done to optimize the compiled bytecode for size and performance.
int id;
missingId: {
id = R.id.btnFinish;
MaterialButton btnFinish = ViewBindings.findChildViewById(rootView, id);
if (btnFinish == null) {
break missingId;
}
id = R.id.btnGetStarted;
MaterialButton btnGetStarted = ViewBindings.findChildViewById(rootView, id);
if (btnGetStarted == null) {
break missingId;
}
id = R.id.btnSettings;
ImageButton btnSettings = ViewBindings.findChildViewById(rootView, id);
if (btnSettings == null) {
break missingId;
}
id = R.id.btnSkipScale;
MaterialButton btnSkipScale = ViewBindings.findChildViewById(rootView, id);
if (btnSkipScale == null) {
break missingId;
}
id = R.id.btnStep2Back;
MaterialButton btnStep2Back = ViewBindings.findChildViewById(rootView, id);
if (btnStep2Back == null) {
break missingId;
}
id = R.id.btnStep2Next;
MaterialButton btnStep2Next = ViewBindings.findChildViewById(rootView, id);
if (btnStep2Next == null) {
break missingId;
}
id = R.id.btnStep3Back;
MaterialButton btnStep3Back = ViewBindings.findChildViewById(rootView, id);
if (btnStep3Back == null) {
break missingId;
}
id = R.id.btnTestUrl;
MaterialButton btnTestUrl = ViewBindings.findChildViewById(rootView, id);
if (btnTestUrl == null) {
break missingId;
}
id = R.id.scaleStatusCard;
LinearLayout scaleStatusCard = ViewBindings.findChildViewById(rootView, id);
if (scaleStatusCard == null) {
break missingId;
}
id = R.id.scaleStatusDetail;
TextView scaleStatusDetail = ViewBindings.findChildViewById(rootView, id);
if (scaleStatusDetail == null) {
break missingId;
}
id = R.id.scaleStatusIcon;
TextView scaleStatusIcon = ViewBindings.findChildViewById(rootView, id);
if (scaleStatusIcon == null) {
break missingId;
}
id = R.id.scaleStatusText;
TextView scaleStatusText = ViewBindings.findChildViewById(rootView, id);
if (scaleStatusText == null) {
break missingId;
}
id = R.id.splashContainer;
LinearLayout splashContainer = ViewBindings.findChildViewById(rootView, id);
if (splashContainer == null) {
break missingId;
}
id = R.id.step1;
LinearLayout step1 = ViewBindings.findChildViewById(rootView, id);
if (step1 == null) {
break missingId;
}
id = R.id.step2;
LinearLayout step2 = ViewBindings.findChildViewById(rootView, id);
if (step2 == null) {
break missingId;
}
id = R.id.step3;
LinearLayout step3 = ViewBindings.findChildViewById(rootView, id);
if (step3 == null) {
break missingId;
}
id = R.id.stepIndicator;
LinearLayout stepIndicator = ViewBindings.findChildViewById(rootView, id);
if (stepIndicator == null) {
break missingId;
}
id = R.id.urlStatus;
TextView urlStatus = ViewBindings.findChildViewById(rootView, id);
if (urlStatus == null) {
break missingId;
}
id = R.id.webView;
WebView webView = ViewBindings.findChildViewById(rootView, id);
if (webView == null) {
break missingId;
}
id = R.id.wizardContainer;
ScrollView wizardContainer = ViewBindings.findChildViewById(rootView, id);
if (wizardContainer == null) {
break missingId;
}
id = R.id.wizardTitle;
TextView wizardTitle = ViewBindings.findChildViewById(rootView, id);
if (wizardTitle == null) {
break missingId;
}
id = R.id.wizardUrl;
EditText wizardUrl = ViewBindings.findChildViewById(rootView, id);
if (wizardUrl == null) {
break missingId;
}
return new ActivityKioskBinding((FrameLayout) rootView, btnFinish, btnGetStarted, btnSettings,
btnSkipScale, btnStep2Back, btnStep2Next, btnStep3Back, btnTestUrl, scaleStatusCard,
scaleStatusDetail, scaleStatusIcon, scaleStatusText, splashContainer, step1, step2, step3,
stepIndicator, urlStatus, webView, wizardContainer, wizardTitle, wizardUrl);
}
String missingId = rootView.getResources().getResourceName(id);
throw new NullPointerException("Missing required view with ID: ".concat(missingId));
}
}
@@ -0,0 +1,135 @@
// Generated by view binder compiler. Do not edit!
package it.dadaloop.evershelf.kiosk.databinding;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ScrollView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.viewbinding.ViewBinding;
import androidx.viewbinding.ViewBindings;
import com.google.android.material.button.MaterialButton;
import it.dadaloop.evershelf.kiosk.R;
import java.lang.NullPointerException;
import java.lang.Override;
import java.lang.String;
public final class ActivitySettingsBinding implements ViewBinding {
@NonNull
private final ScrollView rootView;
@NonNull
public final ImageButton btnBack;
@NonNull
public final MaterialButton btnRunWizard;
@NonNull
public final MaterialButton btnSave;
@NonNull
public final MaterialButton btnTestConnection;
@NonNull
public final TextView scaleDeviceInfo;
@NonNull
public final TextView scaleGatewayStatus;
@NonNull
public final EditText urlEdit;
private ActivitySettingsBinding(@NonNull ScrollView rootView, @NonNull ImageButton btnBack,
@NonNull MaterialButton btnRunWizard, @NonNull MaterialButton btnSave,
@NonNull MaterialButton btnTestConnection, @NonNull TextView scaleDeviceInfo,
@NonNull TextView scaleGatewayStatus, @NonNull EditText urlEdit) {
this.rootView = rootView;
this.btnBack = btnBack;
this.btnRunWizard = btnRunWizard;
this.btnSave = btnSave;
this.btnTestConnection = btnTestConnection;
this.scaleDeviceInfo = scaleDeviceInfo;
this.scaleGatewayStatus = scaleGatewayStatus;
this.urlEdit = urlEdit;
}
@Override
@NonNull
public ScrollView getRoot() {
return rootView;
}
@NonNull
public static ActivitySettingsBinding inflate(@NonNull LayoutInflater inflater) {
return inflate(inflater, null, false);
}
@NonNull
public static ActivitySettingsBinding inflate(@NonNull LayoutInflater inflater,
@Nullable ViewGroup parent, boolean attachToParent) {
View root = inflater.inflate(R.layout.activity_settings, parent, false);
if (attachToParent) {
parent.addView(root);
}
return bind(root);
}
@NonNull
public static ActivitySettingsBinding bind(@NonNull View rootView) {
// The body of this method is generated in a way you would not otherwise write.
// This is done to optimize the compiled bytecode for size and performance.
int id;
missingId: {
id = R.id.btnBack;
ImageButton btnBack = ViewBindings.findChildViewById(rootView, id);
if (btnBack == null) {
break missingId;
}
id = R.id.btnRunWizard;
MaterialButton btnRunWizard = ViewBindings.findChildViewById(rootView, id);
if (btnRunWizard == null) {
break missingId;
}
id = R.id.btnSave;
MaterialButton btnSave = ViewBindings.findChildViewById(rootView, id);
if (btnSave == null) {
break missingId;
}
id = R.id.btnTestConnection;
MaterialButton btnTestConnection = ViewBindings.findChildViewById(rootView, id);
if (btnTestConnection == null) {
break missingId;
}
id = R.id.scaleDeviceInfo;
TextView scaleDeviceInfo = ViewBindings.findChildViewById(rootView, id);
if (scaleDeviceInfo == null) {
break missingId;
}
id = R.id.scaleGatewayStatus;
TextView scaleGatewayStatus = ViewBindings.findChildViewById(rootView, id);
if (scaleGatewayStatus == null) {
break missingId;
}
id = R.id.urlEdit;
EditText urlEdit = ViewBindings.findChildViewById(rootView, id);
if (urlEdit == null) {
break missingId;
}
return new ActivitySettingsBinding((ScrollView) rootView, btnBack, btnRunWizard, btnSave,
btnTestConnection, scaleDeviceInfo, scaleGatewayStatus, urlEdit);
}
String missingId = rootView.getResources().getResourceName(id);
throw new NullPointerException("Missing required view with ID: ".concat(missingId));
}
}
@@ -0,0 +1,2 @@
#- File Locator -
listingFile=../../../outputs/apk/debug/output-metadata.json
@@ -0,0 +1,2 @@
appMetadataVersion=1.1
androidGradlePluginVersion=8.2.2
@@ -0,0 +1,10 @@
{
"version": 3,
"artifactType": {
"type": "COMPATIBLE_SCREEN_MANIFEST",
"kind": "Directory"
},
"applicationId": "it.dadaloop.evershelf.kiosk",
"variantName": "debug",
"elements": []
}
@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_kiosk" modulePackage="it.dadaloop.evershelf.kiosk" filePath="app/src/main/res/layout/activity_kiosk.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.FrameLayout"><Targets><Target tag="layout/activity_kiosk_0" view="FrameLayout"><Expressions/><location startLine="1" startOffset="0" endLine="427" endOffset="13"/></Target><Target id="@+id/splashContainer" view="LinearLayout"><Expressions/><location startLine="7" startOffset="4" endLine="43" endOffset="18"/></Target><Target id="@+id/wizardContainer" view="ScrollView"><Expressions/><location startLine="46" startOffset="4" endLine="403" endOffset="16"/></Target><Target id="@+id/stepIndicator" view="LinearLayout"><Expressions/><location startLine="64" startOffset="12" endLine="70" endOffset="42"/></Target><Target id="@+id/step1" view="LinearLayout"><Expressions/><location startLine="73" startOffset="12" endLine="162" endOffset="26"/></Target><Target id="@+id/wizardTitle" view="TextView"><Expressions/><location startLine="88" startOffset="16" endLine="98" endOffset="56"/></Target><Target id="@+id/btnGetStarted" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="154" startOffset="16" endLine="161" endOffset="54"/></Target><Target id="@+id/step2" view="LinearLayout"><Expressions/><location startLine="165" startOffset="12" endLine="283" endOffset="26"/></Target><Target id="@+id/wizardUrl" view="EditText"><Expressions/><location startLine="208" startOffset="16" endLine="220" endOffset="56"/></Target><Target id="@+id/urlStatus" view="TextView"><Expressions/><location startLine="222" startOffset="16" endLine="229" endOffset="56"/></Target><Target id="@+id/btnTestUrl" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="231" startOffset="16" endLine="241" endOffset="56"/></Target><Target id="@+id/btnStep2Back" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="260" startOffset="20" endLine="271" endOffset="57"/></Target><Target id="@+id/btnStep2Next" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="273" startOffset="20" endLine="281" endOffset="58"/></Target><Target id="@+id/step3" view="LinearLayout"><Expressions/><location startLine="286" startOffset="12" endLine="400" endOffset="26"/></Target><Target id="@+id/scaleStatusCard" view="LinearLayout"><Expressions/><location startLine="321" startOffset="16" endLine="357" endOffset="30"/></Target><Target id="@+id/scaleStatusIcon" view="TextView"><Expressions/><location startLine="330" startOffset="20" endLine="337" endOffset="59"/></Target><Target id="@+id/scaleStatusText" view="TextView"><Expressions/><location startLine="339" startOffset="20" endLine="347" endOffset="59"/></Target><Target id="@+id/scaleStatusDetail" view="TextView"><Expressions/><location startLine="349" startOffset="20" endLine="356" endOffset="50"/></Target><Target id="@+id/btnStep3Back" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="366" startOffset="20" endLine="377" endOffset="57"/></Target><Target id="@+id/btnFinish" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="379" startOffset="20" endLine="387" endOffset="58"/></Target><Target id="@+id/btnSkipScale" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="390" startOffset="16" endLine="399" endOffset="53"/></Target><Target id="@+id/webView" view="WebView"><Expressions/><location startLine="406" startOffset="4" endLine="410" endOffset="35"/></Target><Target id="@+id/btnSettings" view="ImageButton"><Expressions/><location startLine="413" startOffset="4" endLine="425" endOffset="35"/></Target></Targets></Layout>
@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_settings" modulePackage="it.dadaloop.evershelf.kiosk" filePath="app/src/main/res/layout/activity_settings.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.ScrollView"><Targets><Target tag="layout/activity_settings_0" view="ScrollView"><Expressions/><location startLine="1" startOffset="0" endLine="194" endOffset="12"/></Target><Target id="@+id/btnBack" view="ImageButton"><Expressions/><location startLine="21" startOffset="12" endLine="29" endOffset="49"/></Target><Target id="@+id/urlEdit" view="EditText"><Expressions/><location startLine="67" startOffset="12" endLine="79" endOffset="52"/></Target><Target id="@+id/btnTestConnection" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="81" startOffset="12" endLine="90" endOffset="45"/></Target><Target id="@+id/scaleGatewayStatus" view="TextView"><Expressions/><location startLine="127" startOffset="16" endLine="133" endOffset="45"/></Target><Target id="@+id/scaleDeviceInfo" view="TextView"><Expressions/><location startLine="136" startOffset="12" endLine="142" endOffset="41"/></Target><Target id="@+id/btnRunWizard" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="164" startOffset="12" endLine="173" endOffset="45"/></Target><Target id="@+id/btnSave" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="183" startOffset="8" endLine="191" endOffset="48"/></Target></Targets></Layout>
@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_kiosk" modulePackage="it.dadaloop.evershelf.kiosk" filePath="app/src/main/res/layout/activity_kiosk.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.FrameLayout"><Targets><Target tag="layout/activity_kiosk_0" view="FrameLayout"><Expressions/><location startLine="1" startOffset="0" endLine="427" endOffset="13"/></Target><Target id="@+id/splashContainer" view="LinearLayout"><Expressions/><location startLine="7" startOffset="4" endLine="43" endOffset="18"/></Target><Target id="@+id/wizardContainer" view="ScrollView"><Expressions/><location startLine="46" startOffset="4" endLine="403" endOffset="16"/></Target><Target id="@+id/stepIndicator" view="LinearLayout"><Expressions/><location startLine="64" startOffset="12" endLine="70" endOffset="42"/></Target><Target id="@+id/step1" view="LinearLayout"><Expressions/><location startLine="73" startOffset="12" endLine="162" endOffset="26"/></Target><Target id="@+id/wizardTitle" view="TextView"><Expressions/><location startLine="88" startOffset="16" endLine="98" endOffset="56"/></Target><Target id="@+id/btnGetStarted" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="154" startOffset="16" endLine="161" endOffset="54"/></Target><Target id="@+id/step2" view="LinearLayout"><Expressions/><location startLine="165" startOffset="12" endLine="283" endOffset="26"/></Target><Target id="@+id/wizardUrl" view="EditText"><Expressions/><location startLine="208" startOffset="16" endLine="220" endOffset="56"/></Target><Target id="@+id/urlStatus" view="TextView"><Expressions/><location startLine="222" startOffset="16" endLine="229" endOffset="56"/></Target><Target id="@+id/btnTestUrl" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="231" startOffset="16" endLine="241" endOffset="56"/></Target><Target id="@+id/btnStep2Back" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="260" startOffset="20" endLine="271" endOffset="57"/></Target><Target id="@+id/btnStep2Next" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="273" startOffset="20" endLine="281" endOffset="58"/></Target><Target id="@+id/step3" view="LinearLayout"><Expressions/><location startLine="286" startOffset="12" endLine="400" endOffset="26"/></Target><Target id="@+id/scaleStatusCard" view="LinearLayout"><Expressions/><location startLine="321" startOffset="16" endLine="357" endOffset="30"/></Target><Target id="@+id/scaleStatusIcon" view="TextView"><Expressions/><location startLine="330" startOffset="20" endLine="337" endOffset="59"/></Target><Target id="@+id/scaleStatusText" view="TextView"><Expressions/><location startLine="339" startOffset="20" endLine="347" endOffset="59"/></Target><Target id="@+id/scaleStatusDetail" view="TextView"><Expressions/><location startLine="349" startOffset="20" endLine="356" endOffset="50"/></Target><Target id="@+id/btnStep3Back" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="366" startOffset="20" endLine="377" endOffset="57"/></Target><Target id="@+id/btnFinish" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="379" startOffset="20" endLine="387" endOffset="58"/></Target><Target id="@+id/btnSkipScale" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="390" startOffset="16" endLine="399" endOffset="53"/></Target><Target id="@+id/webView" view="WebView"><Expressions/><location startLine="406" startOffset="4" endLine="410" endOffset="35"/></Target><Target id="@+id/btnSettings" view="ImageButton"><Expressions/><location startLine="413" startOffset="4" endLine="425" endOffset="35"/></Target></Targets></Layout>
@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_settings" modulePackage="it.dadaloop.evershelf.kiosk" filePath="app/src/main/res/layout/activity_settings.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.ScrollView"><Targets><Target tag="layout/activity_settings_0" view="ScrollView"><Expressions/><location startLine="1" startOffset="0" endLine="194" endOffset="12"/></Target><Target id="@+id/btnBack" view="ImageButton"><Expressions/><location startLine="21" startOffset="12" endLine="29" endOffset="49"/></Target><Target id="@+id/urlEdit" view="EditText"><Expressions/><location startLine="67" startOffset="12" endLine="79" endOffset="52"/></Target><Target id="@+id/btnTestConnection" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="81" startOffset="12" endLine="90" endOffset="45"/></Target><Target id="@+id/scaleGatewayStatus" view="TextView"><Expressions/><location startLine="127" startOffset="16" endLine="133" endOffset="45"/></Target><Target id="@+id/scaleDeviceInfo" view="TextView"><Expressions/><location startLine="136" startOffset="12" endLine="142" endOffset="41"/></Target><Target id="@+id/btnRunWizard" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="164" startOffset="12" endLine="173" endOffset="45"/></Target><Target id="@+id/btnSave" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="183" startOffset="8" endLine="191" endOffset="48"/></Target></Targets></Layout>

Some files were not shown because too many files have changed in this diff Show More