Merge pull request #8805 from osmandapp/configure_menu_items_fix
Configure menu items fix
This commit is contained in:
commit
007b33207f
2 changed files with 44 additions and 29 deletions
|
@ -88,6 +88,7 @@ import java.util.List;
|
|||
|
||||
import static net.osmand.aidlapi.OsmAndCustomizationConstants.MAP_CONTEXT_MENU_MORE_ID;
|
||||
import static net.osmand.plus.mapcontextmenu.MenuBuilder.SHADOW_HEIGHT_TOP_DP;
|
||||
import static net.osmand.plus.settings.ConfigureMenuItemsFragment.MAIN_BUTTONS_QUANTITY;
|
||||
|
||||
|
||||
public class MapContextMenuFragment extends BaseOsmAndFragment implements DownloadEvents {
|
||||
|
@ -566,11 +567,16 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
|
|||
// Action buttons
|
||||
// TODO refactor section
|
||||
ContextMenuAdapter adapter = menu.getActionsContextMenuAdapter(false);
|
||||
List<ContextMenuItem> items = adapter.getItems();
|
||||
List<ContextMenuItem> items = new ArrayList<>();
|
||||
for (ContextMenuItem item : adapter.getItems()) {
|
||||
if (!item.isHidden()) {
|
||||
items.add(item);
|
||||
}
|
||||
}
|
||||
ContextMenuAdapter mainAdapter = new ContextMenuAdapter(requireMyApplication());
|
||||
ContextMenuAdapter additionalAdapter = new ContextMenuAdapter(requireMyApplication());
|
||||
for (int i = 0; i < items.size(); i++) {
|
||||
if (i < 4) {
|
||||
if (i < MAIN_BUTTONS_QUANTITY) {
|
||||
mainAdapter.addItem(items.get(i));
|
||||
} else {
|
||||
additionalAdapter.addItem(items.get(i));
|
||||
|
@ -585,7 +591,8 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
|
|||
ContextMenuItemClickListener mainListener = menu.getContextMenuItemClickListener(mainAdapter);
|
||||
ContextMenuItemClickListener additionalListener = menu.getContextMenuItemClickListener(additionalAdapter);
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
int mainButtonsQuantity = Math.min(MAIN_BUTTONS_QUANTITY, items.size());
|
||||
for (int i = 0; i < mainButtonsQuantity; i++) {
|
||||
buttons.addView(getActionView(items.get(i), i, mainAdapter, additionalAdapter, mainListener, additionalListener), params);
|
||||
}
|
||||
buttons.setGravity(Gravity.CENTER);
|
||||
|
@ -648,11 +655,11 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
|
|||
}
|
||||
|
||||
private View getActionView(ContextMenuItem contextMenuItem,
|
||||
final int position,
|
||||
final ContextMenuAdapter mainAdapter,
|
||||
final ContextMenuAdapter additionalAdapter,
|
||||
final ContextMenuItemClickListener mainListener,
|
||||
final ContextMenuItemClickListener additionalListener) {
|
||||
final int position,
|
||||
final ContextMenuAdapter mainAdapter,
|
||||
final ContextMenuAdapter additionalAdapter,
|
||||
final ContextMenuItemClickListener mainListener,
|
||||
final ContextMenuItemClickListener additionalListener) {
|
||||
UiUtilities uiUtilities = requireMyApplication().getUIUtilities();
|
||||
LayoutInflater inflater = UiUtilities.getInflater(getMyApplication(), nightMode);
|
||||
View view = inflater.inflate(R.layout.context_menu_action_item, null);
|
||||
|
|
|
@ -14,13 +14,14 @@ import android.widget.TextView;
|
|||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import androidx.recyclerview.widget.ItemTouchHelper;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.google.android.material.appbar.AppBarLayout;
|
||||
|
||||
import net.osmand.AndroidUtils;
|
||||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.plus.ApplicationMode;
|
||||
|
@ -68,6 +69,7 @@ public class ConfigureMenuItemsFragment extends BaseOsmAndFragment
|
|||
private static final String ITEMS_ORDER_KEY = "items_order_key";
|
||||
private static final String HIDDEN_ITEMS_KEY = "hidden_items_key";
|
||||
private static final String CONFIGURE_MENU_ITEMS_TAG = "configure_menu_items_tag";
|
||||
private static final String IS_CHANGED_KEY = "is_changed_key";
|
||||
private RearrangeMenuItemsAdapter rearrangeAdapter;
|
||||
private HashMap<String, Integer> menuItemsOrder;
|
||||
private ContextMenuAdapter contextMenuAdapter;
|
||||
|
@ -87,6 +89,7 @@ public class ConfigureMenuItemsFragment extends BaseOsmAndFragment
|
|||
outState.putSerializable(ITEMS_ORDER_KEY, menuItemsOrder);
|
||||
outState.putSerializable(ITEM_TYPE_KEY, screenType);
|
||||
outState.putString(APP_MODE_KEY, appMode.getStringKey());
|
||||
outState.putBoolean(IS_CHANGED_KEY, isChanged);
|
||||
}
|
||||
|
||||
public static ConfigureMenuItemsFragment showInstance(
|
||||
|
@ -126,15 +129,12 @@ public class ConfigureMenuItemsFragment extends BaseOsmAndFragment
|
|||
app = requireMyApplication();
|
||||
nightMode = !app.getSettings().isLightContent();
|
||||
mInflater = UiUtilities.getInflater(app, nightMode);
|
||||
instantiateContextMenuAdapter();
|
||||
if (savedInstanceState != null
|
||||
&& savedInstanceState.containsKey(ITEM_TYPE_KEY)
|
||||
&& savedInstanceState.containsKey(HIDDEN_ITEMS_KEY)
|
||||
&& savedInstanceState.containsKey(ITEMS_ORDER_KEY)) {
|
||||
if (savedInstanceState != null) {
|
||||
appMode = ApplicationMode.valueOfStringKey(savedInstanceState.getString(APP_MODE_KEY), null);
|
||||
screenType = (ScreenType) savedInstanceState.getSerializable(ITEM_TYPE_KEY);
|
||||
hiddenMenuItems = savedInstanceState.getStringArrayList(HIDDEN_ITEMS_KEY);
|
||||
menuItemsOrder = (HashMap<String, Integer>) savedInstanceState.getSerializable(ITEMS_ORDER_KEY);
|
||||
isChanged = savedInstanceState.getBoolean(IS_CHANGED_KEY);
|
||||
} else {
|
||||
hiddenMenuItems = new ArrayList<>(getSettingForScreen(app, screenType).getModeValue(appMode).getHiddenIds());
|
||||
menuItemsOrder = new HashMap<>();
|
||||
|
@ -143,6 +143,14 @@ public class ConfigureMenuItemsFragment extends BaseOsmAndFragment
|
|||
menuItemsOrder.put(orderIds.get(i), i);
|
||||
}
|
||||
}
|
||||
instantiateContextMenuAdapter();
|
||||
if (menuItemsOrder.isEmpty()) {
|
||||
List<ContextMenuItem> defItems = contextMenuAdapter.getDefaultItems();
|
||||
initDefaultOrders(defItems);
|
||||
for (int i = 0; i < defItems.size(); i++) {
|
||||
menuItemsOrder.put(defItems.get(i).getId(), i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void instantiateContextMenuAdapter() {
|
||||
|
@ -169,11 +177,10 @@ public class ConfigureMenuItemsFragment extends BaseOsmAndFragment
|
|||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable final ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
View root = mInflater.inflate(R.layout.edit_arrangement_list_fragment, container, false);
|
||||
Toolbar toolbar = root.findViewById(R.id.toolbar);
|
||||
TextView toolbarTitle = root.findViewById(R.id.toolbar_title);
|
||||
ImageButton toolbarButton = root.findViewById(R.id.close_button);
|
||||
RecyclerView recyclerView = root.findViewById(R.id.profiles_list);
|
||||
recyclerView.setPadding(0, 0, 0, (int) app.getResources().getDimension(R.dimen.dialog_button_ex_min_width));
|
||||
AppBarLayout appbar = root.findViewById(R.id.appbar);
|
||||
View toolbar = mInflater.inflate(R.layout.global_preference_toolbar, container, false);
|
||||
TextView toolbarTitle = toolbar.findViewById(R.id.toolbar_title);
|
||||
ImageButton toolbarButton = toolbar.findViewById(R.id.close_button);
|
||||
toolbar.setBackgroundColor(nightMode
|
||||
? getResources().getColor(R.color.list_background_color_dark)
|
||||
: getResources().getColor(R.color.list_background_color_light));
|
||||
|
@ -188,8 +195,9 @@ public class ConfigureMenuItemsFragment extends BaseOsmAndFragment
|
|||
exitFragment();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
appbar.addView(toolbar);
|
||||
RecyclerView recyclerView = root.findViewById(R.id.profiles_list);
|
||||
recyclerView.setPadding(0, 0, 0, (int) app.getResources().getDimension(R.dimen.dialog_button_ex_min_width));
|
||||
rearrangeAdapter = new RearrangeMenuItemsAdapter(app, getAdapterItems());
|
||||
recyclerView.setLayoutManager(new LinearLayoutManager(app));
|
||||
final ItemTouchHelper touchHelper = new ItemTouchHelper(new ReorderItemTouchHelperCallback(rearrangeAdapter));
|
||||
|
@ -300,16 +308,16 @@ public class ConfigureMenuItemsFragment extends BaseOsmAndFragment
|
|||
List<RearrangeMenuAdapterItem> visible = getItemsForRearrangeAdapter(hiddenMenuItems, wasReset ? null : menuItemsOrder, false);
|
||||
List<RearrangeMenuAdapterItem> hiddenItems = getItemsForRearrangeAdapter(hiddenMenuItems, wasReset ? null : menuItemsOrder, true);
|
||||
if (screenType == ScreenType.CONTEXT_MENU_ACTIONS) {
|
||||
int buttonMoreIndex = MAIN_BUTTONS_QUANTITY - 1;
|
||||
for (int i = 0; i < visible.size(); i++) {
|
||||
ContextMenuItem value = (ContextMenuItem) visible.get(i).getValue();
|
||||
if (value.getId() != null && value.getId().equals(MAP_CONTEXT_MENU_MORE_ID)) {
|
||||
int buttonMoreIndex = MAIN_BUTTONS_QUANTITY - 1;
|
||||
if (i > buttonMoreIndex) {
|
||||
RearrangeMenuAdapterItem third = visible.get(buttonMoreIndex);
|
||||
visible.set(buttonMoreIndex, visible.get(i));
|
||||
menuItemsOrder.put(((ContextMenuItem) third.getValue()).getId(), i);
|
||||
menuItemsOrder.put(((ContextMenuItem) visible.get(i).getValue()).getId(), buttonMoreIndex);
|
||||
}
|
||||
if (value.getId() != null && value.getId().equals(MAP_CONTEXT_MENU_MORE_ID) && i > buttonMoreIndex) {
|
||||
RearrangeMenuAdapterItem third = visible.get(buttonMoreIndex);
|
||||
visible.set(buttonMoreIndex, visible.get(i));
|
||||
visible.set(i, third);
|
||||
value.setOrder(buttonMoreIndex);
|
||||
((ContextMenuItem) third.getValue()).setOrder(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue