Skip to content

Commit 4356a3c

Browse files
committed
Make allergens choice persistent
1 parent 68cc0c0 commit 4356a3c

File tree

5 files changed

+58
-36
lines changed

5 files changed

+58
-36
lines changed

app/src/main/java/be/ugent/zeus/hydra/resto/RestoPreferenceFragment.java

+2
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ public class RestoPreferenceFragment extends PreferenceFragment {
6161
public static final String DEFAULT_CLOSING_TIME = "21:00";
6262
public static final String PREF_RESTO_CLOSING_HOUR = "pref_resto_closing_hour";
6363

64+
public static final String PREF_SHOW_ALLERGENS = "key_show_allergens";
65+
6466
public static String getDefaultRestoEndpoint(Context context) {
6567
return context.getString(R.string.value_resto_default_endpoint);
6668
}

app/src/main/java/be/ugent/zeus/hydra/resto/SingleDayFragment.java

-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import android.view.LayoutInflater;
2727
import android.view.View;
2828
import android.view.ViewGroup;
29-
import android.widget.TextView;
3029
import androidx.annotation.NonNull;
3130
import androidx.annotation.Nullable;
3231
import androidx.core.os.BundleCompat;

app/src/main/java/be/ugent/zeus/hydra/resto/menu/MenuPagerAdapter.java

+7-3
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import androidx.annotation.NonNull;
2727
import androidx.annotation.Nullable;
2828
import androidx.fragment.app.Fragment;
29+
import androidx.preference.PreferenceManager;
2930
import androidx.viewpager2.adapter.FragmentStateAdapter;
3031

3132
import java.time.LocalDate;
@@ -34,6 +35,7 @@
3435
import java.util.Objects;
3536

3637
import be.ugent.zeus.hydra.resto.RestoMenu;
38+
import be.ugent.zeus.hydra.resto.RestoPreferenceFragment;
3739
import be.ugent.zeus.hydra.resto.SingleDayFragment;
3840

3941
/**
@@ -43,13 +45,15 @@
4345
*/
4446
class MenuPagerAdapter extends FragmentStateAdapter {
4547
private static final int LEGEND = -63;
46-
47-
private boolean showAllergens = false;
48+
49+
private boolean showAllergens;
4850

4951
private List<RestoMenu> data = Collections.emptyList();
5052

5153
public MenuPagerAdapter(@NonNull Fragment fragment) {
5254
super(fragment);
55+
showAllergens = PreferenceManager.getDefaultSharedPreferences(fragment.requireContext())
56+
.getBoolean(RestoPreferenceFragment.PREF_SHOW_ALLERGENS, false);
5357
}
5458

5559
@SuppressLint("NotifyDataSetChanged")
@@ -108,7 +112,7 @@ public boolean containsItem(long itemId) {
108112
return true;
109113
}
110114

111-
for (RestoMenu menu: this.data) {
115+
for (RestoMenu menu : this.data) {
112116
if (Objects.hash(menu, showAllergens) == itemId) {
113117
return true;
114118
}

app/src/main/java/be/ugent/zeus/hydra/resto/menu/RestoFragment.java

+43-25
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import android.widget.*;
3131
import androidx.annotation.NonNull;
3232
import androidx.annotation.Nullable;
33+
import androidx.core.view.MenuProvider;
3334
import androidx.fragment.app.Fragment;
3435
import androidx.lifecycle.ViewModelProvider;
3536
import androidx.preference.PreferenceManager;
@@ -64,8 +65,8 @@
6465
import com.google.android.material.tabs.TabLayout;
6566
import com.google.android.material.tabs.TabLayoutMediator;
6667
import com.google.android.material.textfield.TextInputLayout;
68+
import org.jetbrains.annotations.NotNull;
6769

68-
import static be.ugent.zeus.hydra.common.utils.FragmentUtils.registerMenuProvider;
6970
import static be.ugent.zeus.hydra.common.utils.FragmentUtils.requireBaseActivity;
7071

7172
/**
@@ -133,31 +134,48 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
133134
super.onViewCreated(view, savedInstanceState);
134135
Log.d(TAG, "receiveResto: on view created");
135136

136-
registerMenuProvider(this, R.menu.menu_resto, new int[]{R.id.action_history}, menuItem -> {
137-
int itemId = menuItem.getItemId();
138-
if (itemId == R.id.action_refresh) {
139-
Toast toast = Toast.makeText(requireContext(), R.string.resto_extra_refresh_started, Toast.LENGTH_SHORT);
140-
toast.show();
141-
metaViewModel.onRefresh();
142-
menuViewModel.onRefresh();
143-
return true;
144-
} else if (itemId == R.id.resto_show_website) {
145-
NetworkUtils.maybeLaunchBrowser(requireContext(), URL);
146-
return true;
147-
} else if (itemId == R.id.action_history) {
148-
startActivity(new Intent(requireContext(), HistoryActivity.class));
149-
return true;
150-
} else if (itemId == R.id.resto_order_online) {
151-
String url = ORDER_URL + requireContext().getString(R.string.value_info_endpoint);
152-
NetworkUtils.maybeLaunchBrowser(requireContext(), url);
153-
return true;
154-
} else if (itemId == R.id.resto_show_allergens) {
155-
menuItem.setChecked(!menuItem.isChecked());
156-
pageAdapter.setShowAllergens(menuItem.isChecked());
157-
return true;
137+
var manager = PreferenceManager.getDefaultSharedPreferences(requireContext());
138+
var activity = requireBaseActivity(this);
139+
activity.addMenuProvider(new MenuProvider() {
140+
@Override
141+
public void onCreateMenu(@NonNull @NotNull Menu menu, @NonNull @NotNull MenuInflater menuInflater) {
142+
menuInflater.inflate(R.menu.menu_resto, menu);
143+
activity.tintToolbarIcons(menu, R.id.action_history);
144+
var showAllergens = manager.getBoolean(RestoPreferenceFragment.PREF_SHOW_ALLERGENS, false);
145+
menu.findItem(R.id.resto_show_allergens).setChecked(showAllergens);
158146
}
159-
return false;
160-
});
147+
148+
@Override
149+
public boolean onMenuItemSelected(@NonNull @NotNull MenuItem menuItem) {
150+
int itemId = menuItem.getItemId();
151+
if (itemId == R.id.action_refresh) {
152+
Toast toast = Toast.makeText(requireContext(), R.string.resto_extra_refresh_started, Toast.LENGTH_SHORT);
153+
toast.show();
154+
metaViewModel.onRefresh();
155+
menuViewModel.onRefresh();
156+
return true;
157+
} else if (itemId == R.id.resto_show_website) {
158+
NetworkUtils.maybeLaunchBrowser(requireContext(), URL);
159+
return true;
160+
} else if (itemId == R.id.action_history) {
161+
startActivity(new Intent(requireContext(), HistoryActivity.class));
162+
return true;
163+
} else if (itemId == R.id.resto_order_online) {
164+
String url = ORDER_URL + requireContext().getString(R.string.value_info_endpoint);
165+
NetworkUtils.maybeLaunchBrowser(requireContext(), url);
166+
return true;
167+
} else if (itemId == R.id.resto_show_allergens) {
168+
menuItem.setChecked(!menuItem.isChecked());
169+
var newValue = menuItem.isChecked();
170+
manager.edit()
171+
.putBoolean(RestoPreferenceFragment.PREF_SHOW_ALLERGENS, newValue)
172+
.apply();
173+
pageAdapter.setShowAllergens(newValue);
174+
return true;
175+
}
176+
return false;
177+
}
178+
}, getViewLifecycleOwner());
161179

162180
requireBaseActivity(this).requireToolbar().setDisplayShowTitleEnabled(false);
163181
exposedDropdown = requireActivity().findViewById(R.id.exposed_dropdown);

app/src/main/res/menu/menu_resto.xml

+6-7
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,17 @@
2222

2323
<menu xmlns:android="http://schemas.android.com/apk/res/android"
2424
xmlns:app="http://schemas.android.com/apk/res-auto">
25-
<item
26-
android:id="@+id/action_history"
27-
android:icon="@drawable/ic_history"
28-
android:orderInCategory="50"
29-
android:title="@string/resto_history"
30-
app:showAsAction="ifRoom" />
3125
<item
3226
android:id="@+id/action_refresh"
3327
android:icon="@drawable/ic_refresh"
3428
android:orderInCategory="60"
3529
android:title="@string/action_refresh"
30+
app:showAsAction="ifRoom" />
31+
<item
32+
android:id="@+id/action_history"
33+
android:icon="@drawable/ic_history"
34+
android:orderInCategory="50"
35+
android:title="@string/resto_history"
3636
app:showAsAction="never" />
3737
<item
3838
android:id="@+id/resto_show_website"
@@ -49,6 +49,5 @@
4949
android:orderInCategory="120"
5050
android:title="@string/resto_show_allergens"
5151
android:checkable="true"
52-
android:checked="false"
5352
app:showAsAction="never" />
5453
</menu>

0 commit comments

Comments
 (0)