11package com .codedead .advancedpassgen .ui .home ;
22
33import android .content .SharedPreferences ;
4- import android .content .res .Configuration ;
54import android .os .Bundle ;
65import android .view .LayoutInflater ;
76import android .view .View ;
87import android .view .ViewGroup ;
98
109import androidx .annotation .NonNull ;
1110import androidx .fragment .app .Fragment ;
11+ import androidx .fragment .app .FragmentActivity ;
1212import androidx .preference .PreferenceManager ;
1313import androidx .recyclerview .widget .LinearLayoutManager ;
1414import androidx .recyclerview .widget .RecyclerView ;
15+ import androidx .swiperefreshlayout .widget .SwipeRefreshLayout ;
1516
1617import com .codedead .advancedpassgen .databinding .FragmentHomeBinding ;
17- import com .codedead .advancedpassgen .domain .LocaleHelper ;
1818import com .codedead .advancedpassgen .domain .PasswordAdapter ;
1919import com .codedead .advancedpassgen .domain .PasswordGenerator ;
2020import com .codedead .advancedpassgen .domain .PasswordItem ;
2323import java .util .List ;
2424import java .util .concurrent .Executors ;
2525
26- public class HomeFragment extends Fragment {
26+ public class HomeFragment extends Fragment implements SwipeRefreshLayout . OnRefreshListener {
2727
2828 private FragmentHomeBinding binding ;
2929 private SharedPreferences sharedPreferences ;
30- private String lastLanguage ;
30+ private PasswordAdapter adapter ;
3131 private String customCharacterSet ;
3232 private int minimumLength ;
3333 private int maximumLength ;
@@ -45,15 +45,18 @@ public View onCreateView(@NonNull final LayoutInflater inflater,
4545 binding = FragmentHomeBinding .inflate (inflater , container , false );
4646 View root = binding .getRoot ();
4747
48+ binding .swipeRefresh .setOnRefreshListener (this );
49+ binding .textHome .setOnRefreshListener (this );
50+
4851 final RecyclerView recyclerView = binding .recyclerView ;
49- final PasswordAdapter adapter = new PasswordAdapter (requireContext ());
52+ adapter = new PasswordAdapter (requireContext ());
5053
5154 recyclerView .setLayoutManager (new LinearLayoutManager (requireContext (), LinearLayoutManager .VERTICAL , false ));
5255 recyclerView .setAdapter (adapter );
5356
5457 binding .fabAdd .setOnClickListener (view -> {
5558 binding .textHome .setVisibility (View .GONE );
56- binding .recyclerView .setVisibility (View .VISIBLE );
59+ binding .swipeRefresh .setVisibility (View .VISIBLE );
5760
5861 binding .fabClear .setEnabled (false );
5962 binding .fabRefresh .setEnabled (false );
@@ -73,36 +76,12 @@ public View onCreateView(@NonNull final LayoutInflater inflater,
7376 adapter .clear ();
7477
7578 binding .textHome .setVisibility (View .VISIBLE );
76- binding .recyclerView .setVisibility (View .GONE );
79+ binding .swipeRefresh .setVisibility (View .GONE );
7780 });
7881
79- binding .fabRefresh .setOnClickListener (view -> {
80- binding .textHome .setVisibility (View .GONE );
81- binding .loadingLayout .setVisibility (View .VISIBLE );
82-
83- binding .fabClear .setEnabled (false );
84- binding .fabRefresh .setEnabled (false );
85- binding .fabAdd .setEnabled (false );
86-
87- Executors .newSingleThreadExecutor ().execute (() -> {
88- final List <PasswordItem > items = PasswordGenerator .generatePasswords (minimumLength , maximumLength , passwordAmount , smallLetters , capitalLetters , numbers , specialCharacters , brackets , spaces , customCharacterSet );
89- requireActivity ().runOnUiThread (() -> {
90- if (binding == null )
91- return ;
92-
93- binding .loadingLayout .setVisibility (View .GONE );
94- binding .recyclerView .setVisibility (View .VISIBLE );
95- adapter .insert (items );
96-
97- binding .fabClear .setEnabled (true );
98- binding .fabRefresh .setEnabled (true );
99- binding .fabAdd .setEnabled (true );
100- });
101- });
102- });
82+ binding .fabRefresh .setOnClickListener (view -> refreshPasswords ());
10383
10484 sharedPreferences = PreferenceManager .getDefaultSharedPreferences (requireContext ());
105- lastLanguage = sharedPreferences .getString ("appLanguage" , "en" );
10685 customCharacterSet = sharedPreferences .getString ("customCharacterSet" , "" );
10786 minimumLength = Integer .parseInt (sharedPreferences .getString ("minimumLength" , "8" ));
10887 maximumLength = Integer .parseInt (sharedPreferences .getString ("maximumLength" , "30" ));
@@ -121,16 +100,45 @@ public View onCreateView(@NonNull final LayoutInflater inflater,
121100 return root ;
122101 }
123102
124- @ Override
125- public void onResume () {
126- final String selectedLanguage = sharedPreferences .getString ("appLanguage" , "en" );
103+ /**
104+ * Refresh the passwords
105+ */
106+ private void refreshPasswords () {
107+ binding .textHome .setVisibility (View .GONE );
108+ binding .loadingLayout .setVisibility (View .VISIBLE );
109+ binding .swipeRefresh .setVisibility (View .GONE );
110+
111+ binding .fabClear .setEnabled (false );
112+ binding .fabRefresh .setEnabled (false );
113+ binding .fabAdd .setEnabled (false );
114+
115+ Executors .newSingleThreadExecutor ().execute (() -> {
116+ final List <PasswordItem > items = PasswordGenerator .generatePasswords (minimumLength , maximumLength , passwordAmount , smallLetters , capitalLetters , numbers , specialCharacters , brackets , spaces , customCharacterSet );
127117
128- if (!lastLanguage .equals (selectedLanguage )) {
129- LocaleHelper .setLocale (getContext (), selectedLanguage );
130- // recreate();
131- }
118+ final FragmentActivity activity = getActivity ();
119+ if (activity == null )
120+ return ;
132121
133- lastLanguage = sharedPreferences .getString ("appLanguage" , "en" );
122+ activity .runOnUiThread (() -> {
123+ if (binding == null || adapter == null )
124+ return ;
125+
126+ binding .loadingLayout .setVisibility (View .GONE );
127+ binding .swipeRefresh .setVisibility (View .VISIBLE );
128+ adapter .insert (items );
129+
130+ binding .fabClear .setEnabled (true );
131+ binding .fabRefresh .setEnabled (true );
132+ binding .fabAdd .setEnabled (true );
133+
134+ binding .swipeRefresh .setRefreshing (false );
135+ binding .textHome .setRefreshing (false );
136+ });
137+ });
138+ }
139+
140+ @ Override
141+ public void onResume () {
134142 customCharacterSet = sharedPreferences .getString ("customCharacterSet" , "" );
135143 minimumLength = Integer .parseInt (sharedPreferences .getString ("minimumLength" , "8" ));
136144 maximumLength = Integer .parseInt (sharedPreferences .getString ("maximumLength" , "30" ));
@@ -149,15 +157,14 @@ public void onResume() {
149157 UtilController .applyFlagSecure (getActivity (), preventScreenshot );
150158 }
151159
152- @ Override
153- public void onConfigurationChanged (@ NonNull final Configuration newConfig ) {
154- super .onConfigurationChanged (newConfig );
155- LocaleHelper .onAttach (getContext ());
156- }
157-
158160 @ Override
159161 public void onDestroyView () {
160162 super .onDestroyView ();
161163 binding = null ;
162164 }
165+
166+ @ Override
167+ public void onRefresh () {
168+ refreshPasswords ();
169+ }
163170}
0 commit comments