bottom sheet fragment ui fixes

This commit is contained in:
madwasp79 2019-05-28 12:49:16 +03:00
parent d86c0c00cc
commit 88dc065a98
6 changed files with 114 additions and 72 deletions

View file

@ -91,6 +91,7 @@
</LinearLayout>
<View
android:id="@+id/divider_bottom"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_weight="2"

View file

@ -43,6 +43,7 @@ public abstract class MenuBottomSheetDialogFragment extends BottomSheetDialogFra
protected int themeRes;
private LinearLayout itemsContainer;
protected int dismissButtonStringRes = R.string.shared_string_cancel;
public void setUsedOnMap(boolean usedOnMap) {
this.usedOnMap = usedOnMap;
@ -245,7 +246,11 @@ public abstract class MenuBottomSheetDialogFragment extends BottomSheetDialogFra
@StringRes
protected int getDismissButtonTextId() {
return R.string.shared_string_cancel;
return dismissButtonStringRes;
}
protected void setDismissButtonTextId(int stringRes) {
dismissButtonStringRes = stringRes;
}
protected void onDismissButtonClickAction() {

View file

@ -18,6 +18,7 @@ import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import net.osmand.plus.ApplicationMode;
@ -44,10 +45,8 @@ public class AppModesBottomSheetDialogFragment extends MenuBottomSheetDialogFrag
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
allModes.addAll(ApplicationMode.allPossibleValues());
allModes.remove(ApplicationMode.DEFAULT);
selectedModes.addAll(ApplicationMode.values(getMyApplication()));
selectedModes.remove(ApplicationMode.DEFAULT);
setDismissButtonTextId(R.string.shared_string_close);
getData();
}
@Nullable
@ -56,6 +55,7 @@ public class AppModesBottomSheetDialogFragment extends MenuBottomSheetDialogFrag
Bundle savedInstanceState) {
themeRes = nightMode ? R.style.OsmandDarkTheme : R.style.OsmandLightTheme;
adapter = new ProfileMenuAdapter(allModes, selectedModes, getMyApplication(), listener);
adapter.setBottomSheetMode(true);
recyclerView = new RecyclerView(getContext());
recyclerView = (RecyclerView) View
.inflate(new ContextThemeWrapper(getContext(), themeRes), R.layout.recyclerview, null);
@ -96,8 +96,19 @@ public class AppModesBottomSheetDialogFragment extends MenuBottomSheetDialogFrag
startActivity(intent);
}
};
adapter.setListener(listener);
allModes = ApplicationMode.allPossibleValues();
allModes.remove(ApplicationMode.DEFAULT);
adapter.updateItemsList(allModes, new LinkedHashSet<>(ApplicationMode.values(getMyApplication())));
setupHeightAndBackground(getView());
}
private void getData() {
allModes.addAll(ApplicationMode.allPossibleValues());
allModes.remove(ApplicationMode.DEFAULT);
selectedModes.addAll(ApplicationMode.values(getMyApplication()));
selectedModes.remove(ApplicationMode.DEFAULT);
}
@Override

View file

@ -385,25 +385,30 @@ public class EditProfileFragment extends BaseOsmAndFragment {
}
});
saveButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (saveNewProfile()) {
activateMode(mode);
getActivity().onBackPressed();
if (!isNew && !isUserProfile) {
saveButtonSV.setEnabled(false);
saveButton.setEnabled(false);
} else {
saveButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (saveNewProfile()) {
activateMode(mode);
getActivity().onBackPressed();
}
}
}
});
});
saveButtonSV.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (saveNewProfile()) {
activateMode(mode);
getActivity().onBackPressed();
saveButtonSV.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (saveNewProfile()) {
activateMode(mode);
getActivity().onBackPressed();
}
}
}
});
});
}
view.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override

View file

@ -26,9 +26,12 @@ public class ProfileMenuAdapter extends RecyclerView.Adapter<ProfileViewHolder>
private Set<ApplicationMode> selectedItems;
private ProfileListener listener;
private final OsmandApplication app;
@ColorRes private int selectedIconColorRes;
@ColorRes
private int selectedIconColorRes;
private boolean isBottomSheet = false;
public ProfileMenuAdapter(List<ApplicationMode> items, Set<ApplicationMode> selectedItems, OsmandApplication app, ProfileListener listener) {
public ProfileMenuAdapter(List<ApplicationMode> items, Set<ApplicationMode> selectedItems,
OsmandApplication app, ProfileListener listener) {
this.items = items;
this.listener = listener;
this.app = app;
@ -47,6 +50,10 @@ public class ProfileMenuAdapter extends RecyclerView.Adapter<ProfileViewHolder>
notifyDataSetChanged();
}
public void setBottomSheetMode(boolean isBottomSheet) {
this.isBottomSheet = isBottomSheet;
}
public void setListener(ProfileListener listener) {
this.listener = listener;
}
@ -70,10 +77,18 @@ public class ProfileMenuAdapter extends RecyclerView.Adapter<ProfileViewHolder>
@Override
public void onBindViewHolder(@NonNull final ProfileViewHolder holder, int position) {
final ApplicationMode item = items.get(position);
if (isBottomSheet) {
holder.divider.setBackgroundColor(isNightMode(app)
? app.getResources().getColor(R.color.divider_dark)
: app.getResources().getColor(R.color.divider_light));
}
if (item.getParent() != null) {
holder.title.setText(item.getUserProfileName());
holder.descr.setText(String.format(app.getString(R.string.profile_type_descr_string),
Algorithms.capitalizeFirstLetterAndLowercase(item.getParent().getStringKey().replace("_", " "))));
Algorithms.capitalizeFirstLetterAndLowercase(
item.getParent().getStringKey().replace("_", " "))));
} else {
holder.title.setText(app.getResources().getString(item.getStringResource()));
holder.descr.setText(R.string.profile_type_base_string);
@ -97,7 +112,8 @@ public class ProfileMenuAdapter extends RecyclerView.Adapter<ProfileViewHolder>
if (selectedItems.contains(item)) {
holder.aSwitch.setChecked(true);
holder.icon.setImageDrawable(app.getUIUtilities().getIcon(iconRes, selectedIconColorRes));
holder.icon
.setImageDrawable(app.getUIUtilities().getIcon(iconRes, selectedIconColorRes));
} else {
holder.aSwitch.setChecked(false);
holder.icon.setImageDrawable(app.getUIUtilities().getIcon(iconRes, R.color.icon_color));
@ -108,18 +124,20 @@ public class ProfileMenuAdapter extends RecyclerView.Adapter<ProfileViewHolder>
public void onClick(View v) {
listener.changeProfileStatus(item, holder.aSwitch.isChecked());
if (selectedItems.contains(item)) {
holder.icon.setImageDrawable(app.getUIUtilities().getIcon(item.getSmallIconDark(), selectedIconColorRes));
holder.icon.setImageDrawable(app.getUIUtilities()
.getIcon(item.getSmallIconDark(), selectedIconColorRes));
} else {
holder.icon.setImageDrawable(app.getUIUtilities().getIcon(item.getSmallIconDark(), R.color.icon_color));
holder.icon.setImageDrawable(
app.getUIUtilities().getIcon(item.getSmallIconDark(), R.color.icon_color));
}
}
});
holder.profileOptions.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
listener.editProfile(item);
}
});
@Override
public void onClick(View v) {
listener.editProfile(item);
}
});
}
@Override
@ -132,10 +150,12 @@ public class ProfileMenuAdapter extends RecyclerView.Adapter<ProfileViewHolder>
}
class ProfileViewHolder extends RecyclerView.ViewHolder {
TextView title, descr;
SwitchCompat aSwitch;
ImageView icon;
LinearLayout profileOptions;
View divider;
ProfileViewHolder(View itemView) {
super(itemView);
@ -144,11 +164,14 @@ public class ProfileMenuAdapter extends RecyclerView.Adapter<ProfileViewHolder>
aSwitch = itemView.findViewById(R.id.compound_button);
icon = itemView.findViewById(R.id.icon);
profileOptions = itemView.findViewById(R.id.profile_settings);
divider = itemView.findViewById(R.id.divider_bottom);
}
}
public interface ProfileListener {
void changeProfileStatus(ApplicationMode item, boolean isSelected);
void editProfile(ApplicationMode item);
}
}

