package net.osmand.plus.mapcontextmenu.other; import android.os.Build; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; import net.osmand.AndroidUtils; import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.helpers.AndroidUiHelper; public class TrackDetailsMenuFragment extends Fragment { public static final String TAG = "TrackDetailsMenuFragment"; private TrackDetailsMenu menu; private View mainView; private MapActivity getMapActivity() { return (MapActivity) getActivity(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { MapActivity mapActivity = getMapActivity(); menu = mapActivity.getMapLayers().getMapControlsLayer().getTrackDetailsMenu(); View view = inflater.inflate(R.layout.track_details, container, false); if (menu == null || menu.getGpxItem() == null) { return view; } mainView = view.findViewById(R.id.main_view); TextView topBarTitle = (TextView) mainView.findViewById(R.id.top_bar_title); if (topBarTitle != null) { if (menu.getGpxItem().group != null) { topBarTitle.setText(menu.getGpxItem().group.getGpxName()); } else { topBarTitle.setText(mapActivity.getString(R.string.rendering_category_details)); } } ImageButton backButton = (ImageButton) mainView.findViewById(R.id.top_bar_back_button); ImageButton closeButton = (ImageButton) mainView.findViewById(R.id.top_bar_close_button); if (backButton != null) { backButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getActivity().onBackPressed(); } }); } if (closeButton != null) { closeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dismiss(); } }); } updateInfo(); ViewTreeObserver vto = mainView.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { ViewTreeObserver obs = mainView.getViewTreeObserver(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { obs.removeOnGlobalLayoutListener(this); } else { obs.removeGlobalOnLayoutListener(this); } if (getMapActivity() != null) { updateInfo(); } } }); return view; } @Override public void onResume() { super.onResume(); if (menu == null || menu.getGpxItem() == null) { dismiss(); } } @Override public void onDestroyView() { super.onDestroyView(); if (menu != null) { menu.onDismiss(); } } public int getHeight() { if (mainView != null) { return mainView.getHeight(); } else { return 0; } } public int getWidth() { if (mainView != null) { return mainView.getWidth(); } else { return 0; } } public void updateInfo() { menu.updateInfo(mainView); applyDayNightMode(); } public void show(MapActivity mapActivity) { mapActivity.getSupportFragmentManager().beginTransaction() .add(R.id.routeMenuContainer, this, TAG) .addToBackStack(TAG) .commitAllowingStateLoss(); } public void dismiss() { FragmentActivity activity = getActivity(); if (activity != null) { try { activity.getSupportFragmentManager().popBackStackImmediate(TAG, FragmentManager.POP_BACK_STACK_INCLUSIVE); } catch (Exception e) { // ignore } } } public void applyDayNightMode() { MapActivity ctx = getMapActivity(); boolean portraitMode = AndroidUiHelper.isOrientationPortrait(ctx); boolean landscapeLayout = !portraitMode; boolean nightMode = ctx.getMyApplication().getDaynightHelper().isNightModeForMapControls(); if (!landscapeLayout) { AndroidUtils.setBackground(ctx, mainView, nightMode, R.drawable.bg_bottom_menu_light, R.drawable.bg_bottom_menu_dark); } else { AndroidUtils.setBackground(ctx, mainView, nightMode, R.drawable.bg_left_menu_light, R.drawable.bg_left_menu_dark); } AndroidUtils.setTextPrimaryColor(ctx, (TextView) mainView.findViewById(R.id.y_axis_title), nightMode); AndroidUtils.setTextPrimaryColor(ctx, (TextView) mainView.findViewById(R.id.x_axis_title), nightMode); ImageView yAxisArrow = (ImageView) mainView.findViewById(R.id.y_axis_arrow); ImageView xAxisArrow = (ImageView) mainView.findViewById(R.id.x_axis_arrow); yAxisArrow.setImageDrawable(ctx.getMyApplication().getIconsCache().getThemedIcon(R.drawable.ic_action_arrow_drop_down)); xAxisArrow.setImageDrawable(ctx.getMyApplication().getIconsCache().getThemedIcon(R.drawable.ic_action_arrow_drop_down)); ImageButton backButton = (ImageButton) mainView.findViewById(R.id.top_bar_back_button); if (backButton != null) { backButton.setImageDrawable(ctx.getMyApplication().getIconsCache().getIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha, R.color.color_white)); } } public static boolean showInstance(final MapActivity mapActivity) { try { boolean portrait = mapActivity.findViewById(R.id.bottomFragmentContainer) != null; TrackDetailsMenuFragment fragment = new TrackDetailsMenuFragment(); mapActivity.getSupportFragmentManager().beginTransaction() .add(portrait ? R.id.bottomFragmentContainer : R.id.routeMenuContainer, fragment, TAG) .addToBackStack(TAG).commitAllowingStateLoss(); return true; } catch (RuntimeException e) { return false; } } }