Changeset View
Changeset View
Standalone View
Standalone View
src/it/reyboz/bustorino/fragments/FavoritesFragment.java
Show All 25 Lines | |||||
import android.view.LayoutInflater; | import android.view.LayoutInflater; | ||||
import android.view.MenuInflater; | import android.view.MenuInflater; | ||||
import android.view.MenuItem; | import android.view.MenuItem; | ||||
import android.view.View; | import android.view.View; | ||||
import android.view.ViewGroup; | import android.view.ViewGroup; | ||||
import android.widget.AdapterView; | import android.widget.AdapterView; | ||||
import android.widget.EditText; | import android.widget.EditText; | ||||
import android.widget.ImageView; | import android.widget.ImageView; | ||||
import android.widget.ListView; | |||||
import android.widget.TextView; | import android.widget.TextView; | ||||
import android.widget.Toast; | import android.widget.Toast; | ||||
import androidx.annotation.NonNull; | import androidx.annotation.NonNull; | ||||
import androidx.annotation.Nullable; | import androidx.annotation.Nullable; | ||||
import androidx.lifecycle.ViewModelProvider; | import androidx.lifecycle.ViewModelProvider; | ||||
import androidx.recyclerview.widget.DividerItemDecoration; | import androidx.recyclerview.widget.DividerItemDecoration; | ||||
import androidx.recyclerview.widget.LinearLayoutManager; | import androidx.recyclerview.widget.LinearLayoutManager; | ||||
import androidx.recyclerview.widget.RecyclerView; | import androidx.recyclerview.widget.RecyclerView; | ||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.List; | import java.util.List; | ||||
import com.google.android.material.floatingactionbutton.FloatingActionButton; | |||||
import it.reyboz.bustorino.*; | import it.reyboz.bustorino.*; | ||||
import it.reyboz.bustorino.adapters.AdapterListener; | import it.reyboz.bustorino.adapters.AdapterListener; | ||||
import it.reyboz.bustorino.adapters.StopAdapter; | |||||
import it.reyboz.bustorino.adapters.StopRecyclerAdapter; | import it.reyboz.bustorino.adapters.StopRecyclerAdapter; | ||||
import it.reyboz.bustorino.backend.Stop; | import it.reyboz.bustorino.backend.Stop; | ||||
import it.reyboz.bustorino.data.FavoritesViewModel; | import it.reyboz.bustorino.data.FavoritesViewModel; | ||||
import it.reyboz.bustorino.middleware.AsyncStopFavoriteAction; | import it.reyboz.bustorino.middleware.AsyncStopFavoriteAction; | ||||
public class FavoritesFragment extends BaseFragment { | public class FavoritesFragment extends ScreenBaseFragment { | ||||
private RecyclerView favoriteRecyclerView; | private RecyclerView favoriteRecyclerView; | ||||
private EditText busStopNameText; | private EditText busStopNameText; | ||||
private TextView favoriteTipTextView; | private TextView favoriteTipTextView; | ||||
private ImageView angeryBusImageView; | private ImageView angeryBusImageView; | ||||
private LinearLayoutManager llManager; | |||||
@Nullable | @Nullable | ||||
private CommonFragmentListener mListener; | private CommonFragmentListener mListener; | ||||
public static final String FRAGMENT_TAG = "BusTOFavFragment"; | public static final String FRAGMENT_TAG = "BusTOFavFragment"; | ||||
private final AdapterListener adapterListener = new AdapterListener() { | private final AdapterListener adapterListener = new AdapterListener() { | ||||
@Override | @Override | ||||
Show All 40 Lines | public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { | ||||
if(mListener!=null){ | if(mListener!=null){ | ||||
mListener.requestArrivalsForStopID(busStop.ID); | mListener.requestArrivalsForStopID(busStop.ID); | ||||
} | } | ||||
}); | }); | ||||
*/ | */ | ||||
llManager = new LinearLayoutManager(getContext()); | LinearLayoutManager llManager = new LinearLayoutManager(getContext()); | ||||
llManager.setOrientation(LinearLayoutManager.VERTICAL); | llManager.setOrientation(LinearLayoutManager.VERTICAL); | ||||
favoriteRecyclerView.setLayoutManager(llManager); | favoriteRecyclerView.setLayoutManager(llManager); | ||||
DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(favoriteRecyclerView.getContext(), | DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(favoriteRecyclerView.getContext(), | ||||
llManager.getOrientation()); | llManager.getOrientation()); | ||||
favoriteRecyclerView.addItemDecoration(dividerItemDecoration); | favoriteRecyclerView.addItemDecoration(dividerItemDecoration); | ||||
angeryBusImageView = root.findViewById(R.id.angeryBusImageView); | angeryBusImageView = root.findViewById(R.id.angeryBusImageView); | ||||
favoriteTipTextView = root.findViewById(R.id.favoriteTipTextView); | favoriteTipTextView = root.findViewById(R.id.favoriteTipTextView); | ||||
registerForContextMenu(favoriteRecyclerView); | registerForContextMenu(favoriteRecyclerView); | ||||
FavoritesViewModel model = new ViewModelProvider(this).get(FavoritesViewModel.class); | FavoritesViewModel model = new ViewModelProvider(this).get(FavoritesViewModel.class); | ||||
model.getFavorites().observe(getViewLifecycleOwner(), this::showStops); | model.getFavorites().observe(getViewLifecycleOwner(), this::showStops); | ||||
showStops(new ArrayList<>()); | showStops(new ArrayList<>()); | ||||
return root; | return root; | ||||
} | } | ||||
@Override | @Override | ||||
public void onAttach(@NonNull Context context) { | public void onAttach(@NonNull Context context) { | ||||
super.onAttach(context); | super.onAttach(context); | ||||
if (context instanceof CommonFragmentListener) { | if (context instanceof CommonFragmentListener) { | ||||
mListener = (CommonFragmentListener) context; | mListener = (CommonFragmentListener) context; | ||||
} else { | } else { | ||||
throw new RuntimeException(context.toString() | throw new RuntimeException(context | ||||
+ " must implement CommonFragmentListener"); | + " must implement CommonFragmentListener"); | ||||
} | } | ||||
} | } | ||||
@Override | @Override | ||||
public void onDetach() { | public void onDetach() { | ||||
super.onDetach(); | super.onDetach(); | ||||
Show All 26 Lines | public class FavoritesFragment extends ScreenBaseFragment { | ||||
public boolean onContextItemSelected(MenuItem item) { | public boolean onContextItemSelected(MenuItem item) { | ||||
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item | AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item | ||||
.getMenuInfo(); | .getMenuInfo(); | ||||
if(!(favoriteRecyclerView.getAdapter() instanceof StopRecyclerAdapter)) | if(!(favoriteRecyclerView.getAdapter() instanceof StopRecyclerAdapter)) | ||||
return false; | return false; | ||||
StopRecyclerAdapter adapter = (StopRecyclerAdapter) favoriteRecyclerView.getAdapter(); | StopRecyclerAdapter adapter = (StopRecyclerAdapter) favoriteRecyclerView.getAdapter(); | ||||
Stop busStop = (Stop) adapter.getStops().get(adapter.getPosition()); | Stop busStop = adapter.getStops().get(adapter.getPosition()); | ||||
switch (item.getItemId()) { | switch (item.getItemId()) { | ||||
case R.id.action_favourite_entry_delete: | case R.id.action_favourite_entry_delete: | ||||
if (getContext()!=null) | if (getContext()!=null) | ||||
new AsyncStopFavoriteAction(getContext().getApplicationContext(), AsyncStopFavoriteAction.Action.REMOVE, | new AsyncStopFavoriteAction(getContext().getApplicationContext(), AsyncStopFavoriteAction.Action.REMOVE, | ||||
result -> { | result -> { | ||||
}).execute(busStop); | }).execute(busStop); | ||||
Show All 15 Lines | public boolean onContextItemSelected(MenuItem item) { | ||||
mListener.showMapCenteredOnStop(busStop); | mListener.showMapCenteredOnStop(busStop); | ||||
return true; | return true; | ||||
default: | default: | ||||
return super.onContextItemSelected(item); | return super.onContextItemSelected(item); | ||||
} | } | ||||
} | } | ||||
@Nullable | |||||
@Override | |||||
public View getBaseViewForSnackBar() { | |||||
return null; | |||||
} | |||||
void showStops(List<Stop> busStops){ | void showStops(List<Stop> busStops){ | ||||
// If no data is found show a friendly message | // If no data is found show a friendly message | ||||
if(BuildConfig.DEBUG) | if(BuildConfig.DEBUG) | ||||
Log.d("BusTO - Favorites", "We have "+busStops.size()+" favorites in the list"); | Log.d("BusTO - Favorites", "We have "+busStops.size()+" favorites in the list"); | ||||
if (busStops.size() == 0) { | if (busStops.size() == 0) { | ||||
favoriteRecyclerView.setVisibility(View.INVISIBLE); | favoriteRecyclerView.setVisibility(View.INVISIBLE); | ||||
// TextView favoriteTipTextView = (TextView) findViewById(R.id.favoriteTipTextView); | // TextView favoriteTipTextView = (TextView) findViewById(R.id.favoriteTipTextView); | ||||
Show All 26 Lines | public void showBusStopUsernameInputDialog(final Stop busStop) { | ||||
View renameDialogLayout = inflater.inflate(R.layout.rename_dialog, null); | View renameDialogLayout = inflater.inflate(R.layout.rename_dialog, null); | ||||
busStopNameText = (EditText) renameDialogLayout.findViewById(R.id.rename_dialog_bus_stop_name); | busStopNameText = (EditText) renameDialogLayout.findViewById(R.id.rename_dialog_bus_stop_name); | ||||
busStopNameText.setText(busStop.getStopDisplayName()); | busStopNameText.setText(busStop.getStopDisplayName()); | ||||
busStopNameText.setHint(busStop.getStopDefaultName()); | busStopNameText.setHint(busStop.getStopDefaultName()); | ||||
builder.setTitle(getString(R.string.dialog_rename_bus_stop_username_title)); | builder.setTitle(getString(R.string.dialog_rename_bus_stop_username_title)); | ||||
builder.setView(renameDialogLayout); | builder.setView(renameDialogLayout); | ||||
builder.setPositiveButton(getString(android.R.string.ok), new DialogInterface.OnClickListener() { | builder.setPositiveButton(getString(android.R.string.ok), (dialog, which) -> { | ||||
@Override | |||||
public void onClick(DialogInterface dialog, int which) { | |||||
String busStopUsername = busStopNameText.getText().toString(); | String busStopUsername = busStopNameText.getText().toString(); | ||||
String oldUserName = busStop.getStopUserName(); | String oldUserName = busStop.getStopUserName(); | ||||
// changed to none | // changed to none | ||||
if(busStopUsername.length() == 0) { | if(busStopUsername.length() == 0) { | ||||
// unless it was already empty, set new | // unless it was already empty, set new | ||||
if(oldUserName != null) { | if(oldUserName != null) { | ||||
busStop.setStopUserName(null); | busStop.setStopUserName(null); | ||||
} | } | ||||
} else { // changed to something | } else { // changed to something | ||||
// something different? | // something different? | ||||
if(!busStopUsername.equals(oldUserName)) { | if(!busStopUsername.equals(oldUserName)) { | ||||
busStop.setStopUserName(busStopUsername); | busStop.setStopUserName(busStopUsername); | ||||
} | } | ||||
} | } | ||||
launchUpdate(busStop); | launchUpdate(busStop); | ||||
} | |||||
}); | }); | ||||
builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { | builder.setNegativeButton(android.R.string.cancel, (dialog, which) -> dialog.cancel()); | ||||
@Override | builder.setNeutralButton(R.string.dialog_rename_bus_stop_username_reset_button, (dialog, which) -> { | ||||
public void onClick(DialogInterface dialog, int which) { | |||||
dialog.cancel(); | |||||
} | |||||
}); | |||||
builder.setNeutralButton(R.string.dialog_rename_bus_stop_username_reset_button, new DialogInterface.OnClickListener() { | |||||
@Override | |||||
public void onClick(DialogInterface dialog, int which) { | |||||
// delete user name from database | // delete user name from database | ||||
busStop.setStopUserName(null); | busStop.setStopUserName(null); | ||||
launchUpdate(busStop); | launchUpdate(busStop); | ||||
} | |||||
}); | }); | ||||
builder.show(); | builder.show(); | ||||
} | } | ||||
private void launchUpdate(Stop busStop){ | private void launchUpdate(Stop busStop){ | ||||
if (getContext()!=null) | if (getContext()!=null) | ||||
new AsyncStopFavoriteAction(getContext().getApplicationContext(), AsyncStopFavoriteAction.Action.UPDATE, | new AsyncStopFavoriteAction(getContext().getApplicationContext(), AsyncStopFavoriteAction.Action.UPDATE, | ||||
new AsyncStopFavoriteAction.ResultListener() { | result -> { | ||||
@Override | |||||
public void doStuffWithResult(Boolean result) { | |||||
//Toast.makeText(getApplicationContext(), R.string.tip_add_favorite, Toast.LENGTH_SHORT).show(); | //Toast.makeText(getApplicationContext(), R.string.tip_add_favorite, Toast.LENGTH_SHORT).show(); | ||||
} | |||||
}).execute(busStop); | }).execute(busStop); | ||||
} | } | ||||
} | } |
Public contents are in Creative Commons Attribution-ShareAlike 4.0 (CC-BY-SA) or GNU Free Documentation License (at your option) unless otherwise noted. · Contact / Register