From 7591b012b493f17ce99666ce7a7b869982382a5e Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Sun, 20 Oct 2019 16:54:43 +0200 Subject: [PATCH] Extracted ShareActionProvider setup code into a separate class. --- .../opentracks/SearchListActivity.java | 24 +++++++------- .../opentracks/TrackDetailActivity.java | 6 ++-- .../opentracks/TrackListActivity.java | 13 ++------ .../opentracks/util/ToolbarUtils.java | 32 +++++++++++++++++++ 4 files changed, 49 insertions(+), 26 deletions(-) create mode 100644 src/main/java/de/dennisguse/opentracks/util/ToolbarUtils.java diff --git a/src/main/java/de/dennisguse/opentracks/SearchListActivity.java b/src/main/java/de/dennisguse/opentracks/SearchListActivity.java index 5e35b811f..95c658fe9 100644 --- a/src/main/java/de/dennisguse/opentracks/SearchListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/SearchListActivity.java @@ -24,6 +24,7 @@ import android.os.Bundle; import android.util.Log; import android.view.KeyEvent; import android.view.Menu; +import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; @@ -56,6 +57,7 @@ import de.dennisguse.opentracks.util.IntentUtils; import de.dennisguse.opentracks.util.ListItemUtils; import de.dennisguse.opentracks.util.PreferencesUtils; import de.dennisguse.opentracks.util.StringUtils; +import de.dennisguse.opentracks.util.ToolbarUtils; import de.dennisguse.opentracks.util.TrackIconUtils; /** @@ -108,27 +110,31 @@ public class SearchListActivity extends AbstractListActivity implements DeleteMa public void onPrepare(Menu menu, int[] positions, long[] ids, boolean showSelectAll) { boolean isRecording = PreferencesUtils.isRecording(recordingTrackId); boolean isSingleSelection = positions.length == 1; + boolean isSingleSelectionTrack; if (isSingleSelection) { Map item = arrayAdapter.getItem(positions[0]); - Long trackId = (Long) item.get(TRACK_ID_FIELD); - Track track = contentProviderUtils.getTrack(trackId); - isSingleSelectionTrack = item.get(MARKER_ID_FIELD) == null; } else { isSingleSelectionTrack = false; } + // Not recording, one item, item is a track - //TODO Setup shareIntent. -// menu.findItem(R.id.list_context_menu_share).setVisible(!isRecording && isSingleSelection && isSingleSelectionTrack); - menu.findItem(R.id.list_context_menu_share).setVisible(false); + MenuItem shareMenuItem = menu.findItem(R.id.list_context_menu_share); + if (isSingleSelectionTrack) { + shareMenuItem.setVisible(!isRecording); + Map item = arrayAdapter.getItem(positions[0]); + Long trackId = (Long) item.get(TRACK_ID_FIELD); + + ToolbarUtils.setupShareActionProvider(SearchListActivity.this, shareMenuItem, new long[]{trackId}); + } // One item, item is a marker menu.findItem(R.id.list_context_menu_show_on_map).setVisible(isSingleSelection && !isSingleSelectionTrack); // One item, can be a track or a marker menu.findItem(R.id.list_context_menu_edit).setVisible(isSingleSelection); // One item. If track, no restriction. - menu.findItem(R.id.list_context_menu_delete).setVisible(isSingleSelection && (isSingleSelectionTrack)); + menu.findItem(R.id.list_context_menu_delete).setVisible(isSingleSelection && isSingleSelectionTrack); // Disable select all, no action is available for multiple selection menu.findItem(R.id.list_context_menu_select_all).setVisible(false); } @@ -281,10 +287,6 @@ public class SearchListActivity extends AbstractListActivity implements DeleteMa Long markerId = (Long) item.get(MARKER_ID_FIELD); Intent intent; switch (itemId) { - case R.id.list_context_menu_share: - //TODO - Log.e(TAG, "Not implemented"); - return true; case R.id.list_context_menu_show_on_map: IntentUtils.showCoordinateOnMap(this, (double) item.get(MARKER_LATITUDE_FIELD), (double) item.get(MARKER_LONGITUDE_FIELD), item.get(NAME_FIELD) + ""); return true; diff --git a/src/main/java/de/dennisguse/opentracks/TrackDetailActivity.java b/src/main/java/de/dennisguse/opentracks/TrackDetailActivity.java index 305c6581b..df12b918a 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackDetailActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackDetailActivity.java @@ -36,9 +36,7 @@ import android.widget.TabHost.TabSpec; import android.widget.Toast; import androidx.annotation.NonNull; -import androidx.appcompat.widget.ShareActionProvider; import androidx.core.app.ActivityCompat; -import androidx.core.view.MenuItemCompat; import androidx.viewpager.widget.ViewPager; import de.dennisguse.opentracks.content.ContentProviderUtils; @@ -57,6 +55,7 @@ import de.dennisguse.opentracks.settings.SettingsActivity; import de.dennisguse.opentracks.util.FileUtils; import de.dennisguse.opentracks.util.IntentUtils; import de.dennisguse.opentracks.util.PreferencesUtils; +import de.dennisguse.opentracks.util.ToolbarUtils; import de.dennisguse.opentracks.util.TrackIconUtils; import de.dennisguse.opentracks.util.TrackUtils; @@ -319,8 +318,7 @@ public class TrackDetailActivity extends AbstractListActivity implements ChooseA insertPhotoMenuItem.setVisible(new Intent(MediaStore.ACTION_IMAGE_CAPTURE).resolveActivity(getPackageManager()) != null); shareMenuItem = menu.findItem(R.id.track_detail_share); - ShareActionProvider shareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(shareMenuItem); - shareActionProvider.setShareIntent(IntentUtils.newShareFileIntent(this, new long[]{trackId})); + ToolbarUtils.setupShareActionProviderCompat(this, shareMenuItem, new long[]{trackId}); voiceFrequencyMenuItem = menu.findItem(R.id.track_detail_voice_frequency); splitFrequencyMenuItem = menu.findItem(R.id.track_detail_split_frequency); diff --git a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java index 7428b26bd..8860e4bd0 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java @@ -61,6 +61,7 @@ import de.dennisguse.opentracks.util.IntentUtils; import de.dennisguse.opentracks.util.ListItemUtils; import de.dennisguse.opentracks.util.PreferencesUtils; import de.dennisguse.opentracks.util.StringUtils; +import de.dennisguse.opentracks.util.ToolbarUtils; import de.dennisguse.opentracks.util.TrackIconUtils; import de.dennisguse.opentracks.util.TrackUtils; @@ -115,17 +116,7 @@ public class TrackListActivity extends AbstractListActivity implements ConfirmDe boolean isSingleSelection = trackIds.length == 1; MenuItem shareMenuItem = menu.findItem(R.id.list_context_menu_share); - - { - //TODO Compat is not working as the AbsListView.MultiChoiceModeListener; instantiating it manually using the non-compat is a workaround. - android.widget.ShareActionProvider shareActionProvider = new android.widget.ShareActionProvider(TrackListActivity.this); -// ShareActionProvider shareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(shareMenuItem); - - shareActionProvider.setShareIntent(trackIds.length == 0 ? null : IntentUtils.newShareFileIntent(TrackListActivity.this, trackIds)); - - shareMenuItem.setActionProvider(shareActionProvider); -// MenuItemCompat.setActionProvider(shareMenuItem, shareActionProvider); - } + ToolbarUtils.setupShareActionProvider(TrackListActivity.this, shareMenuItem, trackIds); menu.findItem(R.id.list_context_menu_edit).setVisible(isSingleSelection); menu.findItem(R.id.list_context_menu_select_all).setVisible(showSelectAll); diff --git a/src/main/java/de/dennisguse/opentracks/util/ToolbarUtils.java b/src/main/java/de/dennisguse/opentracks/util/ToolbarUtils.java new file mode 100644 index 000000000..9897c4a56 --- /dev/null +++ b/src/main/java/de/dennisguse/opentracks/util/ToolbarUtils.java @@ -0,0 +1,32 @@ +package de.dennisguse.opentracks.util; + +import android.content.Context; +import android.view.MenuItem; + +import androidx.annotation.NonNull; +import androidx.appcompat.widget.ShareActionProvider; +import androidx.core.internal.view.SupportMenuItem; +import androidx.core.view.MenuItemCompat; + +public class ToolbarUtils { + + private ToolbarUtils() { + } + + //TODO Compat is not working as the AbsListView.MultiChoiceModeListener; instantiating it manually using the non-compat is a workaround. + @Deprecated + public static void setupShareActionProvider(@NonNull Context context, @NonNull MenuItem shareMenuItem, @NonNull long[] trackIds) { + android.widget.ShareActionProvider shareActionProvider = new android.widget.ShareActionProvider(context); + shareActionProvider.setShareIntent(trackIds.length == 0 ? null : IntentUtils.newShareFileIntent(context, trackIds)); + shareMenuItem.setActionProvider(shareActionProvider); + } + + /** + * @param shareMenuItem Should be a {@link SupportMenuItem}. + */ + public static void setupShareActionProviderCompat(@NonNull Context context, @NonNull MenuItem shareMenuItem, @NonNull long[] trackIds) { + ShareActionProvider shareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(shareMenuItem); + shareActionProvider.setShareIntent(trackIds.length == 0 ? null : IntentUtils.newShareFileIntent(context, trackIds)); + MenuItemCompat.setActionProvider(shareMenuItem, shareActionProvider); + } +}