Pre-release
This commit is contained in:
		
							
								
								
									
										17
									
								
								.idea/deploymentTargetDropDown.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										17
									
								
								.idea/deploymentTargetDropDown.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,17 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="UTF-8"?> |  | ||||||
| <project version="4"> |  | ||||||
|   <component name="deploymentTargetDropDown"> |  | ||||||
|     <runningDeviceTargetSelectedWithDropDown> |  | ||||||
|       <Target> |  | ||||||
|         <type value="RUNNING_DEVICE_TARGET" /> |  | ||||||
|         <deviceKey> |  | ||||||
|           <Key> |  | ||||||
|             <type value="SERIAL_NUMBER" /> |  | ||||||
|             <value value="830cb6b6" /> |  | ||||||
|           </Key> |  | ||||||
|         </deviceKey> |  | ||||||
|       </Target> |  | ||||||
|     </runningDeviceTargetSelectedWithDropDown> |  | ||||||
|     <timeTargetWasSelectedWithDropDown value="2021-09-15T13:58:51.175333Z" /> |  | ||||||
|   </component> |  | ||||||
| </project> |  | ||||||
							
								
								
									
										3
									
								
								.idea/misc.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										3
									
								
								.idea/misc.xml
									
									
									
										generated
									
									
									
								
							| @@ -6,6 +6,9 @@ | |||||||
