MTU-Dining/app/src/main/java/com/thebrokenrail/mtudining/activity/menu/MenuActivity.java
2024-02-18 00:41:47 -05:00

125 lines
4.2 KiB
Java

package com.thebrokenrail.mtudining.activity.menu;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import androidx.activity.EdgeToEdge;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.appbar.MaterialToolbar;
import com.thebrokenrail.mtudining.R;
import com.thebrokenrail.mtudining.util.EdgeToEdgeUtil;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.Objects;
/**
* This activity lists the menu for a dining hall.
*/
public class MenuActivity extends AppCompatActivity {
public static final String NAME_EXTRA = "mtu_name";
public static final String ID_EXTRA = "mtu_id";
public static final String LATITUDE_EXTRA = "mtu_lat";
public static final String LONGITUDE_EXTRA = "lon_lat";
public static final String STREET_EXTRA = "lon_lat";
private MenuViewModel viewModel;
private MenuAdapter adapter;
private double latitude;
private double longitude;
private String street;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Setup UI
EdgeToEdge.enable(this);
setContentView(R.layout.activity_list);
// Toolbar
MaterialToolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);
// Get View Model
ViewModelProvider viewModelProvider = new ViewModelProvider(this);
viewModel = viewModelProvider.get(MenuViewModel.class);
// Get Info
String name = getIntent().getStringExtra(NAME_EXTRA);
toolbar.setTitle(name);
String id = getIntent().getStringExtra(ID_EXTRA);
viewModel.task.setup(id);
latitude = getIntent().getDoubleExtra(LATITUDE_EXTRA, 0);
longitude = getIntent().getDoubleExtra(LONGITUDE_EXTRA, 0);
street = getIntent().getStringExtra(STREET_EXTRA);
// Setup RecyclerView
adapter = new MenuAdapter(viewModel.task, viewModel.state);
viewModel.task.sendDataToListeners();
RecyclerView recyclerView = findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);
EdgeToEdgeUtil.setup(this, recyclerView);
// Handle Existing Date Picker
MenuDatePicker.setupListeners(getSupportFragmentManager());
}
@Override
protected void onDestroy() {
super.onDestroy();
adapter.onDestroy();
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
// Make back button in toolbar act as normal back button.
if (item.getItemId() == android.R.id.home) {
getOnBackPressedDispatcher().onBackPressed();
return true;
} else if (item.getItemId() == R.id.menu_map) {
// Open Map
String encodedStreet;
try {
encodedStreet = URLEncoder.encode(street, StandardCharsets.UTF_8.toString());
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
Uri gmmIntentUri = Uri.parse("geo:" + latitude + ',' + longitude + "?q=" + encodedStreet);
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
startActivity(mapIntent);
return true;
} else {
return super.onOptionsItemSelected(item);
}
}
/**
* Update selected date.
* @param newDate New date
*/
public void updateDate(Date newDate) {
viewModel.state.setDate(newDate);
viewModel.task.start();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_toolbar, menu);
return true;
}
}