Completata implementazione dei permessi.

Implementata visibility tramite BindableBoolean.
This commit is contained in:
Gius95
2019-01-07 11:04:33 +01:00
parent 92bdb1fa14
commit 8908ada740
18 changed files with 546 additions and 63 deletions

View File

@@ -13,7 +13,6 @@ import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.SearchView;
import androidx.appcompat.widget.Toolbar;
import android.os.StrictMode;
import android.view.LayoutInflater;
import android.view.Menu;
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.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.exception.ExceptionsHandler;
import it.integry.integrywmsnative.core.interfaces.IFilterableFragment;
import it.integry.integrywmsnative.core.interfaces.IRecyclerFragment;
import it.integry.integrywmsnative.core.interfaces.ISelectAllFragment;
import it.integry.integrywmsnative.core.settings.SettingsManager;
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.databinding.ActivityMainBinding;
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.vendita.MainVenditaFragment;
import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceFragment;
import it.integry.integrywmsnative.view.dialogs.exception.DialogException;
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {

View File

@@ -7,10 +7,15 @@ import android.os.Bundle;
import android.text.SpannableString;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import androidx.appcompat.app.AppCompatActivity;
import butterknife.BindView;
import butterknife.ButterKnife;
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.utility.PermissionsHelper;
import it.integry.integrywmsnative.gest.login.LoginActivity;
@@ -21,6 +26,8 @@ public class SplashActivity extends AppCompatActivity {
@BindView(R.id.app_version_textview)
TextView appVersionTextView;
private RunnableArgsss<Integer, String[], List<Integer>> onRequestPermissionResult;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -30,8 +37,14 @@ public class SplashActivity extends AppCompatActivity {
initAppVersion();
initPermissions(this::init);
}
private void initPermissions(Runnable onComplete) {
PermissionsHelper.askPermissions(this, () -> {
init();
onComplete.run();
}, permanentlyDenied -> {
if(permanentlyDenied) {
DialogSimpleMessageHelper.makeErrorDialog(this,
@@ -39,14 +52,9 @@ public class SplashActivity extends AppCompatActivity {
this.finish();
}).show();
} else {
DialogSimpleMessageHelper.makeErrorDialog(this,
new SpannableString(getText(R.string.permissions_denied)), null, () -> {
this.finish();
}).show();
initPermissions(onComplete);
}
});
}
@@ -72,7 +80,7 @@ public class SplashActivity extends AppCompatActivity {
SettingsManager.reloadDBVariables(onComplete, ex -> {
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(){

View File

@@ -11,6 +11,7 @@ import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
@@ -18,6 +19,7 @@ import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;
import androidx.databinding.Observable;
import it.integry.integrywmsnative.R;
public class Converters {
@@ -175,4 +177,24 @@ public class Converters {
public static void bindFloatPercetageOnGuideline(View view, final float 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);
}
}

View File

@@ -0,0 +1,7 @@
package it.integry.integrywmsnative.core.expansion;
public interface RunnableArgsss<S, T, V> {
void run(S data1, T data2, V data3);
}

View File

@@ -1,27 +1,30 @@
package it.integry.integrywmsnative.core.utility;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import android.widget.Toast;
import com.emreeran.permissionlivedata.PermissionLiveData;
import com.emreeran.permissionlivedata.Status;
import com.annimon.stream.Stream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import it.integry.integrywmsnative.SplashActivity;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
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<>();
permissionsToAsk.add(Manifest.permission.READ_EXTERNAL_STORAGE);
permissionsToAsk.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
permissionsToAsk.add(Manifest.permission.INTERNET);
permissionsToAsk.add(Manifest.permission.ACCESS_WIFI_STATE);
//permissionsToAsk.add(Manifest.permission.INTERNET);
//permissionsToAsk.add(Manifest.permission.ACCESS_WIFI_STATE);
if(Build.VERSION.SDK_INT >= 23) {
@@ -31,50 +34,50 @@ public class PermissionsHelper {
String[] permissionArray = new String[permissionsToAsk.size()];
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()) {
onPermissionsConfirmed.run();
} else if(permissionPendingCounter.get() > 0) {
onPermissionsDenied.run(false);
} else if(permissionPermDeniedCounter.get() > 0) {
onPermissionsDenied.run(true);
} else {
onPermissionsDenied.run(false);
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();
} else {
boolean anyPermDeny = shouldShowRequestPermissionRationale( activity, permissions );
onPermissionsDenied.run(anyPermDeny);
}
return;
}
}
};
permissionLiveData.observe(activity, permission -> {
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) {
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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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();
}
*/
}

View File

@@ -10,6 +10,9 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import android.text.Html;
import android.text.SpannableString;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
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.databinding.FragmentMainVenditaBinding;
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.VenditaHelper;
import it.integry.integrywmsnative.gest.vendita.dialogs.DialogVenditaFiltroAvanzato;
@@ -87,6 +91,8 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IR
if (getArguments() != null) {
}
setHasOptionsMenu(true);
init();
}
@@ -114,6 +120,25 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IR
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(){
final ProgressDialog progress = ProgressDialog.show(getActivity(), getText(R.string.waiting),

View File

@@ -260,7 +260,6 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
public RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(mActivity);
progressDialog.show();
BarcodeManager.disable();
@@ -431,7 +430,6 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
final List<PickingObjectDTO> pickingList = mPickingList;
List<PickingObjectDTO> matchPickingObject = Stream.of(pickingList)
.filter(x -> Objects.equals(x.getNumCollo(), scannedUL.getNumCollo()) &&
x.getDataColloS().equals(scannedUL.getDataColloS()) &&