Quick Action redesign p.3 replace "Add action" AlertDialog with BottomSheet
This commit is contained in:
parent
f8e4bc8607
commit
00cebdba08
6 changed files with 78 additions and 228 deletions
|
@ -1,45 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="?attr/bg_color"
|
||||
android:paddingTop="24dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvTitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/dialog_add_action_title"
|
||||
android:layout_marginLeft="24dp"
|
||||
android:layout_marginRight="24dp"
|
||||
android:textSize="@dimen/dialog_header_text_size"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:layout_marginEnd="24dp"
|
||||
android:layout_marginStart="24dp" />
|
||||
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/recycler_view"
|
||||
android:layout_weight="1"
|
||||
app:layoutManager="LinearLayoutManager"
|
||||
android:layout_width="match_parent"
|
||||
android:scrollbars="vertical"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btnDismiss"
|
||||
android:layout_marginTop="8dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="8dp"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:text="@string/shared_string_dismiss"
|
||||
android:layout_gravity="end"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:textColor="?attr/color_dialog_buttons"
|
||||
android:textAllCaps="true"
|
||||
android:layout_marginEnd="8dp" />
|
||||
</LinearLayout>
|
|
@ -3,25 +3,26 @@
|
|||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="40dp"
|
||||
android:layout_height="wrap_content"
|
||||
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
||||
android:background="?attr/bg_color">
|
||||
|
||||
<TextView
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/header"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:textColor="?android:textColorSecondary"
|
||||
android:textSize="@dimen/default_sub_text_size"
|
||||
android:layout_marginLeft="24dp"
|
||||
android:layout_marginRight="24dp"
|
||||
android:layout_height="@dimen/list_header_height"
|
||||
android:gravity="center_vertical"
|
||||
android:textColor="@color/preference_category_title"
|
||||
android:textSize="@dimen/default_desc_text_size"
|
||||
android:layout_marginLeft="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
tools:text="Screen 1"
|
||||
android:layout_marginStart="24dp"
|
||||
android:layout_marginEnd="24dp" />
|
||||
osmand:typeface="@string/font_roboto_medium" />
|
||||
|
||||
<View android:id="@+id/divider"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_gravity="top"
|
||||
android:background="?attr/dashboard_divider"/>
|
||||
|
||||
</FrameLayout>
|
|
@ -6,33 +6,32 @@
|
|||
android:id="@+id/searchListItemLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:minHeight="48dp"
|
||||
android:paddingRight="24dp"
|
||||
android:paddingLeft="24dp"
|
||||
android:paddingStart="24dp"
|
||||
android:paddingEnd="24dp"
|
||||
android:minHeight="@dimen/bottom_sheet_list_item_height"
|
||||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingRight="@dimen/content_padding"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:orientation="horizontal">
|
||||
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/image"
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="24dp"
|
||||
android:layout_width="@dimen/standard_icon_size"
|
||||
android:layout_height="@dimen/standard_icon_size"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginRight="16dp"
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
android:scaleType="centerInside"
|
||||
android:tint="?attr/default_icon_color"
|
||||
osmand:srcCompat="@drawable/ic_action_flag"
|
||||
android:layout_marginEnd="16dp" />
|
||||
android:layout_marginEnd="@dimen/content_padding" />
|
||||
|
||||
<TextView
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
android:textSize="@dimen/default_list_text_size"
|
||||
osmand:typeface="@string/font_roboto_regular"
|
||||
tools:text="Add marker" />
|
||||
|
||||
</LinearLayout>
|
|
@ -1,25 +1,20 @@
|
|||
package net.osmand.plus.quickaction;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.Window;
|
||||
import android.widget.Button;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.fragment.app.DialogFragment;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.UiUtilities;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
|
||||
import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem;
|
||||
import net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleItem;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
@ -27,160 +22,59 @@ import java.util.List;
|
|||
* Created by rosty on 12/22/16.
|
||||
*/
|
||||
|
||||
public class AddQuickActionDialog extends DialogFragment {
|
||||
public class AddQuickActionDialog extends MenuBottomSheetDialogFragment {
|
||||
|
||||
public static final String TAG = AddQuickActionDialog.class.getSimpleName();
|
||||
|
||||
private boolean isLightContent;
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
public void createMenuItems(Bundle savedInstanceState) {
|
||||
OsmandApplication app = requiredMyApplication();
|
||||
final FragmentActivity activity = getActivity();
|
||||
LayoutInflater inflater = UiUtilities.getInflater(app, nightMode);
|
||||
QuickActionRegistry quickActionRegistry = app.getQuickActionRegistry();
|
||||
|
||||
OsmandApplication application = (OsmandApplication) getActivity().getApplication();
|
||||
isLightContent = application.getSettings().isLightContent() && !application.getDaynightHelper().isNightMode();
|
||||
|
||||
return new Dialog(UiUtilities.getThemedContext(getActivity(), !isLightContent, R.style.Dialog90Light, R.style.Dialog90Dark), getTheme());
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
|
||||
getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
|
||||
QuickActionRegistry quickActionRegistry = ((MapActivity) getActivity())
|
||||
.getMyApplication()
|
||||
.getQuickActionRegistry();
|
||||
|
||||
View root = UiUtilities.getInflater(getActivity(), !isLightContent).inflate(R.layout.quick_action_add_dialog, container, false);
|
||||
Adapter adapter = new Adapter(quickActionRegistry.produceTypeActionsListWithHeaders());
|
||||
|
||||
TextView tvTitle = root.findViewById(R.id.tvTitle);
|
||||
RecyclerView recyclerView = (RecyclerView) root.findViewById(R.id.recycler_view);
|
||||
Button btnDismiss = (Button) root.findViewById(R.id.btnDismiss);
|
||||
|
||||
tvTitle.setTextColor(ContextCompat.getColor(getContext(),
|
||||
isLightContent ? R.color.text_color_primary_light : R.color.text_color_primary_dark));
|
||||
|
||||
btnDismiss.setOnClickListener(new View.OnClickListener() {
|
||||
items.add(new TitleItem(getString(R.string.dialog_add_action_title)));
|
||||
List<QuickActionType> actions = quickActionRegistry.produceTypeActionsListWithHeaders();
|
||||
boolean firstHeader = true;
|
||||
for (final QuickActionType action : actions) {
|
||||
if (action.getId() == 0) {
|
||||
View itemView = inflater.inflate(R.layout.quick_action_add_dialog_header,
|
||||
null, false);
|
||||
TextView title = itemView.findViewById(R.id.header);
|
||||
View divider = itemView.findViewById(R.id.divider);
|
||||
title.setText(action.getNameRes());
|
||||
divider.setVisibility(firstHeader ? View.GONE : View.VISIBLE);
|
||||
items.add(new BaseBottomSheetItem.Builder()
|
||||
.setCustomView(itemView)
|
||||
.create());
|
||||
firstHeader = false;
|
||||
} else {
|
||||
View itemView = inflater.inflate(R.layout.quick_action_add_dialog_item,
|
||||
null, false);
|
||||
TextView title = itemView.findViewById(R.id.title);
|
||||
ImageView icon = itemView.findViewById(R.id.image);
|
||||
title.setText(action.getNameRes());
|
||||
icon.setImageResource(action.getIconRes());
|
||||
items.add(new BaseBottomSheetItem.Builder()
|
||||
.setCustomView(itemView)
|
||||
.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
CreateEditActionDialog dialog =
|
||||
CreateEditActionDialog.newInstance(action.getId());
|
||||
dialog.show(activity.getSupportFragmentManager(),
|
||||
CreateEditActionDialog.TAG);
|
||||
dismiss();
|
||||
}
|
||||
});
|
||||
|
||||
recyclerView.setAdapter(adapter);
|
||||
|
||||
return root;
|
||||
})
|
||||
.create());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
}
|
||||
|
||||
public class Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||
|
||||
private static final int HEADER = 1;
|
||||
private static final int ITEM = 2;
|
||||
|
||||
private List<QuickActionType> data;
|
||||
|
||||
public class ItemViewHolder extends RecyclerView.ViewHolder {
|
||||
|
||||
private TextView title;
|
||||
private ImageView icon;
|
||||
|
||||
public ItemViewHolder(View v) {
|
||||
super(v);
|
||||
|
||||
title = (TextView) v.findViewById(R.id.title);
|
||||
icon = (ImageView) v.findViewById(R.id.image);
|
||||
}
|
||||
}
|
||||
|
||||
public class HeaderViewHolder extends RecyclerView.ViewHolder {
|
||||
|
||||
private TextView header;
|
||||
private View divider;
|
||||
|
||||
public HeaderViewHolder(View v) {
|
||||
super(v);
|
||||
|
||||
header = (TextView) v.findViewById(R.id.header);
|
||||
divider = v.findViewById(R.id.divider);
|
||||
}
|
||||
}
|
||||
|
||||
public Adapter(List<QuickActionType> data) {
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
|
||||
if (viewType == HEADER) {
|
||||
|
||||
return new HeaderViewHolder(LayoutInflater.from(parent.getContext())
|
||||
.inflate(R.layout.quick_action_add_dialog_header, parent, false));
|
||||
|
||||
} else {
|
||||
|
||||
return new ItemViewHolder(LayoutInflater.from(parent.getContext())
|
||||
.inflate(R.layout.quick_action_add_dialog_item, parent, false));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
|
||||
|
||||
final QuickActionType action = data.get(position);
|
||||
|
||||
if (getItemViewType(position) == HEADER) {
|
||||
|
||||
HeaderViewHolder headerHolder = (HeaderViewHolder) holder;
|
||||
|
||||
headerHolder.header.setText(action.getNameRes());
|
||||
if (position == 0) headerHolder.divider.setVisibility(View.GONE);
|
||||
else headerHolder.divider.setVisibility(View.VISIBLE);
|
||||
|
||||
} else {
|
||||
|
||||
ItemViewHolder itemHolder = (ItemViewHolder) holder;
|
||||
|
||||
itemHolder.title.setText(action.getNameRes());
|
||||
itemHolder.title.setTextColor(ContextCompat.getColor(getContext(),
|
||||
isLightContent ? R.color.text_color_primary_light : R.color.text_color_primary_dark));
|
||||
itemHolder.icon.setImageResource(action.getIconRes());
|
||||
|
||||
itemHolder.itemView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
|
||||
CreateEditActionDialog dialog = CreateEditActionDialog.newInstance(action.getId());
|
||||
dialog.show(getFragmentManager(), CreateEditActionDialog.TAG);
|
||||
|
||||
dismiss();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return data.size();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemViewType(int position) {
|
||||
|
||||
if (data.get(position).getId() == 0)
|
||||
return HEADER;
|
||||
|
||||
return ITEM;
|
||||
}
|
||||
public static void showInstance(FragmentManager fm, boolean usedOnMap) {
|
||||
AddQuickActionDialog fragment = new AddQuickActionDialog();
|
||||
fragment.setUsedOnMap(usedOnMap);
|
||||
fragment.show(fm, AddQuickActionDialog.TAG);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -534,8 +534,12 @@ public class QuickActionListFragment extends BaseOsmAndFragment
|
|||
h.itemContainer.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
CreateEditActionDialog dialog = CreateEditActionDialog.newInstance(action.id);
|
||||
dialog.show(getFragmentManager(), AddQuickActionDialog.TAG);
|
||||
CreateEditActionDialog dialog =
|
||||
CreateEditActionDialog.newInstance(action.id);
|
||||
FragmentManager fm = getFragmentManager();
|
||||
if (fm != null && !dialog.isStateSaved()) {
|
||||
dialog.show(fm, CreateEditActionDialog.TAG);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -871,8 +875,7 @@ public class QuickActionListFragment extends BaseOsmAndFragment
|
|||
private void showAddQuickActionDialog() {
|
||||
FragmentManager fm = getFragmentManager();
|
||||
if (fm != null) {
|
||||
AddQuickActionDialog dialog = new AddQuickActionDialog();
|
||||
dialog.show(fm, AddQuickActionDialog.TAG);
|
||||
AddQuickActionDialog.showInstance(fm, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -24,9 +24,7 @@ public class NewAction extends QuickAction {
|
|||
|
||||
@Override
|
||||
public void execute(MapActivity activity) {
|
||||
|
||||
AddQuickActionDialog dialog = new AddQuickActionDialog();
|
||||
dialog.show(activity.getSupportFragmentManager(), AddQuickActionDialog.TAG);
|
||||
AddQuickActionDialog.showInstance(activity.getSupportFragmentManager(), true);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Reference in a new issue