fix bottomsheet screens

This commit is contained in:
madwasp79 2019-05-21 19:08:08 +03:00
parent a560dff59d
commit 7bce4d7ffa
5 changed files with 200 additions and 40 deletions

View file

@ -76,7 +76,7 @@
android:maxLines="1" android:maxLines="1"
android:textSize="18sp" android:textSize="18sp"
android:textColor="?attr/main_font_color_basic" android:textColor="?attr/main_font_color_basic"
tools:text="Item additional desription"/> tools:text="Item additional description"/>
</LinearLayout> </LinearLayout>
@ -339,7 +339,6 @@
android:orientation="vertical"> android:orientation="vertical">
<TextView <TextView
android:textStyle="bold"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Configure map" android:text="Configure map"
@ -388,7 +387,6 @@
android:orientation="vertical"> android:orientation="vertical">
<TextView <TextView
android:textStyle="bold"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Configure screen" android:text="Configure screen"
@ -439,7 +437,6 @@
android:orientation="vertical"> android:orientation="vertical">
<TextView <TextView
android:textStyle="bold"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Navigation settings" android:text="Navigation settings"

View file

@ -50,6 +50,7 @@ import net.osmand.plus.activities.SettingsNavigationActivity;
import net.osmand.plus.base.BaseOsmAndFragment; import net.osmand.plus.base.BaseOsmAndFragment;
import net.osmand.plus.profiles.ProfileBottomSheetDialogFragment.ProfileTypeDialogListener; import net.osmand.plus.profiles.ProfileBottomSheetDialogFragment.ProfileTypeDialogListener;
import net.osmand.plus.profiles.SelectIconBottomSheetDialogFragment.IconIdListener; import net.osmand.plus.profiles.SelectIconBottomSheetDialogFragment.IconIdListener;
import net.osmand.plus.profiles.SelectProfileBottomSheetDialogFragment.SelectProfileListener;
import net.osmand.plus.routing.RouteProvider.RouteService; import net.osmand.plus.routing.RouteProvider.RouteService;
import net.osmand.plus.widgets.OsmandTextFieldBoxes; import net.osmand.plus.widgets.OsmandTextFieldBoxes;
import net.osmand.router.GeneralRouter; import net.osmand.router.GeneralRouter;
@ -79,9 +80,9 @@ public class EditProfileFragment extends BaseOsmAndFragment {
private boolean isUserProfile = false; private boolean isUserProfile = false;
private boolean isDataChanged = false; private boolean isDataChanged = false;
private ProfileTypeDialogListener navTypeListener = null; private SelectProfileListener navTypeListener = null;
private IconIdListener iconIdListener = null; private IconIdListener iconIdListener = null;
private ProfileTypeDialogListener baseTypeListener = null; private SelectProfileListener baseTypeListener = null;
private ImageView profileIcon; private ImageView profileIcon;
private LinearLayout profileIconBtn; private LinearLayout profileIconBtn;
@ -170,11 +171,11 @@ public class EditProfileFragment extends BaseOsmAndFragment {
} }
String title = "New Profile"; String title = "New Profile";
int startIconId = R.drawable.map_world_globe_dark; int startIconId = R.drawable.map_world_globe_dark;
if (isNew) { if (isNew) {
isDataChanged = true; isDataChanged = true;
title = String
.format("Custom %s", getResources().getString(profile.parent.getStringResource()));
startIconId = profile.parent.getSmallIconDark(); startIconId = profile.parent.getSmallIconDark();
profile.iconId = startIconId; profile.iconId = startIconId;
} else if (isUserProfile) { } else if (isUserProfile) {
@ -188,8 +189,8 @@ public class EditProfileFragment extends BaseOsmAndFragment {
startIconId = profile.iconId; startIconId = profile.iconId;
clickBlockLayout.setClickable(true); clickBlockLayout.setClickable(true);
} }
profile.userProfileTitle = title; profile.userProfileTitle = title;
if (profile.parent != null) { if (profile.parent != null) {
setupBaseProfileView(profile.parent.getStringKey()); setupBaseProfileView(profile.parent.getStringKey());
} else if (profile.key != -1) { } else if (profile.key != -1) {
@ -201,7 +202,8 @@ public class EditProfileFragment extends BaseOsmAndFragment {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if (isUserProfile || isNew) { if (isUserProfile || isNew) {
final ProfileBottomSheetDialogFragment dialog = new ProfileBottomSheetDialogFragment(); //final ProfileBottomSheetDialogFragment dialog = new ProfileBottomSheetDialogFragment();
final SelectProfileBottomSheetDialogFragment dialog = new SelectProfileBottomSheetDialogFragment();
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
if (profile.parent != null) { if (profile.parent != null) {
bundle.putString(SELECTED_KEY, profile.parent.getStringKey()); bundle.putString(SELECTED_KEY, profile.parent.getStringKey());
@ -280,7 +282,8 @@ public class EditProfileFragment extends BaseOsmAndFragment {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if (isNew || isUserProfile) { if (isNew || isUserProfile) {
ProfileBottomSheetDialogFragment fragment = new ProfileBottomSheetDialogFragment(); //ProfileBottomSheetDialogFragment fragment = new ProfileBottomSheetDialogFragment();
final SelectProfileBottomSheetDialogFragment fragment = new SelectProfileBottomSheetDialogFragment();
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
if (profile.routingProfileDataObject != null) { if (profile.routingProfileDataObject != null) {
bundle.putString(SELECTED_KEY, bundle.putString(SELECTED_KEY,
@ -430,7 +433,7 @@ public class EditProfileFragment extends BaseOsmAndFragment {
@Override @Override
public void onResume() { public void onResume() {
baseTypeListener = new ProfileTypeDialogListener() { baseTypeListener = new SelectProfileListener() {
@Override @Override
public void onSelectedType(int pos) { public void onSelectedType(int pos) {
String key = SettingsProfileFragment.getBaseProfiles(getMyApplication()).get(pos) String key = SettingsProfileFragment.getBaseProfiles(getMyApplication()).get(pos)
@ -440,7 +443,7 @@ public class EditProfileFragment extends BaseOsmAndFragment {
} }
}; };
navTypeListener = new ProfileTypeDialogListener() { navTypeListener = new SelectProfileListener() {
@Override @Override
public void onSelectedType(int pos) { public void onSelectedType(int pos) {
updateRoutingProfile(pos); updateRoutingProfile(pos);
@ -477,9 +480,9 @@ public class EditProfileFragment extends BaseOsmAndFragment {
return iconIdListener; return iconIdListener;
} }
ProfileTypeDialogListener getBaseProfileListener() { SelectProfileListener getBaseProfileListener() {
if (baseTypeListener == null) { if (baseTypeListener == null) {
baseTypeListener = new ProfileTypeDialogListener() { baseTypeListener = new SelectProfileListener() {
@Override @Override
public void onSelectedType(int pos) { public void onSelectedType(int pos) {
String key = SettingsProfileFragment.getBaseProfiles(getMyApplication()) String key = SettingsProfileFragment.getBaseProfiles(getMyApplication())
@ -492,9 +495,9 @@ public class EditProfileFragment extends BaseOsmAndFragment {
return baseTypeListener; return baseTypeListener;
} }
ProfileTypeDialogListener getNavProfileListener() { SelectProfileListener getNavProfileListener() {
if (navTypeListener == null) { if (navTypeListener == null) {
navTypeListener = new ProfileTypeDialogListener() { navTypeListener = new SelectProfileListener() {
@Override @Override
public void onSelectedType(int pos) { public void onSelectedType(int pos) {
updateRoutingProfile(pos); updateRoutingProfile(pos);

View file

@ -199,15 +199,15 @@ public class ProfileBottomSheetDialogFragment extends BottomSheetDialogFragment
if (getActivity() != null && getActivity() instanceof EditProfileActivity) { if (getActivity() != null && getActivity() instanceof EditProfileActivity) {
EditProfileFragment f = (EditProfileFragment) getActivity().getSupportFragmentManager() EditProfileFragment f = (EditProfileFragment) getActivity().getSupportFragmentManager()
.findFragmentByTag(EditProfileActivity.EDIT_PROFILE_FRAGMENT_TAG); .findFragmentByTag(EditProfileActivity.EDIT_PROFILE_FRAGMENT_TAG);
if (type.equals(TYPE_APP_PROFILE)) { // if (type.equals(TYPE_APP_PROFILE)) {
listener = f.getBaseProfileListener(); // listener = f.getBaseProfileListener();
} else if (type.equals(TYPE_NAV_PROFILE)) { // } else if (type.equals(TYPE_NAV_PROFILE)) {
listener = f.getNavProfileListener(); // listener = f.getNavProfileListener();
} // }
} else if (getActivity() != null && getActivity() instanceof SettingsProfileActivity) { } else if (getActivity() != null && getActivity() instanceof SettingsProfileActivity) {
SettingsProfileFragment f = (SettingsProfileFragment) getActivity().getSupportFragmentManager() SettingsProfileFragment f = (SettingsProfileFragment) getActivity().getSupportFragmentManager()
.findFragmentByTag(SettingsProfileActivity.SETTINGS_PROFILE_FRAGMENT_TAG); .findFragmentByTag(SettingsProfileActivity.SETTINGS_PROFILE_FRAGMENT_TAG);
listener = f.getBaseProfileListener(); // listener = f.getBaseProfileListener();
} }
} }

View file

@ -0,0 +1,159 @@
package net.osmand.plus.profiles;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import java.util.ArrayList;
import java.util.List;
import net.osmand.PlatformUtil;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemWithCompoundButton;
import net.osmand.plus.base.bottomsheetmenu.simpleitems.LongDescriptionItem;
import net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleItem;
import org.apache.commons.logging.Log;
public class SelectProfileBottomSheetDialogFragment extends MenuBottomSheetDialogFragment {
private static final Log LOG = PlatformUtil
.getLog(SelectProfileBottomSheetDialogFragment.class);
public static final String TAG = "SelectProfileBottomSheetDialogFragment";
public final static String DIALOG_TYPE = "dialog_type";
public final static String TYPE_APP_PROFILE = "base_profiles";
public final static String TYPE_NAV_PROFILE = "routing_profiles";
public final static String SELECTED_KEY = "selected_base";
String type;
private SelectProfileListener listener;
private List<ProfileDataObject> profiles = new ArrayList<>();
private String selectedItemKey;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
OsmandApplication app = getMyApplication();
Bundle args = getArguments();
if (args != null && args.get(DIALOG_TYPE) != null) {
type = args.getString(DIALOG_TYPE);
selectedItemKey = args.getString(SELECTED_KEY, null);
if (type.equals(TYPE_NAV_PROFILE)) {
profiles.addAll(EditProfileFragment.getRoutingProfiles(app));
} else if (type.equals(TYPE_APP_PROFILE)) {
profiles.addAll(SettingsProfileFragment.getBaseProfiles(app));
} else {
LOG.error("Check intent data!");
dismiss();
}
}
}
@Override
public void createMenuItems(Bundle savedInstanceState) {
if (type.equals(TYPE_APP_PROFILE)) {
items.add(new TitleItem(getString(R.string.select_base_profile_dialog_title)));
items.add(new LongDescriptionItem(getString(R.string.select_base_profile_dialog_message)));
for (int i = 0; i < profiles.size(); i++) {
final int pos = i;
final ProfileDataObject profile = profiles.get(i);
final boolean isSelected = profile.getStringKey().equals(selectedItemKey);
final Drawable drawableIcon;
if (isSelected) {
drawableIcon = getMyApplication().getUIUtilities()
.getIcon(profile.getIconRes(), nightMode
? R.color.active_buttons_and_links_dark
: R.color.active_buttons_and_links_light);
} else {
drawableIcon = getMyApplication().getUIUtilities()
.getIcon(profile.getIconRes(), R.color.icon_color);
}
items.add(new BottomSheetItemWithCompoundButton.Builder()
.setChecked(isSelected)
.setDescription(profile.getDescription())
.setTitle(profile.getName())
.setIcon(drawableIcon)
.setLayoutId(R.layout.bottom_sheet_item_with_descr_and_checkbox_56dp)
.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (listener == null) {
getProfileListener();
}
if (listener != null) {
listener.onSelectedType(pos);
}
dismiss();
}
})
.create());
}
} else if (type.equals(TYPE_NAV_PROFILE)){
items.add(new TitleItem(getString(R.string.select_nav_profile_dialog_title)));
for (int i = 0; i < profiles.size(); i++) {
final int pos = i;
final ProfileDataObject profile = profiles.get(i);
final boolean isSelected = profile.getStringKey().equals(selectedItemKey);
final Drawable drawableIcon;
if (isSelected) {
drawableIcon = getMyApplication().getUIUtilities()
.getIcon(profile.getIconRes(), nightMode
? R.color.active_buttons_and_links_dark
: R.color.active_buttons_and_links_light);
} else {
drawableIcon = getMyApplication().getUIUtilities()
.getIcon(profile.getIconRes(), R.color.icon_color);
}
items.add(new BottomSheetItemWithCompoundButton.Builder()
.setChecked(isSelected)
.setDescription(profile.getDescription())
.setTitle(profile.getName())
.setIcon(drawableIcon)
.setLayoutId(R.layout.bottom_sheet_item_with_descr_and_checkbox_56dp)
.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (listener == null) {
getProfileListener();
}
if (listener != null) {
listener.onSelectedType(pos);
}
dismiss();
}
})
.create());
}
}
}
private void getProfileListener() {
if (getActivity() != null && getActivity() instanceof EditProfileActivity) {
EditProfileFragment f = (EditProfileFragment) getActivity().getSupportFragmentManager()
.findFragmentByTag(EditProfileActivity.EDIT_PROFILE_FRAGMENT_TAG);
if (type.equals(TYPE_APP_PROFILE)) {
listener = f.getBaseProfileListener();
} else if (type.equals(TYPE_NAV_PROFILE)) {
listener = f.getNavProfileListener();
}
} else if (getActivity() != null && getActivity() instanceof SettingsProfileActivity) {
SettingsProfileFragment f = (SettingsProfileFragment) getActivity().getSupportFragmentManager()
.findFragmentByTag(SettingsProfileActivity.SETTINGS_PROFILE_FRAGMENT_TAG);
listener = f.getBaseProfileListener();
}
}
interface SelectProfileListener {
void onSelectedType(int pos);
}
}

View file

@ -25,6 +25,7 @@ import net.osmand.plus.R;
import net.osmand.plus.base.BaseOsmAndFragment; import net.osmand.plus.base.BaseOsmAndFragment;
import net.osmand.plus.profiles.ProfileBottomSheetDialogFragment.ProfileTypeDialogListener; import net.osmand.plus.profiles.ProfileBottomSheetDialogFragment.ProfileTypeDialogListener;
import net.osmand.plus.profiles.ProfileMenuAdapter.ProfileListener; import net.osmand.plus.profiles.ProfileMenuAdapter.ProfileListener;
import net.osmand.plus.profiles.SelectProfileBottomSheetDialogFragment.SelectProfileListener;
import net.osmand.util.Algorithms; import net.osmand.util.Algorithms;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
@ -42,7 +43,7 @@ public class SettingsProfileFragment extends BaseOsmAndFragment {
private LinearLayout addNewProfileBtn; private LinearLayout addNewProfileBtn;
ProfileListener listener = null; ProfileListener listener = null;
ProfileTypeDialogListener typeListener = null; SelectProfileListener typeListener = null;
private List<ApplicationMode> allAppModes; private List<ApplicationMode> allAppModes;
private Set<ApplicationMode> availableAppModes; private Set<ApplicationMode> availableAppModes;
@ -85,7 +86,7 @@ public class SettingsProfileFragment extends BaseOsmAndFragment {
} }
}; };
typeListener = new ProfileTypeDialogListener() { typeListener = new SelectProfileListener() {
@Override @Override
public void onSelectedType(int pos) { public void onSelectedType(int pos) {
Intent intent = new Intent(getActivity(), EditProfileActivity.class); Intent intent = new Intent(getActivity(), EditProfileActivity.class);
@ -105,7 +106,7 @@ public class SettingsProfileFragment extends BaseOsmAndFragment {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
final ProfileBottomSheetDialogFragment dialog = new ProfileBottomSheetDialogFragment(); final SelectProfileBottomSheetDialogFragment dialog = new SelectProfileBottomSheetDialogFragment();
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putString(DIALOG_TYPE, TYPE_APP_PROFILE); bundle.putString(DIALOG_TYPE, TYPE_APP_PROFILE);
dialog.setArguments(bundle); dialog.setArguments(bundle);
@ -126,7 +127,7 @@ public class SettingsProfileFragment extends BaseOsmAndFragment {
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
typeListener = new ProfileTypeDialogListener() { typeListener = new SelectProfileListener() {
@Override @Override
public void onSelectedType(int pos) { public void onSelectedType(int pos) {
Intent intent = new Intent(getActivity(), EditProfileActivity.class); Intent intent = new Intent(getActivity(), EditProfileActivity.class);
@ -142,19 +143,19 @@ public class SettingsProfileFragment extends BaseOsmAndFragment {
adapter.updateItemsList(allAppModes, new LinkedHashSet<>(ApplicationMode.values(getMyApplication()))); adapter.updateItemsList(allAppModes, new LinkedHashSet<>(ApplicationMode.values(getMyApplication())));
} }
ProfileTypeDialogListener getBaseProfileListener() { SelectProfileListener getBaseProfileListener() {
if (typeListener == null) { // if (typeListener == null) {
typeListener = new ProfileTypeDialogListener() { // typeListener = new SelectProfileListener() {
@Override // @Override
public void onSelectedType(int pos) { // public void onSelectedType(int pos) {
Intent intent = new Intent(getActivity(), EditProfileActivity.class); // Intent intent = new Intent(getActivity(), EditProfileActivity.class);
intent.putExtra(IS_NEW_PROFILE, true); // intent.putExtra(IS_NEW_PROFILE, true);
intent.putExtra(IS_USER_PROFILE, true); // intent.putExtra(IS_USER_PROFILE, true);
intent.putExtra(PROFILE_STRING_KEY, baseProfiles.get(pos).getStringKey()); // intent.putExtra(PROFILE_STRING_KEY, baseProfiles.get(pos).getStringKey());
startActivity(intent); // startActivity(intent);
} // }
}; // };
} // }
return typeListener; return typeListener;
} }