use of net.osmand.plus.widgets.popup.PopUpMenuItem in project Osmand by osmandapp.
the class SelectFileBottomSheet method createMenuItems.
@Override
public void createMenuItems(final Bundle savedInstanceState) {
final int themeRes = nightMode ? R.style.OsmandDarkTheme : R.style.OsmandLightTheme;
Context context = requireContext();
final OsmandApplication app = requiredMyApplication();
mainView = View.inflate(new ContextThemeWrapper(context, themeRes), R.layout.bottom_sheet_plan_route_select_file, null);
TextView titleView = mainView.findViewById(R.id.title);
titleView.setText(fragmentMode.title);
final TextView descriptionView = mainView.findViewById(R.id.description);
descriptionView.setText(fragmentMode.description);
final RecyclerView filesRecyclerView = mainView.findViewById(R.id.gpx_track_list);
filesRecyclerView.setLayoutManager(new LinearLayoutManager(context));
if (fragmentMode == Mode.OPEN_TRACK) {
titleView.setText(AndroidUtils.addColon(app, fragmentMode.title));
updateDescription(descriptionView);
}
final ImageButton sortButton = mainView.findViewById(R.id.sort_button);
int backgroundColorId = ColorUtilities.getInactiveButtonsAndLinksColorId(nightMode);
Drawable background = app.getUIUtilities().getIcon(R.drawable.bg_dash_line_dark, backgroundColorId);
AndroidUtils.setBackground(sortButton, background);
sortButton.setImageResource(sortByMode.getIconId());
sortButton.setVisibility(View.VISIBLE);
sortButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final List<PopUpMenuItem> items = new ArrayList<>();
for (final TracksSortByMode mode : TracksSortByMode.values()) {
items.add(new PopUpMenuItem.Builder(app).setTitleId(mode.getNameId()).setIcon(app.getUIUtilities().getThemedIcon(mode.getIconId())).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sortByMode = mode;
sortButton.setImageResource(mode.getIconId());
updateDescription(descriptionView);
sortFolderList();
folderSelector.setItems(getFolderChips());
folderSelector.notifyDataSetChanged();
sortFileList();
adapter.notifyDataSetChanged();
}
}).setSelected(sortByMode == mode).create());
}
new PopUpMenuHelper.Builder(v, items, nightMode).show();
}
});
final File gpxDir = app.getAppPath(IndexConstants.GPX_INDEX_DIR);
allFilesFolder = context.getString(R.string.shared_string_all);
if (savedInstanceState == null) {
selectedFolder = allFilesFolder;
}
final List<GPXInfo> allGpxList = getSortedGPXFilesInfo(gpxDir, null, false);
currentlyRecording = new GPXInfo(getString(R.string.shared_string_currently_recording_track), 0, 0);
if (isShowCurrentGpx()) {
allGpxList.add(0, currentlyRecording);
}
gpxInfoMap = new HashMap<>();
gpxInfoMap.put(allFilesFolder, allGpxList);
for (GPXInfo gpxInfo : allGpxList) {
String folderName = getFolderName(gpxInfo);
List<GPXInfo> gpxList = gpxInfoMap.get(folderName);
if (gpxList == null) {
gpxList = new ArrayList<>();
gpxInfoMap.put(folderName, gpxList);
}
gpxList.add(gpxInfo);
}
adapter = new GpxTrackAdapter(requireContext(), allGpxList, isShowCurrentGpx(), showFoldersName());
adapter.setAdapterListener(new OnItemClickListener() {
@Override
public void onItemClick(int position) {
List<GPXInfo> gpxList = adapter.getGpxInfoList();
if (position != RecyclerView.NO_POSITION && position < gpxList.size()) {
String fileName;
if (isShowCurrentGpx() && position == 0) {
fileName = null;
} else {
fileName = gpxList.get(position).getFileName();
}
if (listener != null) {
listener.selectFileOnCLick(fileName);
}
}
dismiss();
}
});
filesRecyclerView.setAdapter(adapter);
folderSelector = mainView.findViewById(R.id.folder_list);
folders = new ArrayList<>();
collectDirs(gpxDir, folders);
sortFolderList();
folderSelector.setItems(getFolderChips());
ChipItem selected = folderSelector.getChipById(selectedFolder);
folderSelector.setSelected(selected);
folderSelector.setOnSelectChipListener(chip -> {
selectedFolder = chip.id;
folderSelector.smoothScrollTo(chip);
updateFileList();
return true;
});
items.add(new BaseBottomSheetItem.Builder().setCustomView(mainView).create());
updateFileList();
}
Aggregations