Implementato switch deposito in home page

This commit is contained in:
Giuseppe Scorrano 2025-01-13 15:54:23 +01:00
parent b3641534c9
commit cb77c21656
15 changed files with 307 additions and 11 deletions

View File

@ -4,6 +4,20 @@
<option name="selectedTabId" value="Android Vitals" />
<option name="tabSettings">
<map>
<entry key="Android Vitals">
<value>
<InsightsFilterSettings>
<option name="connection">
<ConnectionSetting>
<option name="appId" value="it.integry.ordify.dulciar" />
</ConnectionSetting>
</option>
<option name="signal" value="SIGNAL_UNSPECIFIED" />
<option name="timeIntervalDays" value="SEVEN_DAYS" />
<option name="visibilityType" value="ALL" />
</InsightsFilterSettings>
</value>
</entry>
<entry key="Firebase Crashlytics">
<value>
<InsightsFilterSettings>

View File

@ -4,10 +4,10 @@
<selectionStates>
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
<DropdownSelection timestamp="2024-09-13T09:26:42.884931500Z">
<DropdownSelection timestamp="2025-01-09T09:29:04.931795900Z">
<Target type="DEFAULT_BOOT">
<handle>
<DeviceId pluginId="PhysicalDevice" identifier="serial=R52T60AZ93A" />
<DeviceId pluginId="PhysicalDevice" identifier="serial=21088B8EFD" />
</handle>
</Target>
</DropdownSelection>

View File

@ -144,6 +144,8 @@ import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArtComponent;
import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArtModule;
import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLUComponent;
import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLUModule;
import it.integry.integrywmsnative.view.dialogs.switch_user_depo.DialogSwitchUserDepoComponent;
import it.integry.integrywmsnative.view.dialogs.switch_user_depo.DialogSwitchUserDepoModule;
import it.integry.integrywmsnative.view.dialogs.tracciamento_imballi.DialogTracciamentoImballiComponent;
import it.integry.integrywmsnative.view.dialogs.tracciamento_imballi.DialogTracciamentoImballiModule;
@ -221,7 +223,8 @@ import it.integry.integrywmsnative.view.dialogs.tracciamento_imballi.DialogTracc
ArticoliInGiacenzaModule.class,
DialogTracciamentoImballiModule.class,
DialogAskVettoreModule.class,
DialogCreateNewArtModule.class
DialogCreateNewArtModule.class,
DialogSwitchUserDepoModule.class
})
public interface MainApplicationComponent {
@ -370,6 +373,8 @@ public interface MainApplicationComponent {
DialogCreateNewArtComponent.Factory dialogCreateNewArtComponent();
DialogSwitchUserDepoComponent.Factory dialogSwitchUserDepoComponent();
void inject(MainApplication mainApplication);
void inject(AppContext mainApplication);

View File

@ -88,6 +88,7 @@ public class ListaBancaliActivity extends BaseActivity implements ListaBancaliVi
.create()
.inject(this);
mViewModel.setListener(this);
mCanRecoverUl = DataCache.retrieveItem(getIntent().getStringExtra(Key.CanRecoverUL));
mReportName = DataCache.retrieveItem(getIntent().getStringExtra(Key.ReportName));

View File

@ -41,6 +41,7 @@ import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.rest.consumers.ColliLavorazioneRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliSpedizioneRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.AvailableCodMdepsDTO;
import it.integry.integrywmsnative.core.rest.model.uds.CloseUDSRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.CloseUDSResponseDTO;
import it.integry.integrywmsnative.core.rest.watcher.ServerStatusChecker;
@ -51,6 +52,7 @@ import it.integry.integrywmsnative.core.utility.UtilityResources;
import it.integry.integrywmsnative.databinding.FragmentMainBinding;
import it.integry.integrywmsnative.databinding.FragmentMainMenuGroupLayoutBinding;
import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.view.dialogs.switch_user_depo.DialogSwitchUserDepoView;
/**
* A simple {@link Fragment} subclass.
@ -153,6 +155,8 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
initSessionData();
initRecuperoCollo();
mBindings.switchDepoButton.setVisibility(SettingsManager.iDB().getAvailableCodMdep().size() > 1 ? View.VISIBLE : View.GONE);
}
private void initSessionData() {
@ -278,8 +282,8 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
private void initGestMenu() {
int menuSpanCount = 2;
if (UtilityDimension.getDisplayInchs(this.getActivity()) > 8) menuSpanCount = 4;
else if (UtilityDimension.getDisplayInchs(this.getActivity()) > 6.5) menuSpanCount = 3;
if (UtilityDimension.getDisplayInchs(this.requireActivity()) > 8) menuSpanCount = 4;
else if (UtilityDimension.getDisplayInchs(this.requireActivity()) > 6.5) menuSpanCount = 3;
MenuConfiguration baseMenuConfiguration = new MenuConfiguration();
List<MenuConfiguration.MenuGroup> menuGroups = baseMenuConfiguration.getGroups();
@ -319,7 +323,7 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
} catch (Exception exception) {
exception.printStackTrace();
UtilityExceptions.defaultException(requireActivity(), exception);
}
}
@ -421,4 +425,14 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
colorFadeTitleTextColor.setDuration(animationTimeMillis);
colorFadeTitleTextColor.start();
}
public void changeUserDepo() {
DialogSwitchUserDepoView.newInstance(SettingsManager.iDB().getAvailableCodMdep(), this::onUserDepoChanged)
.show(getParentFragmentManager(), "switch-user-depo");
}
private void onUserDepoChanged(AvailableCodMdepsDTO newDepo) {
SettingsManager.i().getUserSession().setDepo(newDepo);
initSessionData();
}
}

View File

@ -0,0 +1,14 @@
package it.integry.integrywmsnative.view.dialogs.switch_user_depo;
import dagger.Subcomponent;
@Subcomponent
public interface DialogSwitchUserDepoComponent {
@Subcomponent.Factory
interface Factory {
DialogSwitchUserDepoComponent create();
}
void inject(DialogSwitchUserDepoView dialogSwitchUserDepoView);
}

View File

@ -0,0 +1,14 @@
package it.integry.integrywmsnative.view.dialogs.switch_user_depo;
import dagger.Module;
import dagger.Provides;
@Module(subcomponents = DialogSwitchUserDepoComponent.class)
public class DialogSwitchUserDepoModule {
@Provides
DialogSwitchUserDepoViewModel providesDialogSwitchUserDepoViewModel() {
return new DialogSwitchUserDepoViewModel();
}
}

View File

@ -0,0 +1,93 @@
package it.integry.integrywmsnative.view.dialogs.switch_user_depo;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import java.util.List;
import javax.inject.Inject;
import it.integry.integrywmsnative.BR;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.di.binders.recyclerview.BindingRecyclerViewAdapter;
import it.integry.integrywmsnative.core.di.binders.recyclerview.ItemBinder;
import it.integry.integrywmsnative.core.di.binders.recyclerview.ItemBinderBase;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.rest.model.AvailableCodMdepsDTO;
import it.integry.integrywmsnative.databinding.DialogSwitchUserDepoBinding;
public class DialogSwitchUserDepoView extends BaseDialogFragment {
@Inject
DialogSwitchUserDepoViewModel mViewModel;
private DialogSwitchUserDepoBinding mBindings;
private Context mContext;
private final List<AvailableCodMdepsDTO> availableCodMdeps;
private final RunnableArgs<AvailableCodMdepsDTO> onComplete;
//Pass here all external parameters
public static DialogSwitchUserDepoView newInstance(List<AvailableCodMdepsDTO> availableCodMdeps, RunnableArgs<AvailableCodMdepsDTO> onComplete) {
return new DialogSwitchUserDepoView(availableCodMdeps, onComplete);
}
private DialogSwitchUserDepoView(List<AvailableCodMdepsDTO> availableCodMdeps, RunnableArgs<AvailableCodMdepsDTO> onComplete) {
super();
this.availableCodMdeps = availableCodMdeps;
this.onComplete = onComplete;
MainApplication.appComponent
.dialogSwitchUserDepoComponent()
.create()
.inject(this);
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
this.mContext = requireContext();
mBindings = DialogSwitchUserDepoBinding.inflate(LayoutInflater.from(this.mContext), null, false);
mBindings.setLifecycleOwner(this);
setCancelable(true);
var alertDialog = new MaterialAlertDialogBuilder(this.mContext)
.setView(mBindings.getRoot())
.setCancelable(isCancelable())
.create();
alertDialog.setCanceledOnTouchOutside(isCancelable());
alertDialog.setOnShowListener(this);
return alertDialog;
}
@Override
public void onInit(DialogInterface dialogInterface) {
super.onInit(dialogInterface);
ItemBinder<AvailableCodMdepsDTO> itemBinder = new ItemBinderBase<>(BR.item, R.layout.dialog_switch_user_depo__list_item);
BindingRecyclerViewAdapter<AvailableCodMdepsDTO> adapter = new BindingRecyclerViewAdapter<>(itemBinder, availableCodMdeps);
adapter.setClickHandler(data -> {
onComplete.run(data);
dismiss();
});
mBindings.availableDepoList.setAdapter(adapter);
}
}

View File

@ -0,0 +1,5 @@
package it.integry.integrywmsnative.view.dialogs.switch_user_depo;
public class DialogSwitchUserDepoViewModel {
}

View File

@ -0,0 +1,5 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#000000" android:viewportHeight="960" android:viewportWidth="960" android:width="24dp">
<path android:fillColor="@android:color/white" android:pathData="M483,619Q454,620 427.5,609.5Q401,599 381,579Q361,559 350.5,534Q340,509 340,481Q340,471 341,461.5Q342,452 345,443Q349,431 344.5,419Q340,407 329,402Q317,397 305.5,402Q294,407 290,419Q285,434 282.5,449Q280,464 280,480Q280,520 295.5,556.5Q311,593 339,621Q366,649 402.5,664Q439,679 478,680L461,697Q452,706 452,718Q452,730 461,739Q470,748 482,748Q494,748 503,739L567,675Q579,663 579,647Q579,631 567,619L503,555Q494,546 482,546Q470,546 461,555Q452,564 452,576Q452,588 461,597L483,619ZM476,340Q505,340 532,350.5Q559,361 579,381Q599,401 609.5,426Q620,451 620,479Q620,489 619,498.5Q618,508 615,517Q611,529 615.5,541.5Q620,554 631,559Q643,564 654.5,559Q666,554 670,542Q675,527 677.5,511.5Q680,496 680,480Q680,440 665.5,403.5Q651,367 622,338Q594,310 557.5,295.5Q521,281 482,281L500,263Q508,254 508,242Q508,230 499,221Q490,212 478,212Q466,212 457,221L393,285Q381,297 381,313Q381,329 393,341L457,405Q466,414 478,414Q490,414 499,405Q508,396 508,384Q508,372 499,363L476,340ZM480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,397 111.5,324Q143,251 197,197Q251,143 324,111.5Q397,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480Q880,563 848.5,636Q817,709 763,763Q709,817 636,848.5Q563,880 480,880ZM480,800Q614,800 707,707Q800,614 800,480Q800,346 707,253Q614,160 480,160Q346,160 253,253Q160,346 160,480Q160,614 253,707Q346,800 480,800ZM480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Z"/>
</vector>

View File

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
app:cardCornerRadius="16dp"
app:cardElevation="0dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingHorizontal="16dp"
android:paddingVertical="16dp">
<androidx.appcompat.widget.AppCompatImageView
style="@style/MaterialAlertDialog.Material3.Title.Icon.CenterStacked"
android:layout_width="36dp"
android:layout_height="36dp"
android:src="@drawable/ic_error_white_24dp"
app:tint="?colorPrimary" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title_text"
style="@style/MaterialAlertDialog.Material3.Title.Text.CenterStacked"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:layout_marginBottom="16dp"
android:text="@string/switch_depo_title" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/description_text"
style="@style/TextAppearance.Material3.BodyMedium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="@string/switch_depo_description" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/available_depo_list"
android:layout_marginTop="8dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"/>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.cardview.widget.CardView>
</layout>

View File

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="item"
type="it.integry.integrywmsnative.core.rest.model.AvailableCodMdepsDTO" />
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="8dp"
android:gravity="center_vertical"
android:focusable="true"
android:clickable="true"
android:background="?attr/selectableItemBackground">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toStartOf="@id/code"
android:ellipsize="end"
android:singleLine="true"
android:layout_marginEnd="4dp"
style="@style/TextAppearance.AppCompat.Medium"
android:text="@{item.descrizione}"
tools:text="Deposito centrale" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/code"
style="@style/TextAppearance.AppCompat.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:textColor="?colorOnPrimaryContainer"
android:background="@drawable/bg_checked_layout"
android:backgroundTint="?colorPrimaryContainer"
android:paddingHorizontal="6dp"
android:paddingVertical="2dp"
android:text="@{item.codMdep}"
tools:text="01" />
</RelativeLayout>
</layout>

View File

@ -79,7 +79,7 @@
android:padding="16dp">
<androidx.appcompat.widget.LinearLayoutCompat
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
@ -87,9 +87,11 @@
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/user_icon"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginEnd="16dp"
android:layout_centerVertical="true"
android:adjustViewBounds="true"
android:clickable="true"
android:focusable="true"
@ -98,9 +100,13 @@
android:tint="@android:color/white" />
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/user_detail_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
android:orientation="vertical"
android:layout_marginEnd="16dp"
android:layout_toEndOf="@id/user_icon"
android:layout_toStartOf="@id/switch_depo_button">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/current_user_name"
@ -108,7 +114,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
tools:text="Android Studio" />
tools:text="MARIO ROSSI" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/current_deposito"
@ -116,11 +122,26 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
tools:text="android.studio@android.com" />
tools:text="Deposito: 01 - Centrale" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/switch_depo_button"
android:layout_width="30dp"
android:layout_height="30dp"
android:adjustViewBounds="true"
android:layout_centerVertical="true"
android:clickable="true"
android:focusable="true"
android:layout_alignParentEnd="true"
android:onClick="@{() -> view.changeUserDepo()}"
android:src="@drawable/ic_rounded_change_circle_24"
android:tint="@android:color/white" />
</RelativeLayout>
<net.cachapa.expandablelayout.ExpandableLayout

View File

@ -481,4 +481,7 @@
<string name="expired_list_session"><![CDATA[La lista di prodotti è stata caricata troppo tempo fa!]]></string>
<string name="grid_details">Griglie disponibili</string>
<string name="searchbar_hint">Cerca</string>
<string name="switch_depo_title">Cambia deposito</string>
<string name="switch_depo_description">Cambia il deposito principale su cui stai lavorando tra quelli a te disponibili</string>
</resources>

View File

@ -488,4 +488,7 @@
<string name="expired_list_session"><![CDATA[The product list was loaded too much time ago!]]></string>
<string name="grid_details">Available grids</string>
<string name="searchbar_hint">Search</string>
<string name="switch_depo_title">Change deposit</string>
<string name="switch_depo_description">Change the main deposit you are working on among those available to you</string>
</resources>