133 lines
4.5 KiB
Java
133 lines
4.5 KiB
Java
package com.thebrokenrail.mtudining.activity.menu;
|
|
|
|
import android.content.ActivityNotFoundException;
|
|
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.DateUtil;
|
|
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);
|
|
try {
|
|
startActivity(mapIntent);
|
|
} catch (ActivityNotFoundException e) {
|
|
// Ignore
|
|
}
|
|
return true;
|
|
} else {
|
|
return super.onOptionsItemSelected(item);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Update selected date.
|
|
* @param newDate New date
|
|
*/
|
|
public void updateDate(Date newDate) {
|
|
if (!DateUtil.toString(newDate).equals(DateUtil.toString(viewModel.state.getDate()))) {
|
|
viewModel.state.setDate(newDate);
|
|
viewModel.task.start();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public boolean onCreateOptionsMenu(Menu menu) {
|
|
getMenuInflater().inflate(R.menu.menu_toolbar, menu);
|
|
return true;
|
|
}
|
|
}
|