Merge pull request #9332 from osmandapp/rearrange_categories_refactor

Rearrange categories refactor
This commit is contained in:
vshcherb 2020-06-26 17:42:23 +02:00 committed by GitHub
commit 61f6b93d18
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -30,6 +30,7 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.snackbar.BaseTransientBottomBar;
import com.google.android.material.snackbar.Snackbar;
import net.osmand.AndroidUtils;
@ -106,7 +107,7 @@ public class RearrangePoiFiltersFragment extends DialogFragment implements Selec
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
final OsmandApplication app = requireMyApplication();
boolean nightMode = isNightMode(app, usedOnMap);
final boolean nightMode = isNightMode(app, usedOnMap);
View mainView = UiUtilities.getInflater(app, nightMode).inflate(R.layout.edit_arrangement_list_fragment, container, false);
createToolbar(mainView, nightMode);
@ -158,6 +159,39 @@ public class RearrangePoiFiltersFragment extends DialogFragment implements Selec
updateItems();
}
}
@Override
public void onDeleteClicked(final int position) {
final ListItem item = items.get(position);
if (item.value instanceof PoiUIFilterDataObject) {
PoiUIFilterDataObject poiInfo = (PoiUIFilterDataObject) item.value;
final PoiUIFilter filter = app.getPoiFilters().getFilterById(poiInfo.filterId);
if (filter != null && app.getPoiFilters().removePoiFilter(filter)) {
filter.setDeleted(true);
filterDeleted = true;
}
items.remove(item);
adapter.notifyDataSetChanged();
Snackbar snackbar = Snackbar.make(requireView(),
getString(R.string.item_deleted, poiInfo.name), Snackbar.LENGTH_LONG)
.setAction(R.string.shared_string_undo, new View.OnClickListener() {
@Override
public void onClick(View view) {
items.add(position, item);
adapter.notifyDataSetChanged();
if (filter != null) {
filter.setDeleted(false);
app.getPoiFilters().createPoiFilter(filter, false);
}
}
});
ViewCompat.setElevation(snackbar.getView(), 0f);
snackbar.setAnchorView(buttonsContainer);
snackbar.setAnimationMode(BaseTransientBottomBar.ANIMATION_MODE_FADE);
UiUtilities.setupSnackbar(snackbar, nightMode);
snackbar.show();
}
}
});
recyclerView.setAdapter(adapter);
@ -577,19 +611,23 @@ public class RearrangePoiFiltersFragment extends DialogFragment implements Selec
@SuppressLint("ClickableViewAccessibility")
@Override
public void onBindViewHolder(final @NonNull RecyclerView.ViewHolder holder, final int position) {
final ListItem item = items.get(position);
final boolean nightMode = isNightMode(app, usedOnMap);
public void onBindViewHolder(final @NonNull RecyclerView.ViewHolder holder, int position) {
ListItem item = items.get(position);
boolean nightMode = isNightMode(app, usedOnMap);
int activeColorResId = nightMode ? R.color.active_color_primary_dark : R.color.active_color_primary_light;
if (holder instanceof PoiViewHolder) {
PoiViewHolder h = (PoiViewHolder) holder;
final PoiUIFilterDataObject poiInfo = (PoiUIFilterDataObject) item.value;
PoiUIFilterDataObject poiInfo = (PoiUIFilterDataObject) item.value;
int osmandOrangeColorResId = nightMode ? R.color.osmand_orange_dark : R.color.osmand_orange;
boolean isActive = poiInfo.isActive;
h.title.setText(poiInfo.name);
int padding = (int) getResources().getDimension(R.dimen.content_padding);
int paddingSmall = (int) getResources().getDimension(R.dimen.content_padding_small);
h.title.setPadding(isActive ? 0 : padding, paddingSmall, paddingSmall, padding);
boolean userFilter = poiInfo.filterId.startsWith(USER_PREFIX);
int iconRes = QuickSearchListItem.getCustomFilterIconRes(poiHelper.getFilterById(poiInfo.filterId));
h.icon.setImageDrawable(uiUtilities.getIcon(userFilter ? iconRes : poiInfo.iconRes, osmandOrangeColorResId));
h.moveIcon.setVisibility(poiInfo.isActive ? View.VISIBLE : View.GONE);
h.moveIcon.setVisibility(isActive ? View.VISIBLE : View.GONE);
h.actionIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@ -599,7 +637,7 @@ public class RearrangePoiFiltersFragment extends DialogFragment implements Selec
}
}
});
if (poiInfo.isActive) {
if (isActive) {
h.actionIcon.setImageDrawable(uiUtilities.getIcon(R.drawable.ic_action_remove, R.color.color_osm_edit_delete));
h.moveIcon.setOnTouchListener(new View.OnTouchListener() {
@Override
@ -618,40 +656,10 @@ public class RearrangePoiFiltersFragment extends DialogFragment implements Selec
h.actionDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar snackbar = Snackbar.make(requireView(),
getString(R.string.item_deleted, poiInfo.name), Snackbar.LENGTH_LONG)
.setAction(R.string.shared_string_undo, new View.OnClickListener() {
@Override
public void onClick(View view) {
items.add(position, item);
notifyDataSetChanged();
}
})
.addCallback(new Snackbar.Callback() {
@Override
public void onShown(Snackbar sb) {
super.onShown(sb);
items.remove(item);
notifyDataSetChanged();
}
@Override
public void onDismissed(Snackbar transientBottomBar, int event) {
super.onDismissed(transientBottomBar, event);
if (DISMISS_EVENT_ACTION != event) {
PoiUIFilter filter = poiHelper.getFilterById(poiInfo.filterId);
if (filter != null && poiHelper.removePoiFilter(filter)) {
availableFiltersKeys.remove(poiInfo.filterId);
filter.setDeleted(true);
filterDeleted = true;
}
}
}
});
ViewCompat.setElevation(snackbar.getView(), 0f);
snackbar.setAnchorView(buttonsContainer);
UiUtilities.setupSnackbar(snackbar, nightMode);
snackbar.show();
int pos = holder.getAdapterPosition();
if (listener != null && pos != RecyclerView.NO_POSITION) {
listener.onDeleteClicked(pos);
}
}
});
} else if (holder instanceof SpaceViewHolder) {
@ -864,7 +872,9 @@ public class RearrangePoiFiltersFragment extends DialogFragment implements Selec
void onDragOrSwipeEnded(RecyclerView.ViewHolder holder);
void onButtonClicked(int view);
void onButtonClicked(int position);
void onDeleteClicked(int position);
}
public interface OnApplyPoiFiltersState {