Completata implementazione dei permessi.
Implementata visibility tramite BindableBoolean.
This commit is contained in:
parent
92bdb1fa14
commit
8908ada740
BIN
.idea/caches/build_file_checksums.ser
generated
BIN
.idea/caches/build_file_checksums.ser
generated
Binary file not shown.
@ -71,7 +71,8 @@ dependencies {
|
|||||||
implementation "androidx.lifecycle:lifecycle-common-java8:2.0.0"
|
implementation "androidx.lifecycle:lifecycle-common-java8:2.0.0"
|
||||||
kapt "androidx.lifecycle:lifecycle-compiler:2.0.0"
|
kapt "androidx.lifecycle:lifecycle-compiler:2.0.0"
|
||||||
|
|
||||||
implementation "com.emreeran.permissionlivedata:permissionlivedata:1.0.4"
|
//implementation "com.emreeran.permissionlivedata:permissionlivedata:1.0.4"
|
||||||
|
//implementation 'com.karumi:dexter:5.0.0'
|
||||||
|
|
||||||
//MVVM
|
//MVVM
|
||||||
implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'
|
implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'
|
||||||
|
|||||||
@ -22,9 +22,7 @@
|
|||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:screenOrientation="portrait"
|
android:screenOrientation="portrait"
|
||||||
android:theme="@style/Light"
|
android:theme="@style/Light"
|
||||||
android:windowSoftInputMode="adjustPan">
|
android:windowSoftInputMode="adjustPan"></activity>
|
||||||
|
|
||||||
</activity>
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".gest.accettazione_ordine_inevaso.AccettazioneOrdineInevasoActivity"
|
android:name=".gest.accettazione_ordine_inevaso.AccettazioneOrdineInevasoActivity"
|
||||||
android:screenOrientation="portrait"
|
android:screenOrientation="portrait"
|
||||||
@ -68,7 +66,6 @@
|
|||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
|
|
||||||
<provider
|
<provider
|
||||||
android:name=".core.update.GenericFileProvider"
|
android:name=".core.update.GenericFileProvider"
|
||||||
android:authorities="${applicationId}.core.update.GenericFileProvider"
|
android:authorities="${applicationId}.core.update.GenericFileProvider"
|
||||||
@ -76,8 +73,15 @@
|
|||||||
android:grantUriPermissions="true">
|
android:grantUriPermissions="true">
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="android.support.FILE_PROVIDER_PATHS"
|
android:name="android.support.FILE_PROVIDER_PATHS"
|
||||||
android:resource="@xml/provider_paths"/>
|
android:resource="@xml/provider_paths" />
|
||||||
</provider>
|
</provider>
|
||||||
|
|
||||||
|
<activity
|
||||||
|
android:name=".gest.picking_libero.PickingLiberoActivity"
|
||||||
|
android:label="@string/free_picking"
|
||||||
|
android:screenOrientation="portrait"
|
||||||
|
android:theme="@style/Light"
|
||||||
|
android:windowSoftInputMode="adjustNothing" ></activity>
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
</manifest>
|
</manifest>
|
||||||
@ -13,7 +13,6 @@ import androidx.appcompat.app.AppCompatActivity;
|
|||||||
import androidx.appcompat.widget.SearchView;
|
import androidx.appcompat.widget.SearchView;
|
||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
|
|
||||||
import android.os.StrictMode;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
@ -24,13 +23,11 @@ import android.widget.TextView;
|
|||||||
|
|
||||||
import it.integry.integrywmsnative.core.REST.watcher.ServerStatusChecker;
|
import it.integry.integrywmsnative.core.REST.watcher.ServerStatusChecker;
|
||||||
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
|
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
|
||||||
import it.integry.integrywmsnative.core.exception.ExceptionsHandler;
|
|
||||||
import it.integry.integrywmsnative.core.interfaces.IFilterableFragment;
|
import it.integry.integrywmsnative.core.interfaces.IFilterableFragment;
|
||||||
import it.integry.integrywmsnative.core.interfaces.IRecyclerFragment;
|
import it.integry.integrywmsnative.core.interfaces.IRecyclerFragment;
|
||||||
import it.integry.integrywmsnative.core.interfaces.ISelectAllFragment;
|
import it.integry.integrywmsnative.core.interfaces.ISelectAllFragment;
|
||||||
import it.integry.integrywmsnative.core.settings.SettingsManager;
|
import it.integry.integrywmsnative.core.settings.SettingsManager;
|
||||||
import it.integry.integrywmsnative.core.update.UpdatesManager;
|
import it.integry.integrywmsnative.core.update.UpdatesManager;
|
||||||
import it.integry.integrywmsnative.core.utility.PermissionsHelper;
|
|
||||||
import it.integry.integrywmsnative.core.utility.UtilitySettings;
|
import it.integry.integrywmsnative.core.utility.UtilitySettings;
|
||||||
import it.integry.integrywmsnative.databinding.ActivityMainBinding;
|
import it.integry.integrywmsnative.databinding.ActivityMainBinding;
|
||||||
import it.integry.integrywmsnative.gest.accettazione.MainAccettazioneFragment;
|
import it.integry.integrywmsnative.gest.accettazione.MainAccettazioneFragment;
|
||||||
@ -41,7 +38,6 @@ import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeFrag
|
|||||||
import it.integry.integrywmsnative.gest.settings.MainSettingsFragment;
|
import it.integry.integrywmsnative.gest.settings.MainSettingsFragment;
|
||||||
import it.integry.integrywmsnative.gest.vendita.MainVenditaFragment;
|
import it.integry.integrywmsnative.gest.vendita.MainVenditaFragment;
|
||||||
import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceFragment;
|
import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceFragment;
|
||||||
import it.integry.integrywmsnative.view.dialogs.exception.DialogException;
|
|
||||||
|
|
||||||
public class MainActivity extends AppCompatActivity
|
public class MainActivity extends AppCompatActivity
|
||||||
implements NavigationView.OnNavigationItemSelectedListener {
|
implements NavigationView.OnNavigationItemSelectedListener {
|
||||||
|
|||||||
@ -7,10 +7,15 @@ import android.os.Bundle;
|
|||||||
import android.text.SpannableString;
|
import android.text.SpannableString;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import it.integry.integrywmsnative.core.REST.watcher.ServerStatusChecker;
|
import it.integry.integrywmsnative.core.REST.watcher.ServerStatusChecker;
|
||||||
|
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
|
||||||
|
import it.integry.integrywmsnative.core.expansion.RunnableArgsss;
|
||||||
import it.integry.integrywmsnative.core.settings.SettingsManager;
|
import it.integry.integrywmsnative.core.settings.SettingsManager;
|
||||||
import it.integry.integrywmsnative.core.utility.PermissionsHelper;
|
import it.integry.integrywmsnative.core.utility.PermissionsHelper;
|
||||||
import it.integry.integrywmsnative.gest.login.LoginActivity;
|
import it.integry.integrywmsnative.gest.login.LoginActivity;
|
||||||
@ -21,6 +26,8 @@ public class SplashActivity extends AppCompatActivity {
|
|||||||
@BindView(R.id.app_version_textview)
|
@BindView(R.id.app_version_textview)
|
||||||
TextView appVersionTextView;
|
TextView appVersionTextView;
|
||||||
|
|
||||||
|
private RunnableArgsss<Integer, String[], List<Integer>> onRequestPermissionResult;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
@ -30,8 +37,14 @@ public class SplashActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
initAppVersion();
|
initAppVersion();
|
||||||
|
|
||||||
|
initPermissions(this::init);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initPermissions(Runnable onComplete) {
|
||||||
PermissionsHelper.askPermissions(this, () -> {
|
PermissionsHelper.askPermissions(this, () -> {
|
||||||
init();
|
onComplete.run();
|
||||||
}, permanentlyDenied -> {
|
}, permanentlyDenied -> {
|
||||||
if(permanentlyDenied) {
|
if(permanentlyDenied) {
|
||||||
DialogSimpleMessageHelper.makeErrorDialog(this,
|
DialogSimpleMessageHelper.makeErrorDialog(this,
|
||||||
@ -39,14 +52,9 @@ public class SplashActivity extends AppCompatActivity {
|
|||||||
this.finish();
|
this.finish();
|
||||||
}).show();
|
}).show();
|
||||||
} else {
|
} else {
|
||||||
DialogSimpleMessageHelper.makeErrorDialog(this,
|
initPermissions(onComplete);
|
||||||
new SpannableString(getText(R.string.permissions_denied)), null, () -> {
|
|
||||||
this.finish();
|
|
||||||
}).show();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -72,7 +80,7 @@ public class SplashActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
SettingsManager.reloadDBVariables(onComplete, ex -> {
|
SettingsManager.reloadDBVariables(onComplete, ex -> {
|
||||||
DialogSimpleMessageHelper.makeErrorDialog(this,
|
DialogSimpleMessageHelper.makeErrorDialog(this,
|
||||||
new SpannableString(ex.getMessage()), null, null).show();
|
new SpannableString(ex.getMessage()), null, this::finish).show();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -80,6 +88,25 @@ public class SplashActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void setOnRequestPermissionsResult(RunnableArgsss<Integer, String[], List<Integer>> onRequestPermissionResult) {
|
||||||
|
this.onRequestPermissionResult = onRequestPermissionResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
|
||||||
|
if(this.onRequestPermissionResult != null) {
|
||||||
|
List<Integer> grantResultsList = new ArrayList<>();
|
||||||
|
for(int i = 0; i < grantResults.length; i++) {
|
||||||
|
grantResultsList.add(grantResults[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.onRequestPermissionResult.run(requestCode, permissions, grantResultsList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private void startLoginActivity(){
|
private void startLoginActivity(){
|
||||||
|
|||||||
@ -11,6 +11,7 @@ import android.util.Log;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.CheckBox;
|
import android.widget.CheckBox;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
import android.widget.RadioButton;
|
import android.widget.RadioButton;
|
||||||
import android.widget.RadioGroup;
|
import android.widget.RadioGroup;
|
||||||
|
|
||||||
@ -18,6 +19,7 @@ import java.text.DecimalFormat;
|
|||||||
import java.text.DecimalFormatSymbols;
|
import java.text.DecimalFormatSymbols;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import androidx.databinding.Observable;
|
||||||
import it.integry.integrywmsnative.R;
|
import it.integry.integrywmsnative.R;
|
||||||
|
|
||||||
public class Converters {
|
public class Converters {
|
||||||
@ -175,4 +177,24 @@ public class Converters {
|
|||||||
public static void bindFloatPercetageOnGuideline(View view, final float percentage) {
|
public static void bindFloatPercetageOnGuideline(View view, final float percentage) {
|
||||||
((Guideline)view).setGuidelinePercent(percentage);
|
((Guideline)view).setGuidelinePercent(percentage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@BindingAdapter("app:visibility")
|
||||||
|
public static void bindCheckbox(LinearLayout view, final BindableBoolean bindableBoolean) {
|
||||||
|
if (view.getTag(R.id.bound_observable) != bindableBoolean) {
|
||||||
|
view.setTag(R.id.bound_observable, bindableBoolean);
|
||||||
|
//view.setOnCheckedChangeListener((compoundButton, b) -> bindableBoolean.set(b));
|
||||||
|
}
|
||||||
|
bindableBoolean.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
|
||||||
|
@Override
|
||||||
|
public void onPropertyChanged(Observable sender, int propertyId) {
|
||||||
|
view.setVisibility(bindableBoolean.get() ? View.VISIBLE : View.GONE);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
view.setVisibility(bindableBoolean.get() ? View.VISIBLE : View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
package it.integry.integrywmsnative.core.expansion;
|
||||||
|
|
||||||
|
public interface RunnableArgsss<S, T, V> {
|
||||||
|
|
||||||
|
void run(S data1, T data2, V data3);
|
||||||
|
}
|
||||||
|
|
||||||
@ -1,27 +1,30 @@
|
|||||||
package it.integry.integrywmsnative.core.utility;
|
package it.integry.integrywmsnative.core.utility;
|
||||||
|
|
||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.emreeran.permissionlivedata.PermissionLiveData;
|
import com.annimon.stream.Stream;
|
||||||
import com.emreeran.permissionlivedata.Status;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
|
||||||
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
import androidx.core.app.ActivityCompat;
|
||||||
|
import it.integry.integrywmsnative.SplashActivity;
|
||||||
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
||||||
|
|
||||||
public class PermissionsHelper {
|
public class PermissionsHelper {
|
||||||
|
|
||||||
public static void askPermissions(AppCompatActivity activity, Runnable onPermissionsConfirmed, RunnableArgs<Boolean> onPermissionsDenied) {
|
public static void askPermissions(SplashActivity activity, Runnable onPermissionsConfirmed, RunnableArgs<Boolean> onPermissionsDenied) {
|
||||||
|
|
||||||
List<String> permissionsToAsk = new ArrayList<>();
|
List<String> permissionsToAsk = new ArrayList<>();
|
||||||
permissionsToAsk.add(Manifest.permission.READ_EXTERNAL_STORAGE);
|
permissionsToAsk.add(Manifest.permission.READ_EXTERNAL_STORAGE);
|
||||||
permissionsToAsk.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
permissionsToAsk.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
||||||
permissionsToAsk.add(Manifest.permission.INTERNET);
|
//permissionsToAsk.add(Manifest.permission.INTERNET);
|
||||||
permissionsToAsk.add(Manifest.permission.ACCESS_WIFI_STATE);
|
//permissionsToAsk.add(Manifest.permission.ACCESS_WIFI_STATE);
|
||||||
|
|
||||||
|
|
||||||
if(Build.VERSION.SDK_INT >= 23) {
|
if(Build.VERSION.SDK_INT >= 23) {
|
||||||
@ -31,50 +34,50 @@ public class PermissionsHelper {
|
|||||||
String[] permissionArray = new String[permissionsToAsk.size()];
|
String[] permissionArray = new String[permissionsToAsk.size()];
|
||||||
permissionsToAsk.toArray(permissionArray);
|
permissionsToAsk.toArray(permissionArray);
|
||||||
|
|
||||||
PermissionLiveData permissionLiveData = PermissionLiveData.create(
|
|
||||||
activity, permissionArray);
|
|
||||||
|
|
||||||
AtomicInteger permissionStatusCounter = new AtomicInteger();
|
|
||||||
AtomicInteger permissionGrantedCounter = new AtomicInteger();
|
|
||||||
AtomicInteger permissionPendingCounter = new AtomicInteger();
|
|
||||||
AtomicInteger permissionDeniedCounter = new AtomicInteger();
|
|
||||||
AtomicInteger permissionPermDeniedCounter = new AtomicInteger();
|
|
||||||
|
|
||||||
Runnable checkPermissionIfDone = () -> {
|
|
||||||
if(permissionStatusCounter.get() == permissionArray.length){
|
|
||||||
|
|
||||||
if(permissionGrantedCounter.get() == permissionStatusCounter.get()) {
|
activity.setOnRequestPermissionsResult((requestCode, permissions, grantResults) -> {
|
||||||
|
switch (requestCode) {
|
||||||
|
case 1: {
|
||||||
|
|
||||||
|
boolean allGranted = Stream.of(grantResults).allMatch(x -> x == PackageManager.PERMISSION_GRANTED);
|
||||||
|
|
||||||
|
// If request is cancelled, the result arrays are empty.
|
||||||
|
if (grantResults.size() > 0 && allGranted) {
|
||||||
|
|
||||||
onPermissionsConfirmed.run();
|
onPermissionsConfirmed.run();
|
||||||
} else if(permissionPendingCounter.get() > 0) {
|
|
||||||
onPermissionsDenied.run(false);
|
|
||||||
} else if(permissionPermDeniedCounter.get() > 0) {
|
|
||||||
onPermissionsDenied.run(true);
|
|
||||||
} else {
|
} else {
|
||||||
onPermissionsDenied.run(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
permissionLiveData.observe(activity, permission -> {
|
boolean anyPermDeny = shouldShowRequestPermissionRationale( activity, permissions );
|
||||||
|
|
||||||
|
onPermissionsDenied.run(anyPermDeny);
|
||||||
|
|
||||||
permissionStatusCounter.getAndIncrement();
|
|
||||||
|
|
||||||
if (permission.getStatus() == Status.RECEIVED) {
|
|
||||||
if (permission.getGranted()) {
|
|
||||||
permissionGrantedCounter.getAndIncrement();
|
|
||||||
checkPermissionIfDone.run();
|
|
||||||
} else if (permission.getShouldShowRequestPermissionRationale()) {
|
|
||||||
permissionPermDeniedCounter.getAndIncrement();
|
|
||||||
checkPermissionIfDone.run();
|
|
||||||
} else {
|
|
||||||
permissionDeniedCounter.getAndIncrement();
|
|
||||||
checkPermissionIfDone.run();
|
|
||||||
}
|
}
|
||||||
} else if (permission.getStatus() == Status.PENDING) {
|
return;
|
||||||
permissionPendingCounter.getAndIncrement();
|
}
|
||||||
checkPermissionIfDone.run();
|
|
||||||
|
// other 'case' lines to check for other
|
||||||
|
// permissions this app might request
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ActivityCompat.requestPermissions(activity, permissionArray,1);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean shouldShowRequestPermissionRationale(AppCompatActivity activity, String[] permissions) {
|
||||||
|
boolean anyDeny = false;
|
||||||
|
|
||||||
|
for(int i = 0; i < permissions.length && !anyDeny; i++) {
|
||||||
|
if(!ActivityCompat.shouldShowRequestPermissionRationale(activity, permissions[i])) anyDeny = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return anyDeny;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,40 @@
|
|||||||
|
package it.integry.integrywmsnative.gest.picking_libero;
|
||||||
|
|
||||||
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
import androidx.databinding.DataBindingUtil;
|
||||||
|
import it.integry.integrywmsnative.R;
|
||||||
|
import it.integry.integrywmsnative.databinding.ActivityPickingLiberoBinding;
|
||||||
|
import it.integry.integrywmsnative.gest.picking_libero.core.PickingLiberoHelper;
|
||||||
|
import it.integry.integrywmsnative.gest.picking_libero.viewmodel.PickingLiberoViewModel;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
|
||||||
|
public class PickingLiberoActivity extends AppCompatActivity {
|
||||||
|
|
||||||
|
private ActivityPickingLiberoBinding mBindings;
|
||||||
|
|
||||||
|
private PickingLiberoHelper mHelper;
|
||||||
|
private PickingLiberoViewModel mViewModel;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
mBindings = DataBindingUtil.setContentView(this, R.layout.activity_picking_libero);
|
||||||
|
|
||||||
|
mHelper = new PickingLiberoHelper(this);
|
||||||
|
|
||||||
|
mViewModel = new PickingLiberoViewModel();
|
||||||
|
mViewModel.init(this, mBindings, mHelper);
|
||||||
|
|
||||||
|
mBindings.setViewmodel(mViewModel);
|
||||||
|
|
||||||
|
setSupportActionBar(this.mBindings.toolbar);
|
||||||
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onSupportNavigateUp() {
|
||||||
|
onBackPressed();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
package it.integry.integrywmsnative.gest.picking_libero.core;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
public class PickingLiberoHelper {
|
||||||
|
|
||||||
|
private final Context mContext;
|
||||||
|
|
||||||
|
public PickingLiberoHelper(Context context) {
|
||||||
|
mContext = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,175 @@
|
|||||||
|
package it.integry.integrywmsnative.gest.picking_libero.viewmodel;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.app.ProgressDialog;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import androidx.databinding.Observable;
|
||||||
|
import androidx.databinding.ObservableArrayList;
|
||||||
|
import androidx.databinding.ObservableField;
|
||||||
|
import it.integry.integrywmsnative.R;
|
||||||
|
import it.integry.integrywmsnative.core.REST.consumers.ColliMagazzinoRESTConsumer;
|
||||||
|
import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback;
|
||||||
|
import it.integry.integrywmsnative.core.di.BindableBoolean;
|
||||||
|
import it.integry.integrywmsnative.core.model.CommonModelConsts;
|
||||||
|
import it.integry.integrywmsnative.core.model.MtbColt;
|
||||||
|
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
|
||||||
|
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
|
||||||
|
import it.integry.integrywmsnative.core.utility.UtilityProgress;
|
||||||
|
import it.integry.integrywmsnative.core.utility.UtilityString;
|
||||||
|
import it.integry.integrywmsnative.databinding.ActivityPickingLiberoBinding;
|
||||||
|
import it.integry.integrywmsnative.gest.picking_libero.core.PickingLiberoHelper;
|
||||||
|
import it.integry.integrywmsnative.ui.StatusBarAlert;
|
||||||
|
|
||||||
|
public class PickingLiberoViewModel {
|
||||||
|
|
||||||
|
public ObservableField<MtbColt> mtbColt = new ObservableField<>();
|
||||||
|
|
||||||
|
public BindableBoolean thereIsAnOpenedUL = new BindableBoolean();
|
||||||
|
public BindableBoolean thereIsntAnOpenedUL = new BindableBoolean();
|
||||||
|
public BindableBoolean thereIsAnyRowInUL = new BindableBoolean();
|
||||||
|
public BindableBoolean thereIsAnOpenULWithoutRows = new BindableBoolean();
|
||||||
|
|
||||||
|
private Activity mContext;
|
||||||
|
private ActivityPickingLiberoBinding mBinding;
|
||||||
|
private PickingLiberoHelper mHelper;
|
||||||
|
|
||||||
|
public void init(Activity context, ActivityPickingLiberoBinding binding, PickingLiberoHelper helper) {
|
||||||
|
mContext = context;
|
||||||
|
mBinding = binding;
|
||||||
|
mHelper = helper;
|
||||||
|
|
||||||
|
initObservable();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void initObservable() {
|
||||||
|
refreshBindables();
|
||||||
|
|
||||||
|
mtbColt.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
|
||||||
|
@Override
|
||||||
|
public void onPropertyChanged(Observable sender, int propertyId) {
|
||||||
|
refreshBindables();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void refreshBindables() {
|
||||||
|
thereIsAnOpenedUL.set(mtbColt.get() != null);
|
||||||
|
thereIsntAnOpenedUL.set(!thereIsAnOpenedUL.get());
|
||||||
|
|
||||||
|
thereIsAnyRowInUL.set(mtbColt.get() != null &&
|
||||||
|
mtbColt.get().getMtbColr() != null &&
|
||||||
|
mtbColt.get().getMtbColr().size() > 0);
|
||||||
|
|
||||||
|
|
||||||
|
thereIsAnOpenULWithoutRows.set(mtbColt.get() != null &&
|
||||||
|
(mtbColt.get().getMtbColr() == null || mtbColt.get().getMtbColr().size() == 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void createNewLU() {
|
||||||
|
createNewLU(null, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createNewLU(Integer customNumCollo, String customSerCollo, Runnable onComplete) {
|
||||||
|
|
||||||
|
ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);
|
||||||
|
|
||||||
|
MtbColt mtbColt = new MtbColt();
|
||||||
|
mtbColt .setGestione(GestioneEnum.VENDITA)
|
||||||
|
.setSegno(-1)
|
||||||
|
//.setCodAnag(defaultCodAnagOfUL)
|
||||||
|
.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
|
||||||
|
|
||||||
|
if(customNumCollo != null) {
|
||||||
|
mtbColt.setNumCollo(customNumCollo);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!UtilityString.isNullOrEmpty(customSerCollo)) {
|
||||||
|
mtbColt.setSerCollo(customSerCollo);
|
||||||
|
}
|
||||||
|
|
||||||
|
ColliMagazzinoRESTConsumer.saveCollo(mtbColt, savedMtbColt -> {
|
||||||
|
savedMtbColt.setMtbColr(new ObservableArrayList<>());
|
||||||
|
setULToCurrentContext(savedMtbColt);
|
||||||
|
|
||||||
|
progressDialog.dismiss();
|
||||||
|
|
||||||
|
new StatusBarAlert.Builder(mContext)
|
||||||
|
.autoHide(true)
|
||||||
|
.withDuration(2500)
|
||||||
|
.showProgress(false)
|
||||||
|
.withText(R.string.data_saved)
|
||||||
|
.withAlertColor(R.color.mainGreen)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
if(onComplete != null) onComplete.run();
|
||||||
|
|
||||||
|
}, ex -> UtilityExceptions.defaultException(mContext, ex, progressDialog));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void setULToCurrentContext(MtbColt mtbColt){
|
||||||
|
this.mtbColt.set(mtbColt);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void closeLU() {
|
||||||
|
if(thereIsAnOpenedUL.get()) {
|
||||||
|
final ProgressDialog progress = UtilityProgress.createDefaultProgressDialog(mContext);
|
||||||
|
|
||||||
|
if(thereIsAnyRowInUL.get()) {
|
||||||
|
updateDataFine(progress, null); //() -> distribuisciCollo(progress, () -> printCollo(progress)));
|
||||||
|
} else {
|
||||||
|
deleteCollo(progress);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateDataFine(ProgressDialog progress, Runnable onComplete) {
|
||||||
|
|
||||||
|
MtbColt cloneMtbColt = (MtbColt) this.mtbColt.get().clone();
|
||||||
|
cloneMtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP);
|
||||||
|
cloneMtbColt.setOraFinePrep(new Date());
|
||||||
|
|
||||||
|
|
||||||
|
ColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, new ISimpleOperationCallback<MtbColt>() {
|
||||||
|
@Override
|
||||||
|
public void onSuccess(MtbColt value) {
|
||||||
|
if(onComplete != null) onComplete.run();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailed(Exception ex) {
|
||||||
|
UtilityExceptions.defaultException(mContext, ex, progress);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void deleteCollo(ProgressDialog progress) {
|
||||||
|
|
||||||
|
ColliMagazzinoRESTConsumer.deleteCollo(this.mtbColt.get(), () -> {
|
||||||
|
this.mtbColt.set(null);
|
||||||
|
|
||||||
|
progress.dismiss();
|
||||||
|
}, ex -> UtilityExceptions.defaultException(mContext, ex, progress)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*public boolean thereIsAnOpenedUL() {
|
||||||
|
return this.mtbColt.get() != null;
|
||||||
|
}
|
||||||
|
public boolean thereIsAnyRowInUL() {
|
||||||
|
return this.mtbColt.get() != null &&
|
||||||
|
this.mtbColt.get().getMtbColr() != null &&
|
||||||
|
this.mtbColt.get().getMtbColr().size() > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean thereIsAnULWithoutRows() {
|
||||||
|
return thereIsAnOpenedUL() && !thereIsAnyRowInUL();
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
@ -10,6 +10,9 @@ import androidx.recyclerview.widget.LinearLayoutManager;
|
|||||||
import android.text.Html;
|
import android.text.Html;
|
||||||
import android.text.SpannableString;
|
import android.text.SpannableString;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuInflater;
|
||||||
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
@ -34,6 +37,7 @@ import it.integry.integrywmsnative.core.utility.UtilityExceptions;
|
|||||||
import it.integry.integrywmsnative.core.utility.UtilityToast;
|
import it.integry.integrywmsnative.core.utility.UtilityToast;
|
||||||
import it.integry.integrywmsnative.databinding.FragmentMainVenditaBinding;
|
import it.integry.integrywmsnative.databinding.FragmentMainVenditaBinding;
|
||||||
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
|
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
|
||||||
|
import it.integry.integrywmsnative.gest.picking_libero.PickingLiberoActivity;
|
||||||
import it.integry.integrywmsnative.gest.vendita.core.MainListVenditaAdapter;
|
import it.integry.integrywmsnative.gest.vendita.core.MainListVenditaAdapter;
|
||||||
import it.integry.integrywmsnative.gest.vendita.core.VenditaHelper;
|
import it.integry.integrywmsnative.gest.vendita.core.VenditaHelper;
|
||||||
import it.integry.integrywmsnative.gest.vendita.dialogs.DialogVenditaFiltroAvanzato;
|
import it.integry.integrywmsnative.gest.vendita.dialogs.DialogVenditaFiltroAvanzato;
|
||||||
@ -87,6 +91,8 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IR
|
|||||||
if (getArguments() != null) {
|
if (getArguments() != null) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setHasOptionsMenu(true);
|
||||||
|
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -114,6 +120,25 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IR
|
|||||||
return mBinding.getRoot();
|
return mBinding.getRoot();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||||
|
inflater.inflate(R.menu.fragment_vendita, menu);
|
||||||
|
super.onCreateOptionsMenu(menu, inflater);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
|
||||||
|
if(item.getItemId() == R.id.action_free_picking) {
|
||||||
|
Intent myIntent = new Intent(getActivity(), PickingLiberoActivity.class);
|
||||||
|
startActivity(myIntent);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private void init(){
|
private void init(){
|
||||||
|
|
||||||
final ProgressDialog progress = ProgressDialog.show(getActivity(), getText(R.string.waiting),
|
final ProgressDialog progress = ProgressDialog.show(getActivity(), getText(R.string.waiting),
|
||||||
|
|||||||
@ -260,7 +260,6 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
|
|||||||
public RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
|
public RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
|
||||||
|
|
||||||
ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(mActivity);
|
ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(mActivity);
|
||||||
progressDialog.show();
|
|
||||||
|
|
||||||
BarcodeManager.disable();
|
BarcodeManager.disable();
|
||||||
|
|
||||||
@ -431,7 +430,6 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
|
|||||||
|
|
||||||
final List<PickingObjectDTO> pickingList = mPickingList;
|
final List<PickingObjectDTO> pickingList = mPickingList;
|
||||||
|
|
||||||
|
|
||||||
List<PickingObjectDTO> matchPickingObject = Stream.of(pickingList)
|
List<PickingObjectDTO> matchPickingObject = Stream.of(pickingList)
|
||||||
.filter(x -> Objects.equals(x.getNumCollo(), scannedUL.getNumCollo()) &&
|
.filter(x -> Objects.equals(x.getNumCollo(), scannedUL.getNumCollo()) &&
|
||||||
x.getDataColloS().equals(scannedUL.getDataColloS()) &&
|
x.getDataColloS().equals(scannedUL.getDataColloS()) &&
|
||||||
|
|||||||
9
app/src/main/res/drawable/ic_check_white_24dp.xml
Normal file
9
app/src/main/res/drawable/ic_check_white_24dp.xml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24.0"
|
||||||
|
android:viewportHeight="24.0">
|
||||||
|
<path
|
||||||
|
android:fillColor="#FFFFFFFF"
|
||||||
|
android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/>
|
||||||
|
</vector>
|
||||||
148
app/src/main/res/layout/activity_picking_libero.xml
Normal file
148
app/src/main/res/layout/activity_picking_libero.xml
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<layout xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:fab="http://schemas.android.com/apk/res-auto">
|
||||||
|
<data>
|
||||||
|
|
||||||
|
<import type="android.view.View"/>
|
||||||
|
|
||||||
|
<variable
|
||||||
|
name="viewmodel"
|
||||||
|
type="it.integry.integrywmsnative.gest.picking_libero.viewmodel.PickingLiberoViewModel" />
|
||||||
|
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<androidx.coordinatorlayout.widget.CoordinatorLayout android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:background="@color/full_white">
|
||||||
|
|
||||||
|
<it.integry.plugins.waterfalltoolbar.WaterfallToolbar
|
||||||
|
android:id="@+id/waterfall_toolbar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.Toolbar
|
||||||
|
android:id="@+id/toolbar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="?actionBarSize"
|
||||||
|
tools:title="Picking Libero"
|
||||||
|
app:popupTheme="@style/AppTheme.PopupOverlay"/>
|
||||||
|
|
||||||
|
</it.integry.plugins.waterfalltoolbar.WaterfallToolbar>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.Guideline
|
||||||
|
android:id="@+id/free_picking__suggestion_1__guideline_top"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
app:layout_constraintGuide_percent="0.35"/>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.Guideline
|
||||||
|
android:id="@+id/free_picking__suggestion_1__guideline_left"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:orientation="vertical"
|
||||||
|
app:layout_constraintGuide_percent="0.2" />
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.Guideline
|
||||||
|
android:id="@+id/free_picking__suggestion_1__guideline_right"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:orientation="vertical"
|
||||||
|
app:layout_constraintGuide_percent="0.8" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:alpha="0.4"
|
||||||
|
app:visibility="@{viewmodel.thereIsntAnOpenedUL}"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/free_picking__suggestion_1__guideline_top"
|
||||||
|
app:layout_constraintLeft_toRightOf="@id/free_picking__suggestion_1__guideline_left"
|
||||||
|
app:layout_constraintRight_toLeftOf="@id/free_picking__suggestion_1__guideline_right">
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textColor="@android:color/black"
|
||||||
|
android:textSize="18sp"
|
||||||
|
android:gravity="center_horizontal"
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:text="@string/free_picking_suggestion_1"/>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:alpha="0.4"
|
||||||
|
app:visibility="@{viewmodel.thereIsAnOpenULWithoutRows}"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/free_picking__suggestion_1__guideline_top"
|
||||||
|
app:layout_constraintLeft_toRightOf="@id/free_picking__suggestion_1__guideline_left"
|
||||||
|
app:layout_constraintRight_toLeftOf="@id/free_picking__suggestion_1__guideline_right">
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textColor="@android:color/black"
|
||||||
|
android:textSize="18sp"
|
||||||
|
android:gravity="center_horizontal"
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:text="@string/free_picking_suggestion_2"/>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<com.github.clans.fab.FloatingActionButton
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="bottom|right"
|
||||||
|
android:layout_marginBottom="8dp"
|
||||||
|
android:layout_marginRight="8dp"
|
||||||
|
android:src="@drawable/fab_add"
|
||||||
|
android:onClick="@{() -> viewmodel.createNewLU()}"
|
||||||
|
android:visibility="@{viewmodel.mtbColt.get() == null ? View.VISIBLE : View.GONE}"
|
||||||
|
fab:fab_colorNormal="@color/colorPrimary"
|
||||||
|
fab:fab_colorPressed="@color/white_pressed"
|
||||||
|
fab:fab_colorRipple="#66FFFFFF"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<com.github.clans.fab.FloatingActionButton
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="bottom|right"
|
||||||
|
android:layout_marginBottom="8dp"
|
||||||
|
android:layout_marginRight="8dp"
|
||||||
|
android:src="@drawable/ic_check_white_24dp"
|
||||||
|
android:onClick="@{() -> viewmodel.closeLU()}"
|
||||||
|
android:visibility="@{viewmodel.mtbColt.get() != null ? View.VISIBLE : View.GONE}"
|
||||||
|
fab:fab_colorNormal="@color/mainGreen"
|
||||||
|
fab:fab_colorPressed="@color/white_pressed"
|
||||||
|
fab:fab_colorRipple="#66FFFFFF"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||||
|
|
||||||
|
</layout>
|
||||||
9
app/src/main/res/menu/fragment_vendita.xml
Normal file
9
app/src/main/res/menu/fragment_vendita.xml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_free_picking"
|
||||||
|
android:orderInCategory="100"
|
||||||
|
android:title="@string/free_picking"
|
||||||
|
app:showAsAction="never" />
|
||||||
|
</menu>
|
||||||
@ -166,5 +166,8 @@
|
|||||||
<string name="permissions_permanently_denied"><![CDATA[Sono stati negati tutti i permessi necessari al funzionamento dell\'applicazione. L\'applicazione verrà adesso chiusa.]]></string>
|
<string name="permissions_permanently_denied"><![CDATA[Sono stati negati tutti i permessi necessari al funzionamento dell\'applicazione. L\'applicazione verrà adesso chiusa.]]></string>
|
||||||
<string name="permissions_denied">Tutti i permessi sono stati declinati, riapri l\'applicazione per continuare.</string>
|
<string name="permissions_denied">Tutti i permessi sono stati declinati, riapri l\'applicazione per continuare.</string>
|
||||||
<string name="notification_update_download">Download aggiornamento</string>
|
<string name="notification_update_download">Download aggiornamento</string>
|
||||||
|
<string name="free_picking">Picking libero</string>
|
||||||
|
<string name="free_picking_suggestion_1">Per iniziare clicca sul + in basso a destra</string>
|
||||||
|
<string name="free_picking_suggestion_2">Scansiona un articolo per iniziare</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
@ -174,5 +174,8 @@
|
|||||||
<string name="permissions_permanently_denied">Please note that all permissions are required. Application will close now.</string>
|
<string name="permissions_permanently_denied">Please note that all permissions are required. Application will close now.</string>
|
||||||
<string name="permissions_denied">All permissions are required, please reopen the app.</string>
|
<string name="permissions_denied">All permissions are required, please reopen the app.</string>
|
||||||
<string name="notification_update_download">Downloading update</string>
|
<string name="notification_update_download">Downloading update</string>
|
||||||
|
<string name="free_picking">Free Picking</string>
|
||||||
|
<string name="free_picking_suggestion_1">Please press + button to start with picking</string>
|
||||||
|
<string name="free_picking_suggestion_2">Scan an item to start</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user