diff --git a/src/main/java/de/blau/android/Main.java b/src/main/java/de/blau/android/Main.java index 030b2dc91..8cb4506f0 100644 --- a/src/main/java/de/blau/android/Main.java +++ b/src/main/java/de/blau/android/Main.java @@ -6,6 +6,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; import java.util.Deque; @@ -2818,7 +2819,7 @@ public void gotoTrackPoint(@NonNull final Logic logic, @NonNull TrackPoint track private File getImageFile() throws IOException { File outDir = FileUtil.getPublicDirectory(FileUtil.getPublicDirectory(), Paths.DIRECTORY_PATH_PICTURES); String imageFileName = DateFormatter.getFormattedString(DATE_PATTERN_IMAGE_FILE_NAME_PART); - //FIXME this forces the extension to jpg, but it could be a HEIC image + // FIXME this forces the extension to jpg, but it could be a HEIC image File newImageFile = File.createTempFile(imageFileName, "." + FileExtensions.JPG, outDir); Log.d(DEBUG_TAG, "getImageFile " + newImageFile.getAbsolutePath()); return newImageFile; @@ -3332,8 +3333,8 @@ public void performTagEdit(@NonNull final OsmElement selectedElement, @Nullable * @param tags any existing tags to apply * @param showPresets show the preset tab on start up. */ - public void performTagEdit(@NonNull final OsmElement selectedElement, @Nullable PresetElementPath presetPath, @Nullable HashMap tags, - boolean showPresets) { + public & Serializable> void performTagEdit(@NonNull final OsmElement selectedElement, @Nullable PresetElementPath presetPath, + @Nullable M tags, boolean showPresets) { ArrayList presetPathList = new ArrayList<>(); if (presetPath != null) { presetPathList.add(presetPath); @@ -3351,8 +3352,9 @@ public void performTagEdit(@NonNull final OsmElement selectedElement, @Nullable * @param tags any existing tags to apply * @param showPresets show the preset tab on start up. */ - private void performTagEdit(@NonNull final OsmElement selectedElement, @Nullable String focusOn, boolean applyLastAddressTags, - @Nullable ArrayList presetPathList, @Nullable HashMap tags, boolean showPresets) { + private & Serializable, L extends List & Serializable> void performTagEdit( + @NonNull final OsmElement selectedElement, @Nullable String focusOn, boolean applyLastAddressTags, @Nullable L presetPathList, @Nullable M tags, + boolean showPresets) { descheduleAutoLock(); unlock(); final Logic logic = App.getLogic(); diff --git a/src/main/java/de/blau/android/Mode.java b/src/main/java/de/blau/android/Mode.java index b3ccb4724..fc77f5d8a 100644 --- a/src/main/java/de/blau/android/Mode.java +++ b/src/main/java/de/blau/android/Mode.java @@ -1,9 +1,12 @@ package de.blau.android; +import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.EnumSet; import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.Set; import android.content.Context; @@ -61,14 +64,16 @@ public void teardown(Main main, Logic logic) { // empty } + @SuppressWarnings("unchecked") @Override - public HashMap getExtraTags(@NonNull Logic logic, @NonNull OsmElement e) { - return null; + public & Serializable> M getExtraTags(@NonNull Logic logic, @NonNull OsmElement e) { + return (M) new HashMap(); } + @SuppressWarnings("unchecked") @Override - public ArrayList getPresetItems(@NonNull Context ctx, @NonNull OsmElement e) { - return null; + public & Serializable> L getPresetItems(@NonNull Context ctx, @NonNull OsmElement e) { + return (L) new ArrayList(); } }), /** @@ -119,8 +124,9 @@ public void teardown(final Main main, final Logic logic) { } @Override - public HashMap getExtraTags(@NonNull Logic logic, @NonNull OsmElement e) { - HashMap result = new HashMap<>(); + public & Serializable> M getExtraTags(@NonNull Logic logic, @NonNull OsmElement e) { + @SuppressWarnings("unchecked") + M result = (M) new HashMap(); // we only want to apply a level tag automatically to newly created objects if they don't already have the // tag and not when the filter is inverted Filter filter = logic.getFilter(); @@ -131,9 +137,10 @@ public HashMap getExtraTags(@NonNull Logic logic, @NonNull OsmEl return result; } + @SuppressWarnings("unchecked") @Override - public ArrayList getPresetItems(@NonNull Context ctx, @NonNull OsmElement e) { - return null; + public & Serializable> L getPresetItems(@NonNull Context ctx, @NonNull OsmElement e) { + return (L) new ArrayList(); } }), MODE_CORRECT(R.string.mode_correct, "CORRECT", true, true, true, false, null, R.drawable.unlocked_correct_white, new ModeConfig() { @@ -181,8 +188,9 @@ public void teardown(final Main main, final Logic logic) { } @Override - public ArrayList getPresetItems(@NonNull Context ctx, @NonNull OsmElement e) { - ArrayList result = new ArrayList<>(); + public & Serializable> L getPresetItems(@NonNull Context ctx, @NonNull OsmElement e) { + @SuppressWarnings("unchecked") + L result = (L) new ArrayList(); Preset[] presets = App.getCurrentPresets(ctx); if (presets.length > 0 && presets[0] != null) { PresetItem pi = Preset.findBestMatch(presets, e.getTags(), null, null); @@ -193,9 +201,10 @@ public ArrayList getPresetItems(@NonNull Context ctx, @NonNul return result; } + @SuppressWarnings("unchecked") @Override - public HashMap getExtraTags(@NonNull Logic logic, @NonNull OsmElement e) { - return null; + public & Serializable> M getExtraTags(@NonNull Logic logic, @NonNull OsmElement e) { + return (M) new HashMap(); } }), MODE_VOICE(R.string.mode_voice, "VOICE", true, true, true, true, null, R.drawable.unlocked_voice_white, new FilterModeConfig() { @@ -409,12 +418,13 @@ static Mode modeForTag(String tag) { * @param e the selected element * @return map containing the additional tags or null */ - @Nullable - public HashMap getExtraTags(@NonNull Logic logic, @NonNull OsmElement e) { + @SuppressWarnings("unchecked") + @NonNull + public & Serializable> M getExtraTags(@NonNull Logic logic, @NonNull OsmElement e) { if (config != null) { return config.getExtraTags(logic, e); } - return null; + return (M) new HashMap(); } /** @@ -424,12 +434,13 @@ public HashMap getExtraTags(@NonNull Logic logic, @NonNull OsmEl * @param e the OsmElement * @return a List of PresetElementPath or null if none available */ - @Nullable - public ArrayList getPresetItems(@NonNull Context ctx, @NonNull OsmElement e) { + @SuppressWarnings("unchecked") + @NonNull + public & Serializable> L getPresetItems(@NonNull Context ctx, @NonNull OsmElement e) { if (config != null) { return config.getPresetItems(ctx, e); } - return null; + return (L) new ArrayList(); } /** diff --git a/src/main/java/de/blau/android/ModeConfig.java b/src/main/java/de/blau/android/ModeConfig.java index c019fe493..a926e29bf 100644 --- a/src/main/java/de/blau/android/ModeConfig.java +++ b/src/main/java/de/blau/android/ModeConfig.java @@ -1,9 +1,10 @@ package de.blau.android; -import java.util.ArrayList; +import java.io.Serializable; import java.util.Collections; import java.util.EnumSet; -import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.Set; import android.content.Context; @@ -41,7 +42,7 @@ public interface ModeConfig { * @return HashMap with tags to apply */ @Nullable - HashMap getExtraTags(@NonNull Logic logic, @NonNull OsmElement e); + & Serializable> M getExtraTags(@NonNull Logic logic, @NonNull OsmElement e); /** * Called before PropertyEditor startup to provide any mode specific PresetItems @@ -53,7 +54,7 @@ public interface ModeConfig { * @return list of PrestItems to apply */ @Nullable - ArrayList getPresetItems(@NonNull Context ctx, @NonNull OsmElement e); + & Serializable> L getPresetItems(@NonNull Context ctx, @NonNull OsmElement e); /** * Return the simple actions that are enabled in the menu diff --git a/src/main/java/de/blau/android/propertyeditor/PresetSearchResultsFragment.java b/src/main/java/de/blau/android/propertyeditor/PresetSearchResultsFragment.java index 87e05ee09..8256ed3bf 100644 --- a/src/main/java/de/blau/android/propertyeditor/PresetSearchResultsFragment.java +++ b/src/main/java/de/blau/android/propertyeditor/PresetSearchResultsFragment.java @@ -2,6 +2,7 @@ import static de.blau.android.contract.Constants.LOG_TAG_LEN; +import java.io.Serializable; import java.util.ArrayList; import java.util.List; @@ -48,7 +49,7 @@ public class PresetSearchResultsFragment extends DialogFragment implements Updat private static final int TAG_LEN = Math.min(LOG_TAG_LEN, PresetSearchResultsFragment.class.getSimpleName().length()); private static final String DEBUG_TAG = PresetSearchResultsFragment.class.getSimpleName().substring(0, TAG_LEN); - + private static final String SEARCH_RESULTS_KEY = "searchResults"; private static final String SEARCH_TERM_KEY = "searchTerm"; @@ -68,7 +69,7 @@ public class PresetSearchResultsFragment extends DialogFragment implements Updat * @param searchResults a List of PresetEements to display * @return an instance of PresetSearchResultsFragment */ - public static PresetSearchResultsFragment newInstance(@NonNull String searchTerm, @NonNull ArrayList searchResults) { + public static & Serializable> PresetSearchResultsFragment newInstance(@NonNull String searchTerm, @NonNull L searchResults) { PresetSearchResultsFragment f = new PresetSearchResultsFragment(); Bundle args = new Bundle(); @@ -89,7 +90,6 @@ public void onAttach(Context context) { propertyEditorListener = (PropertyEditorListener) parent; } - @SuppressWarnings("unchecked") @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); diff --git a/src/main/java/de/blau/android/propertyeditor/RelationMembersFragment.java b/src/main/java/de/blau/android/propertyeditor/RelationMembersFragment.java index af6fde95d..71a62572e 100644 --- a/src/main/java/de/blau/android/propertyeditor/RelationMembersFragment.java +++ b/src/main/java/de/blau/android/propertyeditor/RelationMembersFragment.java @@ -2,6 +2,7 @@ import static de.blau.android.contract.Constants.LOG_TAG_LEN; +import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -144,7 +145,7 @@ public Node getUnusedEnd() { * @return a new RelationMembersFragment instance */ @NonNull - public static RelationMembersFragment newInstance(long id, ArrayList members) { + public static & Serializable> RelationMembersFragment newInstance(long id, L members) { RelationMembersFragment f = new RelationMembersFragment(); Bundle args = new Bundle(); diff --git a/src/main/java/de/blau/android/propertyeditor/TagEditorFragment.java b/src/main/java/de/blau/android/propertyeditor/TagEditorFragment.java index 7c08cef40..8570feca0 100644 --- a/src/main/java/de/blau/android/propertyeditor/TagEditorFragment.java +++ b/src/main/java/de/blau/android/propertyeditor/TagEditorFragment.java @@ -334,7 +334,7 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c // Add any extra tags that were supplied @SuppressWarnings("unchecked") Map extraTags = Util.getSerializeable(getArguments(), EXTRA_TAGS_KEY, HashMap.class); - if (extraTags != null) { + if (extraTags != null && !extraTags.isEmpty()) { for (Entry e : extraTags.entrySet()) { addTag(editRowLayout, e.getKey(), e.getValue(), true, false); } @@ -357,7 +357,7 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c if (savedInstanceState == null) { // the following should only happen once on initial creation List presetsToApply = Util.getSerializeableArrayList(getArguments(), PRESETSTOAPPLY_KEY, PresetElementPath.class); - if (presetsToApply != null && !presetsToApply.isEmpty()) { + if (Util.notEmpty(presetsToApply)) { FragmentActivity activity = getActivity(); Preset preset = App.getCurrentRootPreset(activity); PresetGroup rootGroup = preset.getRootGroup();