diff --git a/src/main/java/de/dennisguse/opentracks/SearchListActivity.java b/src/main/java/de/dennisguse/opentracks/SearchListActivity.java index 95c658fe9..07b707aab 100644 --- a/src/main/java/de/dennisguse/opentracks/SearchListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/SearchListActivity.java @@ -57,7 +57,6 @@ 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; /** @@ -123,10 +122,6 @@ public class SearchListActivity extends AbstractListActivity implements DeleteMa 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 @@ -290,6 +285,11 @@ public class SearchListActivity extends AbstractListActivity implements DeleteMa 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; + case R.id.list_context_menu_share: + intent = IntentUtils.newShareFileIntent(this, new long[]{trackId}); + intent = Intent.createChooser(intent, null); + startActivity(intent); + return true; case R.id.list_context_menu_edit: if (markerId != null) { intent = IntentUtils.newIntent(this, MarkerEditActivity.class) diff --git a/src/main/java/de/dennisguse/opentracks/TrackDetailActivity.java b/src/main/java/de/dennisguse/opentracks/TrackDetailActivity.java index df12b918a..b6d87c9a1 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackDetailActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackDetailActivity.java @@ -55,7 +55,6 @@ 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; @@ -316,10 +315,7 @@ public class TrackDetailActivity extends AbstractListActivity implements ChooseA insertMarkerMenuItem = menu.findItem(R.id.track_detail_insert_marker); insertPhotoMenuItem = menu.findItem(R.id.track_detail_insert_photo); insertPhotoMenuItem.setVisible(new Intent(MediaStore.ACTION_IMAGE_CAPTURE).resolveActivity(getPackageManager()) != null); - shareMenuItem = menu.findItem(R.id.track_detail_share); - 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); markerListMenuItem = menu.findItem(R.id.track_detail_markers); @@ -343,6 +339,11 @@ public class TrackDetailActivity extends AbstractListActivity implements ChooseA .putExtra(MarkerEditActivity.EXTRA_TRACK_ID, trackId); startActivity(intent); return true; + case R.id.track_detail_share: + intent = IntentUtils.newShareFileIntent(this, new long[]{trackId}); + intent = Intent.createChooser(intent, null); + startActivity(intent); + return true; case R.id.track_detail_insert_photo: if (!FileUtils.isExternalStorageWriteable() || ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, EXTERNAL_STORAGE_PERMISSION_REQUEST_CODE); diff --git a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java index 8860e4bd0..cf90d2a74 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java @@ -61,7 +61,6 @@ 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,9 +114,6 @@ public class TrackListActivity extends AbstractListActivity implements ConfirmDe public void onPrepare(Menu menu, int[] positions, long[] trackIds, boolean showSelectAll) { boolean isSingleSelection = trackIds.length == 1; - MenuItem shareMenuItem = menu.findItem(R.id.list_context_menu_share); - 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); } @@ -531,12 +527,18 @@ public class TrackListActivity extends AbstractListActivity implements ConfirmDe * @return true if handled. */ private boolean handleContextItem(int itemId, long[] trackIds) { + Intent intent; switch (itemId) { case R.id.list_context_menu_show_on_map: IntentUtils.showTrackOnMap(this, trackIds); return true; + case R.id.list_context_menu_share: + intent = IntentUtils.newShareFileIntent(this, trackIds); + intent = Intent.createChooser(intent, null); + startActivity(intent); + return true; case R.id.list_context_menu_edit: - Intent intent = IntentUtils.newIntent(this, TrackEditActivity.class) + intent = IntentUtils.newIntent(this, TrackEditActivity.class) .putExtra(TrackEditActivity.EXTRA_TRACK_ID, trackIds[0]); startActivity(intent); return true; diff --git a/src/main/java/de/dennisguse/opentracks/util/IntentUtils.java b/src/main/java/de/dennisguse/opentracks/util/IntentUtils.java index 217161163..d237a8a84 100644 --- a/src/main/java/de/dennisguse/opentracks/util/IntentUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/IntentUtils.java @@ -69,6 +69,7 @@ public class IntentUtils { * @param context the context * @param trackIds the track ids */ + //TODO Share mulitple tracks in different files! public static Intent newShareFileIntent(Context context, long[] trackIds) { String trackDescription = ""; if (trackIds.length == 1) { @@ -76,7 +77,6 @@ public class IntentUtils { trackDescription = track == null ? "" : new DescriptionGeneratorImpl(context).generateTrackDescription(track, false); } Pair uriAndMime = ShareContentProvider.createURI(trackIds, TrackFileFormat.KMZ_WITH_TRACKDETAIL_AND_SENSORDATA_AND_PICTURES); - return new Intent(Intent.ACTION_SEND) .putExtra(Intent.EXTRA_STREAM, uriAndMime.first) .putExtra(Intent.EXTRA_SUBJECT, context.getString(R.string.share_track_subject)) diff --git a/src/main/java/de/dennisguse/opentracks/util/ToolbarUtils.java b/src/main/java/de/dennisguse/opentracks/util/ToolbarUtils.java deleted file mode 100644 index 9897c4a56..000000000 --- a/src/main/java/de/dennisguse/opentracks/util/ToolbarUtils.java +++ /dev/null @@ -1,32 +0,0 @@ -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); - } -} diff --git a/src/main/res/drawable/ic_share_24dp.xml b/src/main/res/drawable/ic_share_24dp.xml new file mode 100644 index 000000000..9dad7b85f --- /dev/null +++ b/src/main/res/drawable/ic_share_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/src/main/res/menu/list_context_menu.xml b/src/main/res/menu/list_context_menu.xml index 2a0835609..5a3bb840b 100644 --- a/src/main/res/menu/list_context_menu.xml +++ b/src/main/res/menu/list_context_menu.xml @@ -17,8 +17,8 @@ limitations under the License. xmlns:app="http://schemas.android.com/apk/res-auto">