|         <entry key="../../../../layout/custom_preview.xml" value="0.5661458333333333" /> |         <entry key="../../../../layout/custom_preview.xml" value="0.5661458333333333" /> | ||||||
|         <entry key="app/src/main/res/drawable/floating_semitransparent_button_background.xml" value="0.512962962962963" /> |         <entry key="app/src/main/res/drawable/floating_semitransparent_button_background.xml" value="0.512962962962963" /> | ||||||
|         <entry key="app/src/main/res/drawable/ic_map_pin.xml" value="0.6425925925925926" /> |         <entry key="app/src/main/res/drawable/ic_map_pin.xml" value="0.6425925925925926" /> | ||||||
|  |         <entry key="app/src/main/res/drawable/ic_more.xml" value="0.6166666666666667" /> | ||||||
|  |         <entry key="app/src/main/res/drawable/ic_nav.xml" value="0.6083333333333333" /> | ||||||
|  |         <entry key="app/src/main/res/drawable/ic_share.xml" value="0.8828125" /> | ||||||
|         <entry key="app/src/main/res/layout/activity_geofavorite_detail.xml" value="0.4" /> |         <entry key="app/src/main/res/layout/activity_geofavorite_detail.xml" value="0.4" /> | ||||||
|         <entry key="app/src/main/res/layout/activity_list_view.xml" value="0.5307291666666667" /> |         <entry key="app/src/main/res/layout/activity_list_view.xml" value="0.5307291666666667" /> | ||||||
|         <entry key="app/src/main/res/layout/activity_main.xml" value="0.5307291666666667" /> |         <entry key="app/src/main/res/layout/activity_main.xml" value="0.5307291666666667" /> | ||||||
|   | |||||||
| @@ -73,6 +73,9 @@ dependencies { | |||||||
|     implementation "com.github.nextcloud:Android-SingleSignOn:0.5.6" |     implementation "com.github.nextcloud:Android-SingleSignOn:0.5.6" | ||||||
|  |  | ||||||
|     // OSMDroid |     // OSMDroid | ||||||
|     compile 'org.osmdroid:osmdroid-android:6.1.10' |     implementation 'org.osmdroid:osmdroid-android:6.1.10' | ||||||
|  |  | ||||||
|  |     //Threeten-Backport (ports Java 8 Date API on Java 6+) | ||||||
|  |     implementation 'org.threeten:threetenbp:1.5.1' | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -19,6 +19,7 @@ package it.danieleverducci.nextcloudmaps.activity.detail; | |||||||
|  |  | ||||||
| import android.Manifest; | import android.Manifest; | ||||||
| import android.content.Context; | import android.content.Context; | ||||||
|  | import android.content.Intent; | ||||||
| import android.content.pm.PackageManager; | import android.content.pm.PackageManager; | ||||||
| import android.graphics.Color; | import android.graphics.Color; | ||||||
| import android.location.Location; | import android.location.Location; | ||||||
| @@ -43,13 +44,17 @@ import org.osmdroid.config.Configuration; | |||||||
| import org.osmdroid.util.GeoPoint; | import org.osmdroid.util.GeoPoint; | ||||||
| import org.osmdroid.views.CustomZoomButtonsController; | import org.osmdroid.views.CustomZoomButtonsController; | ||||||
| import org.osmdroid.views.overlay.Marker; | import org.osmdroid.views.overlay.Marker; | ||||||
|  | import org.threeten.bp.format.DateTimeFormatter; | ||||||
|  | import org.threeten.bp.format.FormatStyle; | ||||||
|  |  | ||||||
| import java.util.Date; | import java.util.Date; | ||||||
|  |  | ||||||
| import it.danieleverducci.nextcloudmaps.R; | import it.danieleverducci.nextcloudmaps.R; | ||||||
|  | import it.danieleverducci.nextcloudmaps.activity.main.MainActivity; | ||||||
| import it.danieleverducci.nextcloudmaps.api.ApiProvider; | import it.danieleverducci.nextcloudmaps.api.ApiProvider; | ||||||
| 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.IntentGenerator; | ||||||
| import retrofit2.Call; | import retrofit2.Call; | ||||||
| import retrofit2.Callback; | import retrofit2.Callback; | ||||||
| import retrofit2.Response; | import retrofit2.Response; | ||||||
| @@ -81,6 +86,21 @@ public class GeofavoriteDetailActivity extends AppCompatActivity implements Loca | |||||||
|                 finish(); |                 finish(); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|  |             @Override | ||||||
|  |             public void onActionIconShareClicked() { | ||||||
|  |                 startActivity(Intent.createChooser(IntentGenerator.newShareIntent(GeofavoriteDetailActivity.this, mGeofavorite), getString(R.string.share_via))); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             @Override | ||||||
|  |             public void onActionIconNavClicked() { | ||||||
|  |                 startActivity(IntentGenerator.newGeoUriIntent(GeofavoriteDetailActivity.this, mGeofavorite)); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             @Override | ||||||
|  |             public void onActionIconDeleteClicked() { | ||||||
|  |                 // TODO | ||||||
|  |             } | ||||||
|  |  | ||||||
|             @Override |             @Override | ||||||
|             public void onSubmit() { |             public void onSubmit() { | ||||||
|                 saveGeofavorite(); |                 saveGeofavorite(); | ||||||
| @@ -102,6 +122,8 @@ public class GeofavoriteDetailActivity extends AppCompatActivity implements Loca | |||||||
|             mGeofavorite.setCategory(DEFAULT_CATEGORY); |             mGeofavorite.setCategory(DEFAULT_CATEGORY); | ||||||
|             mGeofavorite.setDateCreated(System.currentTimeMillis()); |             mGeofavorite.setDateCreated(System.currentTimeMillis()); | ||||||
|             mGeofavorite.setDateModified(System.currentTimeMillis()); |             mGeofavorite.setDateModified(System.currentTimeMillis()); | ||||||
|  |             mViewHolder.hideActions(); | ||||||
|  |  | ||||||
|             // Precompile location |             // Precompile location | ||||||
|             getLocation(); |             getLocation(); | ||||||
|         } |         } | ||||||
| @@ -255,6 +277,7 @@ public class GeofavoriteDetailActivity extends AppCompatActivity implements Loca | |||||||
|  |  | ||||||
|     private class ViewHolder implements View.OnClickListener { |     private class ViewHolder implements View.OnClickListener { | ||||||
|         private final ActivityGeofavoriteDetailBinding binding; |         private final ActivityGeofavoriteDetailBinding binding; | ||||||
|  |         private DateTimeFormatter dateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG); | ||||||
|         private OnSubmitListener listener; |         private OnSubmitListener listener; | ||||||
|         private Marker mapMarker; |         private Marker mapMarker; | ||||||
|  |  | ||||||
| @@ -263,6 +286,9 @@ public class GeofavoriteDetailActivity extends AppCompatActivity implements Loca | |||||||
|             this.binding.submitBt.setOnClickListener(this); |             this.binding.submitBt.setOnClickListener(this); | ||||||
|             this.binding.mapBt.setOnClickListener(this); |             this.binding.mapBt.setOnClickListener(this); | ||||||
|             this.binding.backBt.setOnClickListener(this); |             this.binding.backBt.setOnClickListener(this); | ||||||
|  |             this.binding.actionIconShare.setOnClickListener(this); | ||||||
|  |             this.binding.actionIconDelete.setOnClickListener(this); | ||||||
|  |             this.binding.actionIconNav.setOnClickListener(this); | ||||||
|  |  | ||||||
|             // Set map properties |             // Set map properties | ||||||
|             this.binding.map.getZoomController().setVisibility(CustomZoomButtonsController.Visibility.NEVER); |             this.binding.map.getZoomController().setVisibility(CustomZoomButtonsController.Visibility.NEVER); | ||||||
| @@ -283,8 +309,8 @@ public class GeofavoriteDetailActivity extends AppCompatActivity implements Loca | |||||||
|             binding.collapsingToolbar.setTitle(item.getName() != null ? item.getName() : getString(R.string.new_geobookmark)); |             binding.collapsingToolbar.setTitle(item.getName() != null ? item.getName() : getString(R.string.new_geobookmark)); | ||||||
|             binding.nameEt.setText(item.getName()); |             binding.nameEt.setText(item.getName()); | ||||||
|             binding.descriptionEt.setText(item.getComment()); |             binding.descriptionEt.setText(item.getComment()); | ||||||
|             binding.createdTv.setText(new Date(item.getDateCreated() * 1000).toString()); |             binding.createdTv.setText(item.getLocalDateCreated().format(dateFormatter)); | ||||||
|             binding.modifiedTv.setText(new Date(item.getDateModified() * 1000).toString()); |             binding.modifiedTv.setText(item.getLocalDateCreated().format(dateFormatter)); | ||||||
|             binding.categoryTv.setText(item.getCategory()); // TODO: Category spinner from existing categories |             binding.categoryTv.setText(item.getCategory()); // TODO: Category spinner from existing categories | ||||||
|             updateViewCoords(item); |             updateViewCoords(item); | ||||||
|         } |         } | ||||||
| @@ -322,6 +348,10 @@ public class GeofavoriteDetailActivity extends AppCompatActivity implements Loca | |||||||
|             binding.accuracyTv.setVisibility(View.GONE); |             binding.accuracyTv.setVisibility(View.GONE); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         public void hideActions() { | ||||||
|  |             binding.actionIcons.setVisibility(View.GONE); | ||||||
|  |         } | ||||||
|  |  | ||||||
|         public void setOnSubmitListener(OnSubmitListener listener) { |         public void setOnSubmitListener(OnSubmitListener listener) { | ||||||
|             this.listener = listener; |             this.listener = listener; | ||||||
|         } |         } | ||||||
| @@ -345,6 +375,17 @@ public class GeofavoriteDetailActivity extends AppCompatActivity implements Loca | |||||||
|             if (v.getId() == R.id.back_bt && this.listener != null) { |             if (v.getId() == R.id.back_bt && this.listener != null) { | ||||||
|                 this.listener.onBackPressed(); |                 this.listener.onBackPressed(); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|  |             // Actions | ||||||
|  |             if (v.getId() == R.id.action_icon_share && this.listener != null) { | ||||||
|  |                 this.listener.onActionIconShareClicked(); | ||||||
|  |             } | ||||||
|  |             if (v.getId() == R.id.action_icon_nav && this.listener != null) { | ||||||
|  |                 this.listener.onActionIconNavClicked(); | ||||||
|  |             } | ||||||
|  |             if (v.getId() == R.id.action_icon_delete && this.listener != null) { | ||||||
|  |                 this.listener.onActionIconDeleteClicked(); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -352,5 +393,8 @@ public class GeofavoriteDetailActivity extends AppCompatActivity implements Loca | |||||||
|         void onSubmit(); |         void onSubmit(); | ||||||
|         void onMapClicked(); |         void onMapClicked(); | ||||||
|         void onBackPressed(); |         void onBackPressed(); | ||||||
|  |         void onActionIconShareClicked(); | ||||||
|  |         void onActionIconNavClicked(); | ||||||
|  |         void onActionIconDeleteClicked(); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -21,13 +21,9 @@ | |||||||
| package it.danieleverducci.nextcloudmaps.activity.main; | package it.danieleverducci.nextcloudmaps.activity.main; | ||||||
|  |  | ||||||
| import android.content.Context; | import android.content.Context; | ||||||
| import android.content.Intent; |  | ||||||
| import android.text.Html; | import android.text.Html; | ||||||
| import android.util.Log; | import android.util.Log; | ||||||
| import android.view.ContextMenu; |  | ||||||
| import android.view.LayoutInflater; | import android.view.LayoutInflater; | ||||||
| import android.view.Menu; |  | ||||||
| import android.view.MenuInflater; |  | ||||||
| import android.view.MenuItem; | import android.view.MenuItem; | ||||||
| import android.view.View; | import android.view.View; | ||||||
| import android.view.ViewGroup; | import android.view.ViewGroup; | ||||||
| @@ -40,6 +36,9 @@ import android.widget.TextView; | |||||||
| import androidx.annotation.NonNull; | import androidx.annotation.NonNull; | ||||||
| import androidx.recyclerview.widget.RecyclerView; | import androidx.recyclerview.widget.RecyclerView; | ||||||
|  |  | ||||||
|  | import org.threeten.bp.format.DateTimeFormatter; | ||||||
|  | import org.threeten.bp.format.FormatStyle; | ||||||
|  |  | ||||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||||
| import java.util.Collection; | import java.util.Collection; | ||||||
| import java.util.Collections; | import java.util.Collections; | ||||||
| @@ -57,6 +56,7 @@ public class GeofavoriteAdapter extends RecyclerView.Adapter<GeofavoriteAdapter. | |||||||
|  |  | ||||||
|     private Context context; |     private Context context; | ||||||
|     private ItemClickListener itemClickListener; |     private ItemClickListener itemClickListener; | ||||||
|  |     private DateTimeFormatter dateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT); | ||||||
|  |  | ||||||
|     private List<Geofavorite> geofavoriteList = new ArrayList<>(); |     private List<Geofavorite> geofavoriteList = new ArrayList<>(); | ||||||
|     private List<Geofavorite> geofavoriteListFiltered = new ArrayList<>(); |     private List<Geofavorite> geofavoriteListFiltered = new ArrayList<>(); | ||||||
| @@ -117,6 +117,7 @@ public class GeofavoriteAdapter extends RecyclerView.Adapter<GeofavoriteAdapter. | |||||||
|  |  | ||||||
|         holder.tv_title.setText(Html.fromHtml(geofavorite.getName())); |         holder.tv_title.setText(Html.fromHtml(geofavorite.getName())); | ||||||
|         holder.tv_content.setText(geofavorite.getComment()); |         holder.tv_content.setText(geofavorite.getComment()); | ||||||
|  |         holder.tv_date.setText(geofavorite.getLocalDateCreated().format(dateFormatter)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
| @@ -164,9 +165,9 @@ public class GeofavoriteAdapter extends RecyclerView.Adapter<GeofavoriteAdapter. | |||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     class GeofavoriteViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { |     class GeofavoriteViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { | ||||||
|         TextView tv_title, tv_content; |         TextView tv_title, tv_content, tv_date; | ||||||
|         ImageView bt_context_menu; |         ImageView bt_context_menu; | ||||||
|         ImageView bt_share; |         ImageView bt_nav; | ||||||
|  |  | ||||||
|         ItemClickListener itemClickListener; |         ItemClickListener itemClickListener; | ||||||
|  |  | ||||||
| @@ -176,14 +177,15 @@ public class GeofavoriteAdapter extends RecyclerView.Adapter<GeofavoriteAdapter. | |||||||
|  |  | ||||||
|             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); | ||||||
|  |             tv_date = itemView.findViewById(R.id.date); | ||||||
|             bt_context_menu = itemView.findViewById(R.id.geofav_context_menu_bt); |             bt_context_menu = itemView.findViewById(R.id.geofav_context_menu_bt); | ||||||
|             bt_share = itemView.findViewById(R.id.geofav_share_bt); |             bt_nav = itemView.findViewById(R.id.geofav_nav_bt); | ||||||
|  |  | ||||||
|             this.itemClickListener = itemClickListener; |             this.itemClickListener = itemClickListener; | ||||||
|             itemView.setOnClickListener(this); |             itemView.setOnClickListener(this); | ||||||
|  |  | ||||||
|             bt_context_menu.setOnClickListener(this); |             bt_context_menu.setOnClickListener(this); | ||||||
|             bt_share.setOnClickListener(this); |             bt_nav.setOnClickListener(this); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         @Override |         @Override | ||||||
| @@ -192,9 +194,9 @@ public class GeofavoriteAdapter extends RecyclerView.Adapter<GeofavoriteAdapter. | |||||||
|                 case R.id.geofav_context_menu_bt: |                 case R.id.geofav_context_menu_bt: | ||||||
|                     onOverflowIconClicked(view, getAdapterPosition()); |                     onOverflowIconClicked(view, getAdapterPosition()); | ||||||
|                     break; |                     break; | ||||||
|                 case R.id.geofav_share_bt: |                 case R.id.geofav_nav_bt: | ||||||
|                     if (itemClickListener != null) |                     if (itemClickListener != null) | ||||||
|                         itemClickListener.onItemShareClick(get(getAdapterPosition())); |                         itemClickListener.onItemNavClick(get(getAdapterPosition())); | ||||||
|                     break; |                     break; | ||||||
|                 default: |                 default: | ||||||
|                     if (itemClickListener != null) |                     if (itemClickListener != null) | ||||||
| @@ -229,9 +231,9 @@ public class GeofavoriteAdapter extends RecyclerView.Adapter<GeofavoriteAdapter. | |||||||
|         } |         } | ||||||
|         Geofavorite gf = get(overflowMenuSelectedPosition); |         Geofavorite gf = get(overflowMenuSelectedPosition); | ||||||
|         overflowMenuSelectedPosition = -1; |         overflowMenuSelectedPosition = -1; | ||||||
|         if (item.getItemId() == R.id.list_context_menu_detail && itemClickListener != null) |         if (item.getItemId() == R.id.list_context_menu_share && itemClickListener != null) | ||||||
|             itemClickListener.onItemDetailsClick(gf); |             itemClickListener.onItemShareClick(gf); | ||||||
|         if (item.getItemId() == R.id.list_context_menu_delete) |         if (item.getItemId() == R.id.list_context_menu_delete && itemClickListener != null) | ||||||
|             itemClickListener.onItemDeleteClick(gf); |             itemClickListener.onItemDeleteClick(gf); | ||||||
|         return true; |         return true; | ||||||
|     } |     } | ||||||
| @@ -239,7 +241,7 @@ public class GeofavoriteAdapter extends RecyclerView.Adapter<GeofavoriteAdapter. | |||||||
|     public interface ItemClickListener { |     public interface ItemClickListener { | ||||||
|         void onItemClick(Geofavorite item); |         void onItemClick(Geofavorite item); | ||||||
|         void onItemShareClick(Geofavorite item); |         void onItemShareClick(Geofavorite item); | ||||||
|         void onItemDetailsClick(Geofavorite item); |         void onItemNavClick(Geofavorite item); | ||||||
|         void onItemDeleteClick(Geofavorite item); |         void onItemDeleteClick(Geofavorite item); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -54,6 +54,7 @@ import it.danieleverducci.nextcloudmaps.activity.login.LoginActivity; | |||||||
| import it.danieleverducci.nextcloudmaps.activity.main.NavigationAdapter.NavigationItem; | import it.danieleverducci.nextcloudmaps.activity.main.NavigationAdapter.NavigationItem; | ||||||
| import it.danieleverducci.nextcloudmaps.activity.main.SortingOrderDialogFragment.OnSortingOrderListener; | import it.danieleverducci.nextcloudmaps.activity.main.SortingOrderDialogFragment.OnSortingOrderListener; | ||||||
| import it.danieleverducci.nextcloudmaps.model.Geofavorite; | import it.danieleverducci.nextcloudmaps.model.Geofavorite; | ||||||
|  | import it.danieleverducci.nextcloudmaps.utils.IntentGenerator; | ||||||
|  |  | ||||||
| import static android.view.View.GONE; | import static android.view.View.GONE; | ||||||
| import static android.view.View.VISIBLE; | import static android.view.View.VISIBLE; | ||||||
| @@ -107,28 +108,18 @@ public class MainActivity extends AppCompatActivity implements MainView, OnSorti | |||||||
|  |  | ||||||
|         rvItemClickListener = new ItemClickListener() { |         rvItemClickListener = new ItemClickListener() { | ||||||
|             @Override |             @Override | ||||||
|             public void onItemClick(Geofavorite geofavorite) { |             public void onItemClick(Geofavorite item) { | ||||||
|                 Intent i = new Intent(); |                 showGeofavoriteDetailActivity(item); | ||||||
|                 i.setAction(Intent.ACTION_VIEW); |  | ||||||
|                 i.setData(geofavorite.getGeoUri()); |  | ||||||
|                 startActivity(i); |  | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             @Override |             @Override | ||||||
|             public void onItemShareClick(Geofavorite item) { |             public void onItemShareClick(Geofavorite item) { | ||||||
|                 Intent i = new Intent(); |                 startActivity(Intent.createChooser(IntentGenerator.newShareIntent(MainActivity.this, item), getString(R.string.share_via))); | ||||||
|                 i.setAction(Intent.ACTION_SEND); |  | ||||||
|                 i.setType("text/plain"); |  | ||||||
|                 String shareMessage = getString(R.string.share_message) |  | ||||||
|                         .replace("{lat}", ""+item.getLat()) |  | ||||||
|                         .replace("{lng}", ""+item.getLng()); |  | ||||||
|                 i.putExtra(Intent.EXTRA_TEXT, shareMessage ); |  | ||||||
|                 startActivity(Intent.createChooser(i, getString(R.string.share_via))); |  | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             @Override |             @Override | ||||||
|             public void onItemDetailsClick(Geofavorite item) { |             public void onItemNavClick(Geofavorite item) { | ||||||
|                 showGeofavoriteDetailActivity(item); |                 startActivity(IntentGenerator.newGeoUriIntent(MainActivity.this, item)); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             @Override |             @Override | ||||||
|   | |||||||
| @@ -32,6 +32,10 @@ import androidx.databinding.BindingAdapter; | |||||||
| import com.google.gson.annotations.Expose; | import com.google.gson.annotations.Expose; | ||||||
| import com.google.gson.annotations.SerializedName; | import com.google.gson.annotations.SerializedName; | ||||||
|  |  | ||||||
|  | import org.threeten.bp.Instant; | ||||||
|  | import org.threeten.bp.LocalDate; | ||||||
|  | import org.threeten.bp.ZoneId; | ||||||
|  |  | ||||||
| import java.io.Serializable; | import java.io.Serializable; | ||||||
| import java.util.Comparator; | import java.util.Comparator; | ||||||
| import java.util.Date; | import java.util.Date; | ||||||
| @@ -102,10 +106,17 @@ public class Geofavorite implements Serializable { | |||||||
|     public void setDateModified(long dateModified) { |     public void setDateModified(long dateModified) { | ||||||
|         this.dateModified = dateModified; |         this.dateModified = dateModified; | ||||||
|     } |     } | ||||||
|  |     public LocalDate getLocalDateModified() { | ||||||
|  |         return Instant.ofEpochSecond(getDateCreated()).atZone(ZoneId.systemDefault()).toLocalDate(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     public long getDateCreated() { |     public long getDateCreated() { | ||||||
|         return dateCreated; |         return dateCreated; | ||||||
|     } |     } | ||||||
|  |     public LocalDate getLocalDateCreated() { | ||||||
|  |         return Instant.ofEpochSecond(getDateCreated()).atZone(ZoneId.systemDefault()).toLocalDate(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     public void setDateCreated(long dateCreated) { |     public void setDateCreated(long dateCreated) { | ||||||
|         this.dateCreated = dateCreated; |         this.dateCreated = dateCreated; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -0,0 +1,27 @@ | |||||||
|  | package it.danieleverducci.nextcloudmaps.utils; | ||||||
|  |  | ||||||
|  | import android.content.Context; | ||||||
|  | import android.content.Intent; | ||||||
|  |  | ||||||
|  | import it.danieleverducci.nextcloudmaps.R; | ||||||
|  | import it.danieleverducci.nextcloudmaps.model.Geofavorite; | ||||||
|  |  | ||||||
|  | public class IntentGenerator { | ||||||
|  |     public static Intent newShareIntent(Context context, Geofavorite item) { | ||||||
|  |         Intent i = new Intent(); | ||||||
|  |         i.setAction(Intent.ACTION_SEND); | ||||||
|  |         i.setType("text/plain"); | ||||||
|  |         String shareMessage = context.getString(R.string.share_message) | ||||||
|  |                 .replace("{lat}", ""+item.getLat()) | ||||||
|  |                 .replace("{lng}", ""+item.getLng()); | ||||||
|  |         i.putExtra(Intent.EXTRA_TEXT, shareMessage ); | ||||||
|  |         return i; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public static Intent newGeoUriIntent(Context context, Geofavorite item) { | ||||||
|  |         Intent i = new Intent(); | ||||||
|  |         i.setAction(Intent.ACTION_VIEW); | ||||||
|  |         i.setData(item.getGeoUri()); | ||||||
|  |         return i; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										5
									
								
								app/src/main/res/drawable/ic_edit.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								app/src/main/res/drawable/ic_edit.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | |||||||
|  | <vector android:height="24dp" android:tint="#0082C9" | ||||||
|  |     android:viewportHeight="24" android:viewportWidth="24" | ||||||
|  |     android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> | ||||||
|  |     <path android:fillColor="@android:color/white" android:pathData="M3,17.25V21h3.75L17.81,9.94l-3.75,-3.75L3,17.25zM20.71,7.04c0.39,-0.39 0.39,-1.02 0,-1.41l-2.34,-2.34c-0.39,-0.39 -1.02,-0.39 -1.41,0l-1.83,1.83 3.75,3.75 1.83,-1.83z"/> | ||||||
|  | </vector> | ||||||
							
								
								
									
										10
									
								
								app/src/main/res/drawable/ic_nav.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								app/src/main/res/drawable/ic_nav.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | <vector xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|  |     android:width="24dp" | ||||||
|  |     android:height="24dp" | ||||||
|  |     android:viewportWidth="24" | ||||||
|  |     android:viewportHeight="24" | ||||||
|  |     android:tint="?attr/colorControlNormal"> | ||||||
|  |   <path | ||||||
|  |       android:fillColor="@android:color/white" | ||||||
|  |       android:pathData="M20.5,3l-0.16,0.03L15,5.1 9,3 3.36,4.9c-0.21,0.07 -0.36,0.25 -0.36,0.48V20.5c0,0.28 0.22,0.5 0.5,0.5l0.16,-0.03L9,18.9l6,2.1 5.64,-1.9c0.21,-0.07 0.36,-0.25 0.36,-0.48V3.5c0,-0.28 -0.22,-0.5 -0.5,-0.5zM15,19l-6,-2.11V5l6,2.11V19z"/> | ||||||
|  | </vector> | ||||||
| @@ -87,6 +87,43 @@ | |||||||
|                     android:textColor="@android:color/white" |                     android:textColor="@android:color/white" | ||||||
|                     android:background="@android:color/darker_gray"/> |                     android:background="@android:color/darker_gray"/> | ||||||
|  |  | ||||||
|  |                 <LinearLayout | ||||||
|  |                     android:id="@+id/action_icons" | ||||||
|  |                     android:layout_width="match_parent" | ||||||
|  |                     android:layout_height="wrap_content" | ||||||
|  |                     android:orientation="horizontal"> | ||||||
|  |  | ||||||
|  |                     <ImageView | ||||||
|  |                         android:id="@+id/action_icon_share" | ||||||
|  |                         android:layout_width="0dp" | ||||||
|  |                         android:layout_height="wrap_content" | ||||||
|  |                         android:layout_weight="1" | ||||||
|  |                         android:padding="10dp" | ||||||
|  |                         android:src="@drawable/ic_share" | ||||||
|  |                         android:tint="@color/defaultBrand"/> | ||||||
|  |  | ||||||
|  |                     <ImageView | ||||||
|  |                         android:id="@+id/action_icon_nav" | ||||||
|  |                         android:layout_width="0dp" | ||||||
|  |                         android:layout_height="wrap_content" | ||||||
|  |                         android:layout_weight="1" | ||||||
|  |                         android:padding="10dp" | ||||||
|  |                         android:src="@drawable/ic_nav" | ||||||
|  |                         android:tint="@color/defaultBrand"/> | ||||||
|  |  | ||||||
|  |                     <ImageView | ||||||
|  |                         android:id="@+id/action_icon_delete" | ||||||
|  |                         android:layout_width="0dp" | ||||||
|  |                         android:layout_height="wrap_content" | ||||||
|  |                         android:layout_weight="1" | ||||||
|  |                         android:padding="10dp" | ||||||
|  |                         android:src="@drawable/ic_delete_grey" | ||||||
|  |                         android:tint="@color/defaultBrand" | ||||||
|  |                         android:visibility="gone"/> <!-- TODO Implement delete --> | ||||||
|  |  | ||||||
|  |  | ||||||
|  |                 </LinearLayout> | ||||||
|  |  | ||||||
|                 <EditText |                 <EditText | ||||||
|                     android:id="@+id/name_et" |                     android:id="@+id/name_et" | ||||||
|                     android:layout_width="match_parent" |                     android:layout_width="match_parent" | ||||||
| @@ -99,7 +136,9 @@ | |||||||
|                     android:singleLine="true" |                     android:singleLine="true" | ||||||
|                     android:textColor="@color/defaultBrand" |                     android:textColor="@color/defaultBrand" | ||||||
|                     android:textAppearance="@style/TextAppearance.AppCompat.Title" |                     android:textAppearance="@style/TextAppearance.AppCompat.Title" | ||||||
|                     android:background="@android:color/transparent"/> |                     android:background="@android:color/transparent" | ||||||
|  |                     android:drawableLeft="@drawable/ic_edit" | ||||||
|  |                     android:drawablePadding="5dp"/> | ||||||
|  |  | ||||||
|                 <EditText |                 <EditText | ||||||
|                     android:id="@+id/description_et" |                     android:id="@+id/description_et" | ||||||
| @@ -111,6 +150,8 @@ | |||||||
|                     android:inputType="textMultiLine" |                     android:inputType="textMultiLine" | ||||||
|                     android:maxLines="10" |                     android:maxLines="10" | ||||||
|                     android:background="@android:color/transparent" |                     android:background="@android:color/transparent" | ||||||
|  |                     android:drawableLeft="@drawable/ic_edit" | ||||||
|  |                     android:drawablePadding="5dp" | ||||||
|                     android:hint="@string/description"/> |                     android:hint="@string/description"/> | ||||||
|  |  | ||||||
|                 <TextView |                 <TextView | ||||||
|   | |||||||
| @@ -23,13 +23,14 @@ | |||||||
|     android:layout_width="match_parent" |     android:layout_width="match_parent" | ||||||
|     android:layout_height="90dp" |     android:layout_height="90dp" | ||||||
|     android:gravity="center_vertical" |     android:gravity="center_vertical" | ||||||
|     android:padding="12dp" |  | ||||||
|     android:clickable="true" |     android:clickable="true" | ||||||
|     android:focusable="true"> |     android:focusable="true"> | ||||||
|  |  | ||||||
|     <ImageView |     <ImageView | ||||||
|         android:layout_width="wrap_content" |         android:layout_width="32dp" | ||||||
|         android:layout_height="match_parent" |         android:layout_height="32dp" | ||||||
|  |         android:layout_marginStart="12dp" | ||||||
|  |         android:contentDescription="@null" | ||||||
|         android:layout_weight="0" |         android:layout_weight="0" | ||||||
|         android:src="@mipmap/ic_launcher"/> |         android:src="@mipmap/ic_launcher"/> | ||||||
|  |  | ||||||
| @@ -37,51 +38,76 @@ | |||||||
|         android:orientation="vertical" |         android:orientation="vertical" | ||||||
|         android:layout_width="match_parent" |         android:layout_width="match_parent" | ||||||
|         android:layout_height="wrap_content" |         android:layout_height="wrap_content" | ||||||
|         android:layout_marginStart="10dp" |         android:layout_marginStart="16dp" | ||||||
|  |         android:layout_marginEnd="8dp" | ||||||
|         android:layout_weight="1"> |         android:layout_weight="1"> | ||||||
|  |  | ||||||
|         <TextView |         <TextView | ||||||
|             android:id="@+id/title" |             android:id="@+id/title" | ||||||
|             android:layout_width="match_parent" |             android:layout_width="match_parent" | ||||||
|             android:layout_height="wrap_content" |             android:layout_height="wrap_content" | ||||||
|             android:textSize="@dimen/note_font_size_item_title" |  | ||||||
|             android:textStyle="bold" |  | ||||||
|             android:singleLine="true" |             android:singleLine="true" | ||||||
|             android:maxLines="1" |             android:maxLines="1" | ||||||
|             android:lines="1" |             android:lines="1" | ||||||
|             android:ellipsize="end" |             android:ellipsize="middle" | ||||||
|  |             android:textColor="@color/text_color" | ||||||
|  |             android:textSize="@dimen/two_line_primary_text_size" | ||||||
|             tools:text="@tools:sample/lorem/random"> |             tools:text="@tools:sample/lorem/random"> | ||||||
|         </TextView> |         </TextView> | ||||||
|  |  | ||||||
|         <TextView |         <LinearLayout | ||||||
|             android:id="@+id/content" |  | ||||||
|             android:layout_width="match_parent" |             android:layout_width="match_parent" | ||||||
|             android:layout_height="wrap_content" |             android:layout_height="wrap_content" | ||||||
|             android:layout_marginTop="5dp" |             android:orientation="horizontal"> | ||||||
|             android:textSize="@dimen/note_font_size_item_content" |  | ||||||
|             android:maxLines="2" |             <TextView | ||||||
|  |                 android:id="@+id/content" | ||||||
|  |                 android:layout_width="0dp" | ||||||
|  |                 android:layout_height="wrap_content" | ||||||
|  |                 android:layout_weight="1" | ||||||
|  |                 android:layout_marginEnd="10dp" | ||||||
|  |                 android:textColor="@color/secondary_text_color" | ||||||
|  |                 android:textSize="@dimen/two_line_secondary_text_size" | ||||||
|  |                 android:maxLines="1" | ||||||
|  |                 android:lines="1" | ||||||
|  |                 android:ellipsize="end" | ||||||
|                 android:gravity="center_vertical" |                 android:gravity="center_vertical" | ||||||
|                 tools:text="@tools:sample/lorem/random"> |                 tools:text="@tools:sample/lorem/random"> | ||||||
|             </TextView> |             </TextView> | ||||||
|  |  | ||||||
|  |             <TextView | ||||||
|  |                 android:id="@+id/date" | ||||||
|  |                 android:layout_width="wrap_content" | ||||||
|  |                 android:layout_height="wrap_content" | ||||||
|  |                 android:layout_weight="0" | ||||||
|  |                 android:textColor="@color/secondary_text_color" | ||||||
|  |                 android:textSize="@dimen/two_line_secondary_text_size" | ||||||
|  |                 android:maxLines="1" | ||||||
|  |                 android:lines="1" | ||||||
|  |                 android:gravity="center_vertical" | ||||||
|  |                 tools:text="00/00/0000"> | ||||||
|  |             </TextView> | ||||||
|  |  | ||||||
|  |         </LinearLayout> | ||||||
|  |  | ||||||
|     </LinearLayout> |     </LinearLayout> | ||||||
|  |  | ||||||
|     <ImageView |     <ImageView | ||||||
|         android:id="@+id/geofav_share_bt" |         android:id="@+id/geofav_nav_bt" | ||||||
|         android:layout_width="wrap_content" |         android:layout_width="wrap_content" | ||||||
|         android:layout_height="match_parent" |         android:layout_height="match_parent" | ||||||
|         android:layout_weight="0" |         android:layout_weight="0" | ||||||
|         android:padding="10dp" |         android:padding="8dp" | ||||||
|         android:src="@drawable/ic_share" |         android:src="@drawable/ic_nav" | ||||||
|         android:tint="@color/list_text" /> <!-- TODO: app:tint is not working --> |         android:tint="@color/secondary_text_color" /> <!-- TODO: app:tint is not working --> | ||||||
|  |  | ||||||
|     <ImageView |     <ImageView | ||||||
|         android:id="@+id/geofav_context_menu_bt" |         android:id="@+id/geofav_context_menu_bt" | ||||||
|         android:layout_width="wrap_content" |         android:layout_width="wrap_content" | ||||||
|         android:layout_height="match_parent" |         android:layout_height="match_parent" | ||||||
|         android:layout_weight="0" |         android:layout_weight="0" | ||||||
|         android:padding="10dp" |         android:padding="8dp" | ||||||
|         android:src="@drawable/ic_more" |         android:src="@drawable/ic_more" | ||||||
|         android:tint="@color/list_text" /> <!-- TODO: app:tint is not working --> |         android:tint="@color/secondary_text_color" /> <!-- TODO: app:tint is not working --> | ||||||
|  |  | ||||||
| </LinearLayout> | </LinearLayout> | ||||||
| @@ -1,10 +1,10 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="utf-8"?> | ||||||
| <menu xmlns:android="http://schemas.android.com/apk/res/android" | <menu 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"> | ||||||
|     <!-- Detail button --> |     <!-- Share button --> | ||||||
|     <item |     <item | ||||||
|         android:id="@+id/list_context_menu_detail" |         android:id="@+id/list_context_menu_share" | ||||||
|         android:title="@string/list_context_menu_detail"/> |         android:title="@string/list_context_menu_share"/> | ||||||
|     <!-- Delete button --> |     <!-- Delete button --> | ||||||
|     <item |     <item | ||||||
|         android:id="@+id/list_context_menu_delete" |         android:id="@+id/list_context_menu_delete" | ||||||
|   | |||||||
| @@ -27,7 +27,8 @@ | |||||||
|     <color name="defaultTint">#202124</color> |     <color name="defaultTint">#202124</color> | ||||||
|  |  | ||||||
|     <!-- List Colors --> |     <!-- List Colors --> | ||||||
|     <color name="list_text">#aaa</color> |     <color name="text_color">#333333</color> | ||||||
|  |     <color name="secondary_text_color">#666666</color> | ||||||
|  |  | ||||||
|     <!-- Generic Colors --> |     <!-- Generic Colors --> | ||||||
|     <color name="white">#fff</color> |     <color name="white">#fff</color> | ||||||
|   | |||||||
| @@ -28,14 +28,12 @@ | |||||||
|     <dimen name="drawer_header_logo_size">42dp</dimen> |     <dimen name="drawer_header_logo_size">42dp</dimen> | ||||||
|  |  | ||||||
|     <!-- Font Sizes --> |     <!-- Font Sizes --> | ||||||
|     <dimen name="note_font_size_item_title">18sp</dimen> |  | ||||||
|     <dimen name="note_font_size_item_content">14sp</dimen> |  | ||||||
|  |  | ||||||
|     <dimen name="zero">0dp</dimen> |     <dimen name="zero">0dp</dimen> | ||||||
|     <dimen name="standard_margin">16dp</dimen> |     <dimen name="standard_margin">16dp</dimen> | ||||||
|     <dimen name="standard_half_margin">8dp</dimen> |     <dimen name="standard_half_margin">8dp</dimen> | ||||||
|     <dimen name="standard_padding">16dp</dimen> |     <dimen name="standard_padding">16dp</dimen> | ||||||
|     <dimen name="standard_half_padding">8dp</dimen> |     <dimen name="standard_half_padding">8dp</dimen> | ||||||
|     <dimen name="two_line_primary_text_size">16sp</dimen> |     <dimen name="two_line_primary_text_size">16sp</dimen> | ||||||
|  |     <dimen name="two_line_secondary_text_size">12sp</dimen> | ||||||
|  |  | ||||||
| </resources> | </resources> | ||||||
|   | |||||||
| @@ -31,7 +31,7 @@ | |||||||
|     <string name="search_in_all">Search by name</string> |     <string name="search_in_all">Search by name</string> | ||||||
|     <string name="share_via">Share via</string> |     <string name="share_via">Share via</string> | ||||||
|     <string name="share_message">Check out this place: {lat}°N, {lng}°E    https://www.openstreetmap.org/#map=17/{lat}/{lng}</string> |     <string name="share_message">Check out this place: {lat}°N, {lng}°E    https://www.openstreetmap.org/#map=17/{lat}/{lng}</string> | ||||||
|     <string name="list_context_menu_detail">Details</string> |     <string name="list_context_menu_share">Share</string> | ||||||
|     <string name="list_context_menu_delete">Delete</string> |     <string name="list_context_menu_delete">Delete</string> | ||||||
|     <string name="dialog_delete_title">Delete geobookmark</string> |     <string name="dialog_delete_title">Delete geobookmark</string> | ||||||
|     <string name="dialog_delete_message">You are about to delete geobookmark {name}. Proceed?</string> |     <string name="dialog_delete_message">You are about to delete geobookmark {name}. Proceed?</string> | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								screenshots/full/1.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								screenshots/full/1.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 132 KiB | 
							
								
								
									
										
											BIN
										
									
								
								screenshots/full/1_tablet.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								screenshots/full/1_tablet.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 113 KiB | 
							
								
								
									
										
											BIN
										
									
								
								screenshots/full/2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								screenshots/full/2.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 132 KiB | 
							
								
								
									
										
											BIN
										
									
								
								screenshots/full/2_tablet.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								screenshots/full/2_tablet.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 119 KiB | 
		Reference in New Issue
	
	Block a user