View file

@ -733,7 +733,7 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener
@Override
public void onClick(View v) {
showProfileBottomSheetDialog(mapActivity);
showProfileBottomSheetDialog();
//todo clear (+ method's body) before final commit
//availableProfileDialog();
}
@ -750,7 +750,7 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener
updateApplicationModesOptions();
}
private void showProfileBottomSheetDialog(Activity activity) {
private void showProfileBottomSheetDialog() {
final AppModesBottomSheetDialogFragment fragment = new AppModesBottomSheetDialogFragment();
fragment.setUpdateMapRouteMenuListener(new UpdateMapRouteMenuListener() {
@Override
@ -760,45 +760,42 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener
});
getMapActivity().getSupportFragmentManager().beginTransaction()
.add(fragment, "app_profile_settings").commitAllowingStateLoss();
}
private void availableProfileDialog() {
MapActivity mapActivity = getMapActivity();
if (mapActivity != null) {
AlertDialog.Builder b = new AlertDialog.Builder(mapActivity);
final OsmandSettings settings = mapActivity.getMyApplication().getSettings();
final List<ApplicationMode> modes = ApplicationMode.allPossibleValues();
modes.remove(ApplicationMode.DEFAULT);
final Set<ApplicationMode> selected = new LinkedHashSet<>(ApplicationMode.values(mapActivity.getMyApplication()));
selected.remove(ApplicationMode.DEFAULT);
View v = AppModeDialog.prepareAppModeView(mapActivity, modes, selected, null, false, true, false,
new OnClickListener() {
@Override
public void onClick(View v) {
StringBuilder vls = new StringBuilder(ApplicationMode.DEFAULT.getStringKey() + ",");
for (ApplicationMode mode : modes) {
if (selected.contains(mode)) {
vls.append(mode.getStringKey()).append(",");
}
}
settings.AVAILABLE_APP_MODES.set(vls.toString());
}
});
b.setTitle(R.string.profile_settings);
b.setPositiveButton(R.string.shared_string_ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
updateApplicationModes();
}
});
b.setView(v);
b.show();
}
}
// private void availableProfileDialog() {
// MapActivity mapActivity = getMapActivity();
// if (mapActivity != null) {
// AlertDialog.Builder b = new AlertDialog.Builder(mapActivity);
// final OsmandSettings settings = mapActivity.getMyApplication().getSettings();
// final List<ApplicationMode> modes = ApplicationMode.allPossibleValues();
// modes.remove(ApplicationMode.DEFAULT);
// final Set<ApplicationMode> selected = new LinkedHashSet<>(ApplicationMode.values(mapActivity.getMyApplication()));
// selected.remove(ApplicationMode.DEFAULT);
// View v = AppModeDialog.prepareAppModeView(mapActivity, modes, selected, null, false, true, false,
// new OnClickListener() {
//
// @Override
// public void onClick(View v) {
// StringBuilder vls = new StringBuilder(ApplicationMode.DEFAULT.getStringKey() + ",");
// for (ApplicationMode mode : modes) {
// if (selected.contains(mode)) {
// vls.append(mode.getStringKey()).append(",");
// }
// }
// settings.AVAILABLE_APP_MODES.set(vls.toString());
// }
// });
// b.setTitle(R.string.profile_settings);
// b.setPositiveButton(R.string.shared_string_ok, new DialogInterface.OnClickListener() {
// @Override
// public void onClick(DialogInterface dialog, int which) {
// updateApplicationModes();
// }
// });
// b.setView(v);
// b.show();
// }
// }
private void updateApplicationMode(ApplicationMode mode, ApplicationMode next) {
MapActivity mapActivity = getMapActivity();