WIP Update to Android 15: edge to edge fixes
This commit is contained in:
parent
a0978d8a54
commit
f70fa7163f
@ -22,6 +22,7 @@ android {
|
|||||||
applicationId "it.danieleverducci.nextcloudmaps"
|
applicationId "it.danieleverducci.nextcloudmaps"
|
||||||
minSdkVersion 23
|
minSdkVersion 23
|
||||||
targetSdkVersion 35
|
targetSdkVersion 35
|
||||||
|
compileSdk 35
|
||||||
versionCode 9
|
versionCode 9
|
||||||
versionName "0.4.0"
|
versionName "0.4.0"
|
||||||
|
|
||||||
|
@ -54,6 +54,7 @@ import it.danieleverducci.nextcloudmaps.R;
|
|||||||
import it.danieleverducci.nextcloudmaps.activity.NextcloudMapsStyledActivity;
|
import it.danieleverducci.nextcloudmaps.activity.NextcloudMapsStyledActivity;
|
||||||
import it.danieleverducci.nextcloudmaps.databinding.ActivityGeofavoriteDetailBinding;
|
import it.danieleverducci.nextcloudmaps.databinding.ActivityGeofavoriteDetailBinding;
|
||||||
import it.danieleverducci.nextcloudmaps.model.Geofavorite;
|
import it.danieleverducci.nextcloudmaps.model.Geofavorite;
|
||||||
|
import it.danieleverducci.nextcloudmaps.utils.EdgeToEdgeUtils;
|
||||||
import it.danieleverducci.nextcloudmaps.utils.GeoUriParser;
|
import it.danieleverducci.nextcloudmaps.utils.GeoUriParser;
|
||||||
import it.danieleverducci.nextcloudmaps.utils.IntentGenerator;
|
import it.danieleverducci.nextcloudmaps.utils.IntentGenerator;
|
||||||
import it.danieleverducci.nextcloudmaps.utils.MapUtils;
|
import it.danieleverducci.nextcloudmaps.utils.MapUtils;
|
||||||
@ -76,6 +77,7 @@ public class GeofavoriteDetailActivity extends NextcloudMapsStyledActivity imple
|
|||||||
|
|
||||||
mViewHolder = new ViewHolder(getLayoutInflater());
|
mViewHolder = new ViewHolder(getLayoutInflater());
|
||||||
setContentView(mViewHolder.getRootView());
|
setContentView(mViewHolder.getRootView());
|
||||||
|
EdgeToEdgeUtils.clearTopBarWithPadding(mViewHolder.binding.appbar);
|
||||||
mViewHolder.setOnSubmitListener(new OnSubmitListener() {
|
mViewHolder.setOnSubmitListener(new OnSubmitListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onBackPressed() {
|
public void onBackPressed() {
|
||||||
|
@ -61,6 +61,9 @@ public class GeofavoriteAdapter extends RecyclerView.Adapter<GeofavoriteAdapter.
|
|||||||
|
|
||||||
private List<Geofavorite> items = new ArrayList<>();
|
private List<Geofavorite> items = new ArrayList<>();
|
||||||
private int sortRule = SORT_BY_CREATED;
|
private int sortRule = SORT_BY_CREATED;
|
||||||
|
private int bottomInset = 0;
|
||||||
|
private int leftInset = 0;
|
||||||
|
private int rightInset = 0;
|
||||||
|
|
||||||
// Contains the position of the element containing the overflow menu clicked
|
// Contains the position of the element containing the overflow menu clicked
|
||||||
private int overflowMenuSelectedPosition = -1;
|
private int overflowMenuSelectedPosition = -1;
|
||||||
@ -110,6 +113,14 @@ public class GeofavoriteAdapter extends RecyclerView.Adapter<GeofavoriteAdapter.
|
|||||||
holder.tv_title.setText(Html.fromHtml(geofavorite.getName() == null ? "" : geofavorite.getName()));
|
holder.tv_title.setText(Html.fromHtml(geofavorite.getName() == null ? "" : geofavorite.getName()));
|
||||||
holder.tv_content.setText(geofavorite.getComment() == null ? "" : geofavorite.getComment());
|
holder.tv_content.setText(geofavorite.getComment() == null ? "" : geofavorite.getComment());
|
||||||
holder.tv_date.setText(geofavorite.getLocalDateCreated().format(dateFormatter));
|
holder.tv_date.setText(geofavorite.getLocalDateCreated().format(dateFormatter));
|
||||||
|
|
||||||
|
// Last item: Clear bottom system bar
|
||||||
|
holder.root_view.setPadding(
|
||||||
|
leftInset,
|
||||||
|
holder.root_view.getPaddingTop(),
|
||||||
|
rightInset,
|
||||||
|
position == getItemCount() - 1 ? bottomInset : 0
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -117,7 +128,20 @@ public class GeofavoriteAdapter extends RecyclerView.Adapter<GeofavoriteAdapter.
|
|||||||
return items.size();
|
return items.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setBottomInset(int inset) {
|
||||||
|
this.bottomInset = inset;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLeftInset(int inset) {
|
||||||
|
this.leftInset = inset;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRightInset(int inset) {
|
||||||
|
this.rightInset = inset;
|
||||||
|
}
|
||||||
|
|
||||||
class GeofavoriteViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
|
class GeofavoriteViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
|
||||||
|
View root_view;
|
||||||
TextView tv_category, tv_title, tv_content, tv_date;
|
TextView tv_category, tv_title, tv_content, tv_date;
|
||||||
ImageView bt_context_menu;
|
ImageView bt_context_menu;
|
||||||
ImageView bt_nav;
|
ImageView bt_nav;
|
||||||
@ -128,6 +152,7 @@ public class GeofavoriteAdapter extends RecyclerView.Adapter<GeofavoriteAdapter.
|
|||||||
GeofavoriteViewHolder(@NonNull View itemView, ItemClickListener itemClickListener) {
|
GeofavoriteViewHolder(@NonNull View itemView, ItemClickListener itemClickListener) {
|
||||||
super(itemView);
|
super(itemView);
|
||||||
|
|
||||||
|
root_view = itemView;
|
||||||
tv_category = itemView.findViewById(R.id.tv_category);
|
tv_category = itemView.findViewById(R.id.tv_category);
|
||||||
tv_title = itemView.findViewById(R.id.title);
|
tv_title = itemView.findViewById(R.id.title);
|
||||||
tv_content = itemView.findViewById(R.id.content);
|
tv_content = itemView.findViewById(R.id.content);
|
||||||
|
@ -25,7 +25,10 @@ import android.view.View;
|
|||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.core.app.ActivityCompat;
|
import androidx.core.app.ActivityCompat;
|
||||||
|
import androidx.core.graphics.Insets;
|
||||||
import androidx.core.view.GravityCompat;
|
import androidx.core.view.GravityCompat;
|
||||||
|
import androidx.core.view.ViewCompat;
|
||||||
|
import androidx.core.view.WindowInsetsCompat;
|
||||||
import androidx.drawerlayout.widget.DrawerLayout;
|
import androidx.drawerlayout.widget.DrawerLayout;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentManager;
|
||||||
@ -48,6 +51,7 @@ import it.danieleverducci.nextcloudmaps.api.ApiProvider;
|
|||||||
import it.danieleverducci.nextcloudmaps.fragments.GeofavoriteListFragment;
|
import it.danieleverducci.nextcloudmaps.fragments.GeofavoriteListFragment;
|
||||||
import it.danieleverducci.nextcloudmaps.fragments.GeofavoriteMapFragment;
|
import it.danieleverducci.nextcloudmaps.fragments.GeofavoriteMapFragment;
|
||||||
import it.danieleverducci.nextcloudmaps.repository.GeofavoriteRepository;
|
import it.danieleverducci.nextcloudmaps.repository.GeofavoriteRepository;
|
||||||
|
import it.danieleverducci.nextcloudmaps.utils.EdgeToEdgeUtils;
|
||||||
import it.danieleverducci.nextcloudmaps.utils.SettingsManager;
|
import it.danieleverducci.nextcloudmaps.utils.SettingsManager;
|
||||||
|
|
||||||
public class MainActivity extends NextcloudMapsStyledActivity {
|
public class MainActivity extends NextcloudMapsStyledActivity {
|
||||||
@ -123,15 +127,7 @@ public class MainActivity extends NextcloudMapsStyledActivity {
|
|||||||
else
|
else
|
||||||
showList();
|
showList();
|
||||||
|
|
||||||
FloatingActionButton fab = findViewById(R.id.open_fab);
|
setupFAB();
|
||||||
fab.setOnClickListener(view -> openFab(!this.isFabOpen));
|
|
||||||
|
|
||||||
fab = findViewById(R.id.add_from_gps);
|
|
||||||
fab.setOnClickListener(view -> addGeofavoriteFromGps());
|
|
||||||
|
|
||||||
fab = findViewById(R.id.add_from_map);
|
|
||||||
fab.setOnClickListener(view -> addGeofavoriteFromMap());
|
|
||||||
|
|
||||||
setupNavigationMenu();
|
setupNavigationMenu();
|
||||||
|
|
||||||
drawerLayout = findViewById(R.id.drawerLayout);
|
drawerLayout = findViewById(R.id.drawerLayout);
|
||||||
@ -150,7 +146,32 @@ public class MainActivity extends NextcloudMapsStyledActivity {
|
|||||||
transaction.commit();
|
transaction.commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setupFAB() {
|
||||||
|
// Register listeners
|
||||||
|
FloatingActionButton fab = findViewById(R.id.open_fab);
|
||||||
|
fab.setOnClickListener(view -> openFab(!this.isFabOpen));
|
||||||
|
|
||||||
|
fab = findViewById(R.id.add_from_gps);
|
||||||
|
fab.setOnClickListener(view -> addGeofavoriteFromGps());
|
||||||
|
|
||||||
|
fab = findViewById(R.id.add_from_map);
|
||||||
|
fab.setOnClickListener(view -> addGeofavoriteFromMap());
|
||||||
|
|
||||||
|
// Clear system bars (in edge to edge mode)
|
||||||
|
EdgeToEdgeUtils.clearBottomBarWithMargin(findViewById(R.id.fab_container));
|
||||||
|
}
|
||||||
|
|
||||||
private void setupNavigationMenu() {
|
private void setupNavigationMenu() {
|
||||||
|
//EdgeToEdgeUtils.clearTopBarWithPadding(findViewById(R.id.header_view));
|
||||||
|
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.drawerLayout), (v, windowInsets) -> {
|
||||||
|
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
|
View hv = findViewById(R.id.header_view);
|
||||||
|
hv.setPadding(insets.left, insets.top, insets.right, hv.getPaddingBottom());
|
||||||
|
|
||||||
|
//return WindowInsetsCompat.CONSUMED;
|
||||||
|
return windowInsets;
|
||||||
|
});
|
||||||
|
|
||||||
ArrayList<NavigationItem> navItems = new ArrayList<>();
|
ArrayList<NavigationItem> navItems = new ArrayList<>();
|
||||||
|
|
||||||
navigationCommonAdapter = new NavigationAdapter(this, item -> {
|
navigationCommonAdapter = new NavigationAdapter(this, item -> {
|
||||||
|
@ -13,6 +13,9 @@ import android.view.ViewGroup;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.widget.AppCompatImageView;
|
import androidx.appcompat.widget.AppCompatImageView;
|
||||||
|
import androidx.core.graphics.Insets;
|
||||||
|
import androidx.core.view.ViewCompat;
|
||||||
|
import androidx.core.view.WindowInsetsCompat;
|
||||||
import androidx.fragment.app.FragmentTransaction;
|
import androidx.fragment.app.FragmentTransaction;
|
||||||
import androidx.lifecycle.Observer;
|
import androidx.lifecycle.Observer;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
@ -27,6 +30,7 @@ import it.danieleverducci.nextcloudmaps.activity.main.GeofavoriteAdapter;
|
|||||||
import it.danieleverducci.nextcloudmaps.activity.main.MainActivity;
|
import it.danieleverducci.nextcloudmaps.activity.main.MainActivity;
|
||||||
import it.danieleverducci.nextcloudmaps.activity.main.SortingOrderDialogFragment;
|
import it.danieleverducci.nextcloudmaps.activity.main.SortingOrderDialogFragment;
|
||||||
import it.danieleverducci.nextcloudmaps.model.Geofavorite;
|
import it.danieleverducci.nextcloudmaps.model.Geofavorite;
|
||||||
|
import it.danieleverducci.nextcloudmaps.utils.EdgeToEdgeUtils;
|
||||||
import it.danieleverducci.nextcloudmaps.utils.GeofavoritesFilter;
|
import it.danieleverducci.nextcloudmaps.utils.GeofavoritesFilter;
|
||||||
import it.danieleverducci.nextcloudmaps.utils.SettingsManager;
|
import it.danieleverducci.nextcloudmaps.utils.SettingsManager;
|
||||||
|
|
||||||
@ -97,6 +101,17 @@ public class GeofavoriteListFragment extends GeofavoritesFragment implements Sor
|
|||||||
View showMapButton = v.findViewById(R.id.view_mode_map);
|
View showMapButton = v.findViewById(R.id.view_mode_map);
|
||||||
showMapButton.setOnClickListener(View -> ((MainActivity)requireActivity()).showMap());
|
showMapButton.setOnClickListener(View -> ((MainActivity)requireActivity()).showMap());
|
||||||
|
|
||||||
|
// Clear top bar in edge to edge and notify the adapter about the system bar size to avoid the system bar covering the last row
|
||||||
|
ViewCompat.setOnApplyWindowInsetsListener(v.findViewById(R.id.activity_list_view), (rv, windowInsets) -> {
|
||||||
|
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
|
rv.setPadding(rv.getPaddingLeft(), insets.top, rv.getPaddingRight(), rv.getPaddingBottom());
|
||||||
|
geofavoriteAdapter.setBottomInset(insets.bottom);
|
||||||
|
geofavoriteAdapter.setLeftInset(insets.left);
|
||||||
|
geofavoriteAdapter.setRightInset(insets.right);
|
||||||
|
//return WindowInsetsCompat.CONSUMED;
|
||||||
|
return windowInsets;
|
||||||
|
});
|
||||||
|
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,7 +8,6 @@ import android.graphics.drawable.BitmapDrawable;
|
|||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
@ -17,7 +16,6 @@ import androidx.annotation.NonNull;
|
|||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.content.res.AppCompatResources;
|
import androidx.appcompat.content.res.AppCompatResources;
|
||||||
import androidx.core.app.ActivityCompat;
|
import androidx.core.app.ActivityCompat;
|
||||||
import androidx.core.content.res.ResourcesCompat;
|
|
||||||
import androidx.core.graphics.drawable.DrawableCompat;
|
import androidx.core.graphics.drawable.DrawableCompat;
|
||||||
import androidx.lifecycle.Observer;
|
import androidx.lifecycle.Observer;
|
||||||
|
|
||||||
@ -34,13 +32,12 @@ import org.osmdroid.views.overlay.mylocation.GpsMyLocationProvider;
|
|||||||
import org.osmdroid.views.overlay.mylocation.MyLocationNewOverlay;
|
import org.osmdroid.views.overlay.mylocation.MyLocationNewOverlay;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import it.danieleverducci.nextcloudmaps.R;
|
import it.danieleverducci.nextcloudmaps.R;
|
||||||
import it.danieleverducci.nextcloudmaps.activity.detail.GeofavoriteDetailActivity;
|
import it.danieleverducci.nextcloudmaps.activity.detail.GeofavoriteDetailActivity;
|
||||||
import it.danieleverducci.nextcloudmaps.activity.main.MainActivity;
|
import it.danieleverducci.nextcloudmaps.activity.main.MainActivity;
|
||||||
import it.danieleverducci.nextcloudmaps.activity.mappicker.MapPickerActivity;
|
|
||||||
import it.danieleverducci.nextcloudmaps.model.Geofavorite;
|
import it.danieleverducci.nextcloudmaps.model.Geofavorite;
|
||||||
|
import it.danieleverducci.nextcloudmaps.utils.EdgeToEdgeUtils;
|
||||||
import it.danieleverducci.nextcloudmaps.utils.GeoUriParser;
|
import it.danieleverducci.nextcloudmaps.utils.GeoUriParser;
|
||||||
import it.danieleverducci.nextcloudmaps.utils.MapUtils;
|
import it.danieleverducci.nextcloudmaps.utils.MapUtils;
|
||||||
import it.danieleverducci.nextcloudmaps.utils.SettingsManager;
|
import it.danieleverducci.nextcloudmaps.utils.SettingsManager;
|
||||||
@ -64,7 +61,11 @@ public class GeofavoriteMapFragment extends GeofavoritesFragment implements Main
|
|||||||
View v = inflater.inflate(R.layout.fragment_geofavorite_map, container, false);
|
View v = inflater.inflate(R.layout.fragment_geofavorite_map, container, false);
|
||||||
|
|
||||||
// Register listeners
|
// Register listeners
|
||||||
v.findViewById(R.id.center_position).setOnClickListener((cpv) -> moveToUserPosition());
|
View centerPositionFab = v.findViewById(R.id.center_position);
|
||||||
|
centerPositionFab.setOnClickListener((cpv) -> moveToUserPosition());
|
||||||
|
|
||||||
|
// Clear bottom bar in edge to edge
|
||||||
|
EdgeToEdgeUtils.clearBottomBarWithMargin(v.findViewById(R.id.center_position_container));
|
||||||
|
|
||||||
// Setup map
|
// Setup map
|
||||||
map = v.findViewById(R.id.map);
|
map = v.findViewById(R.id.map);
|
||||||
|
@ -38,6 +38,7 @@ import it.danieleverducci.nextcloudmaps.activity.detail.GeofavoriteDetailActivit
|
|||||||
import it.danieleverducci.nextcloudmaps.activity.main.GeofavoritesFragmentViewModel;
|
import it.danieleverducci.nextcloudmaps.activity.main.GeofavoritesFragmentViewModel;
|
||||||
import it.danieleverducci.nextcloudmaps.activity.main.MainActivity;
|
import it.danieleverducci.nextcloudmaps.activity.main.MainActivity;
|
||||||
import it.danieleverducci.nextcloudmaps.model.Geofavorite;
|
import it.danieleverducci.nextcloudmaps.model.Geofavorite;
|
||||||
|
import it.danieleverducci.nextcloudmaps.utils.EdgeToEdgeUtils;
|
||||||
import it.danieleverducci.nextcloudmaps.utils.GeofavoritesFilter;
|
import it.danieleverducci.nextcloudmaps.utils.GeofavoritesFilter;
|
||||||
import it.danieleverducci.nextcloudmaps.utils.IntentGenerator;
|
import it.danieleverducci.nextcloudmaps.utils.IntentGenerator;
|
||||||
|
|
||||||
@ -86,6 +87,8 @@ public abstract class GeofavoritesFragment extends Fragment {
|
|||||||
userBadgeContainer.setOnClickListener(v -> showSwitchAccountDialog());
|
userBadgeContainer.setOnClickListener(v -> showSwitchAccountDialog());
|
||||||
|
|
||||||
// Setup toolbar/searchbar
|
// Setup toolbar/searchbar
|
||||||
|
View toolbarContainer = view.findViewById(R.id.toolbar_container);
|
||||||
|
EdgeToEdgeUtils.clearTopBarWithMargin(toolbarContainer);
|
||||||
toolbar = view.findViewById(R.id.toolbar);
|
toolbar = view.findViewById(R.id.toolbar);
|
||||||
homeToolbar = view.findViewById(R.id.home_toolbar);
|
homeToolbar = view.findViewById(R.id.home_toolbar);
|
||||||
filterButton = view.findViewById(R.id.search_filter);
|
filterButton = view.findViewById(R.id.search_filter);
|
||||||
|
@ -0,0 +1,62 @@
|
|||||||
|
package it.danieleverducci.nextcloudmaps.utils;
|
||||||
|
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
import androidx.core.graphics.Insets;
|
||||||
|
import androidx.core.view.ViewCompat;
|
||||||
|
import androidx.core.view.WindowInsetsCompat;
|
||||||
|
|
||||||
|
public class EdgeToEdgeUtils {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears the system bars in edge to edge mode (https://developer.android.com/develop/ui/views/layout/edge-to-edge)
|
||||||
|
* @param viewToClear the view to clear from system bars
|
||||||
|
*/
|
||||||
|
public static void clearBottomBarWithMargin(View viewToClear) {
|
||||||
|
ViewCompat.setOnApplyWindowInsetsListener(viewToClear, (v, windowInsets) -> {
|
||||||
|
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
|
ViewGroup.MarginLayoutParams mlp = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
|
||||||
|
mlp.bottomMargin = insets.bottom;
|
||||||
|
mlp.leftMargin = insets.left;
|
||||||
|
mlp.rightMargin = insets.right;
|
||||||
|
v.setLayoutParams(mlp);
|
||||||
|
|
||||||
|
//return WindowInsetsCompat.CONSUMED;
|
||||||
|
return windowInsets;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears the system bars in edge to edge mode (https://developer.android.com/develop/ui/views/layout/edge-to-edge)
|
||||||
|
* @param viewToClear the view to clear from system bars
|
||||||
|
*/
|
||||||
|
public static void clearTopBarWithMargin(View viewToClear) {
|
||||||
|
ViewCompat.setOnApplyWindowInsetsListener(viewToClear, (v, windowInsets) -> {
|
||||||
|
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
|
ViewGroup.MarginLayoutParams mlp = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
|
||||||
|
mlp.topMargin = insets.top;
|
||||||
|
mlp.leftMargin = insets.left;
|
||||||
|
mlp.rightMargin = insets.right;
|
||||||
|
v.setLayoutParams(mlp);
|
||||||
|
|
||||||
|
//return WindowInsetsCompat.CONSUMED;
|
||||||
|
return windowInsets;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears the system bars in edge to edge mode (https://developer.android.com/develop/ui/views/layout/edge-to-edge)
|
||||||
|
* @param viewToClear the view to clear from system bars
|
||||||
|
*/
|
||||||
|
public static void clearTopBarWithPadding(View viewToClear) {
|
||||||
|
ViewCompat.setOnApplyWindowInsetsListener(viewToClear, (v, windowInsets) -> {
|
||||||
|
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
|
v.setPadding(insets.left, insets.top, insets.right, v.getPaddingBottom());
|
||||||
|
|
||||||
|
//return WindowInsetsCompat.CONSUMED;
|
||||||
|
return windowInsets;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -10,14 +10,12 @@
|
|||||||
<com.google.android.material.appbar.AppBarLayout
|
<com.google.android.material.appbar.AppBarLayout
|
||||||
android:id="@+id/appbar"
|
android:id="@+id/appbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="250dp"
|
android:layout_height="250dp">
|
||||||
android:fitsSystemWindows="true">
|
|
||||||
|
|
||||||
<com.google.android.material.appbar.CollapsingToolbarLayout
|
<com.google.android.material.appbar.CollapsingToolbarLayout
|
||||||
android:id="@+id/collapsing_toolbar"
|
android:id="@+id/collapsing_toolbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:fitsSystemWindows="true"
|
|
||||||
app:contentScrim="@color/defaultBrand"
|
app:contentScrim="@color/defaultBrand"
|
||||||
app:layout_scrollFlags="scroll|snap|exitUntilCollapsed"
|
app:layout_scrollFlags="scroll|snap|exitUntilCollapsed"
|
||||||
app:title="@string/new_geobookmark"
|
app:title="@string/new_geobookmark"
|
||||||
|
@ -30,43 +30,51 @@
|
|||||||
tools:layout="@layout/fragment_geofavorite_list" />
|
tools:layout="@layout/fragment_geofavorite_list" />
|
||||||
|
|
||||||
|
|
||||||
<!-- Add from map FAB -->
|
<FrameLayout
|
||||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
android:id="@+id/fab_container"
|
||||||
android:id="@+id/add_from_map"
|
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="match_parent"
|
||||||
android:layout_gravity="bottom|end"
|
android:layout_gravity="bottom|end">
|
||||||
android:layout_margin="24dp"
|
|
||||||
android:src="@drawable/ic_add_map"
|
|
||||||
app:backgroundTint="@color/defaultBrand"
|
|
||||||
app:fabSize="mini"
|
|
||||||
app:tint="@color/white"
|
|
||||||
tools:ignore="DuplicateClickableBoundsCheck"
|
|
||||||
android:contentDescription="@string/add_from_map" />
|
|
||||||
|
|
||||||
<!-- Add from current position FAB -->
|
<!-- Add from map FAB -->
|
||||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||||
android:id="@+id/add_from_gps"
|
android:id="@+id/add_from_map"
|
||||||
android:layout_margin="24dp"
|
android:layout_width="wrap_content"
|
||||||
android:layout_gravity="bottom|end"
|
android:layout_height="wrap_content"
|
||||||
android:layout_width="wrap_content"
|
android:layout_gravity="bottom"
|
||||||
android:layout_height="wrap_content"
|
android:layout_margin="24dp"
|
||||||
app:fabSize="mini"
|
android:src="@drawable/ic_add_map"
|
||||||
android:src="@drawable/ic_add_gps"
|
app:backgroundTint="@color/defaultBrand"
|
||||||
app:backgroundTint="@color/defaultBrand"
|
app:fabSize="mini"
|
||||||
app:tint="@color/white"
|
app:tint="@color/white"
|
||||||
android:contentDescription="@string/add_from_gps"/>
|
tools:ignore="DuplicateClickableBoundsCheck"
|
||||||
|
android:contentDescription="@string/add_from_map" />
|
||||||
|
|
||||||
<!-- Main FAB -->
|
<!-- Add from current position FAB -->
|
||||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||||
android:id="@+id/open_fab"
|
android:id="@+id/add_from_gps"
|
||||||
android:layout_margin="16dp"
|
android:layout_margin="24dp"
|
||||||
android:layout_gravity="bottom|end"
|
android:layout_gravity="bottom|end"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:src="@drawable/ic_add"
|
app:fabSize="mini"
|
||||||
app:backgroundTint="@color/defaultBrand"
|
android:src="@drawable/ic_add_gps"
|
||||||
app:tint="@color/white"
|
app:backgroundTint="@color/defaultBrand"
|
||||||
android:contentDescription="@string/open_fab"/>
|
app:tint="@color/white"
|
||||||
|
android:contentDescription="@string/add_from_gps"/>
|
||||||
|
|
||||||
|
<!-- Main FAB -->
|
||||||
|
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||||
|
android:id="@+id/open_fab"
|
||||||
|
android:layout_margin="16dp"
|
||||||
|
android:layout_gravity="bottom|end"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:src="@drawable/ic_add"
|
||||||
|
app:backgroundTint="@color/defaultBrand"
|
||||||
|
app:tint="@color/white"
|
||||||
|
android:contentDescription="@string/open_fab"/>
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
@ -35,8 +35,7 @@
|
|||||||
<com.google.android.material.navigation.NavigationView
|
<com.google.android.material.navigation.NavigationView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_gravity="start"
|
android:layout_gravity="start">
|
||||||
android:fitsSystemWindows="true">
|
|
||||||
|
|
||||||
<androidx.core.widget.NestedScrollView
|
<androidx.core.widget.NestedScrollView
|
||||||
android:id="@+id/scrollView"
|
android:id="@+id/scrollView"
|
||||||
@ -49,37 +48,43 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<RelativeLayout
|
<FrameLayout
|
||||||
android:id="@+id/header_view"
|
android:id="@+id/header_view"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="@dimen/drawer_header_height"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/defaultBrand">
|
android:background="@color/defaultBrand">
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
<LinearLayout
|
||||||
android:id="@+id/logo"
|
android:layout_width="match_parent"
|
||||||
android:layout_width="@dimen/drawer_header_logo_size"
|
|
||||||
android:layout_height="@dimen/drawer_header_logo_size"
|
|
||||||
android:layout_centerVertical="true"
|
|
||||||
android:layout_margin="@dimen/spacer_2x"
|
|
||||||
android:gravity="center"
|
|
||||||
android:src="@drawable/ic_app" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/app_name"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginRight="20dp"
|
android:gravity="center_vertical">
|
||||||
android:layout_centerVertical="true"
|
|
||||||
android:layout_toEndOf="@id/logo"
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
android:ellipsize="end"
|
android:id="@+id/logo"
|
||||||
android:lines="2"
|
android:layout_width="@dimen/drawer_header_logo_size"
|
||||||
android:fontFamily="sans-serif-light"
|
android:layout_height="@dimen/drawer_header_logo_size"
|
||||||
android:gravity="center_vertical"
|
android:layout_margin="@dimen/spacer_2x"
|
||||||
android:text="@string/app_name"
|
android:gravity="center"
|
||||||
android:textColor="@android:color/white"
|
android:src="@drawable/ic_app" />
|
||||||
android:textSize="24sp"
|
|
||||||
android:layout_toRightOf="@id/logo" />
|
<TextView
|
||||||
</RelativeLayout>
|
android:id="@+id/app_name"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="20dp"
|
||||||
|
android:layout_marginBottom="20dp"
|
||||||
|
android:layout_marginRight="20dp"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:lines="2"
|
||||||
|
android:fontFamily="sans-serif-light"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:text="@string/app_name"
|
||||||
|
android:textColor="@android:color/white"
|
||||||
|
android:textSize="24sp"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
android:id="@+id/navigationCommon"
|
android:id="@+id/navigationCommon"
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/toolbar_container"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="10dp">
|
android:layout_marginTop="10dp">
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
<com.google.android.material.appbar.CollapsingToolbarLayout
|
<com.google.android.material.appbar.CollapsingToolbarLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:fitsSystemWindows="true"
|
|
||||||
app:contentScrim="?android:attr/colorPrimary"
|
app:contentScrim="?android:attr/colorPrimary"
|
||||||
app:layout_scrollFlags="scroll|enterAlways"
|
app:layout_scrollFlags="scroll|enterAlways"
|
||||||
app:toolbarId="@+id/toolbar" >
|
app:toolbarId="@+id/toolbar" >
|
||||||
|
@ -53,17 +53,24 @@
|
|||||||
|
|
||||||
</androidx.appcompat.widget.LinearLayoutCompat>
|
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
<FrameLayout
|
||||||
android:id="@+id/center_position"
|
android:id="@+id/center_position_container"
|
||||||
android:layout_width="@dimen/floating_bar_height"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="@dimen/floating_bar_height"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginRight="100dp"
|
android:layout_marginRight="100dp"
|
||||||
android:layout_marginBottom="25dp"
|
android:layout_gravity="bottom|right">
|
||||||
android:layout_gravity="bottom|right"
|
|
||||||
android:background="@drawable/unselected_floating_semitransparent_button_background"
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
android:padding="5dp"
|
android:id="@+id/center_position"
|
||||||
android:tint="@color/text_color"
|
android:layout_width="@dimen/floating_bar_height"
|
||||||
android:src="@drawable/ic_add_gps"
|
android:layout_height="@dimen/floating_bar_height"
|
||||||
android:visibility="gone"/>
|
android:layout_marginBottom="25dp"
|
||||||
|
android:background="@drawable/unselected_floating_semitransparent_button_background"
|
||||||
|
android:padding="5dp"
|
||||||
|
android:tint="@color/text_color"
|
||||||
|
android:src="@drawable/ic_add_gps"
|
||||||
|
android:visibility="visible"/>
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
@ -22,7 +22,7 @@
|
|||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="90dp"
|
android:layout_height="wrap_content"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:clickable="true"
|
android:clickable="true"
|
||||||
android:focusable="true">
|
android:focusable="true">
|
||||||
@ -32,6 +32,8 @@
|
|||||||
android:layout_width="64dp"
|
android:layout_width="64dp"
|
||||||
android:layout_height="64dp"
|
android:layout_height="64dp"
|
||||||
android:layout_marginStart="4dp"
|
android:layout_marginStart="4dp"
|
||||||
|
android:layout_marginTop="14dp"
|
||||||
|
android:layout_marginBottom="14dp"
|
||||||
android:layout_weight="0"
|
android:layout_weight="0"
|
||||||
android:background="@drawable/ic_list_pin"
|
android:background="@drawable/ic_list_pin"
|
||||||
android:gravity="top|center"
|
android:gravity="top|center"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user