package net.osmand.plus.audionotes; import android.content.DialogInterface; import android.content.Intent; import android.graphics.drawable.Drawable; import android.media.MediaScannerConnection; import android.net.Uri; import android.support.v7.app.AlertDialog; import net.osmand.data.LatLon; import net.osmand.data.PointDescription; import net.osmand.plus.OsmandPlugin; import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.audionotes.AudioVideoNotesPlugin.Recording; import net.osmand.plus.mapcontextmenu.MenuController; import net.osmand.util.Algorithms; public class AudioVideoNoteMenuController extends MenuController { private Recording mRecording; private AudioVideoNotesPlugin mPlugin; private boolean mIsFileAvailable; public AudioVideoNoteMenuController(MapActivity mapActivity, PointDescription pointDescription, final Recording recording) { super(new AudioVideoNoteMenuBuilder(mapActivity, recording), pointDescription, mapActivity); this.mRecording = recording; mPlugin = OsmandPlugin.getPlugin(AudioVideoNotesPlugin.class); mIsFileAvailable = mRecording.getFile().exists(); if (mIsFileAvailable) { leftTitleButtonController = new TitleButtonController() { @Override public void buttonPressed() { if (mPlugin != null) { if (mPlugin.isPlaying(getRecording())) { mPlugin.stopPlaying(); } else { mPlugin.playRecording(getMapActivity(), getRecording()); } } } }; rightTitleButtonController = new TitleButtonController() { @Override public void buttonPressed() { AlertDialog.Builder bld = new AlertDialog.Builder(getMapActivity()); bld.setMessage(R.string.recording_delete_confirm); bld.setPositiveButton(R.string.shared_string_yes, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (mPlugin != null) { mPlugin.deleteRecording(getRecording(), true); getMapActivity().getContextMenu().close(); } } }); bld.setNegativeButton(R.string.shared_string_no, null); bld.show(); } }; rightTitleButtonController.caption = getMapActivity().getString(R.string.shared_string_delete); rightTitleButtonController.leftIconId = R.drawable.ic_action_delete_dark; } updateData(); } @Override protected void setObject(Object object) { if (object instanceof Recording) { this.mRecording = (Recording) object; mIsFileAvailable = mRecording.getFile().exists(); } } @Override protected Object getObject() { return mRecording; } public Recording getRecording() { return mRecording; } @Override public Drawable getLeftIcon() { if (mRecording.isPhoto()) { return getIcon(R.drawable.ic_action_photo_dark, R.color.audio_video_icon_color); } else if (mRecording.isAudio()) { return getIcon(R.drawable.ic_action_micro_dark, R.color.audio_video_icon_color); } else { return getIcon(R.drawable.ic_action_video_dark, R.color.audio_video_icon_color); } } @Override public String getNameStr() { if (mIsFileAvailable) { return mRecording.getName(getMapActivity(), false); } else { return getMapActivity().getString(R.string.data_is_not_available); } } @Override public String getTypeStr() { if (mIsFileAvailable) { return mRecording.getType(getMapActivity()); } else { return super.getTypeStr(); } } @Override public String getCommonTypeStr() { return getMapActivity().getString(R.string.audionotes_plugin_name); } @Override public boolean needStreetName() { return false; } @Override public void updateData() { super.updateData(); if (!mIsFileAvailable) { return; } boolean accessibilityEnabled = getMapActivity().getMyApplication().accessibilityEnabled(); rightTitleButtonController.visible = true; if (!mRecording.isPhoto()) { if (mPlugin.isPlaying(mRecording)) { leftTitleButtonController.caption = getMapActivity().getString(R.string.shared_string_control_stop); leftTitleButtonController.leftIconId = R.drawable.ic_action_rec_stop; int pos = mPlugin.getPlayingPosition(); String durationStr; if (pos == -1) { durationStr = mRecording.getPlainDuration(accessibilityEnabled); } else { durationStr = Algorithms.formatDuration(pos / 1000, accessibilityEnabled); } leftTitleButtonController.needRightText = true; leftTitleButtonController.rightTextCaption = "— " + durationStr; rightTitleButtonController.visible = false; } else { leftTitleButtonController.caption = getMapActivity().getString(R.string.recording_context_menu_play); leftTitleButtonController.leftIconId = R.drawable.ic_play_dark; String durationStr = mRecording.getPlainDuration(accessibilityEnabled); leftTitleButtonController.needRightText = true; leftTitleButtonController.rightTextCaption = "— " + durationStr; } } else { leftTitleButtonController.caption = getMapActivity().getString(R.string.recording_context_menu_show); leftTitleButtonController.leftIconId = R.drawable.ic_action_view; } } @Override public void share(LatLon latLon, String title, String address) { if (mIsFileAvailable) { String path = mRecording.getFile().getAbsolutePath(); MediaScannerConnection.scanFile(getMapActivity(), new String[]{path}, null, new MediaScannerConnection.OnScanCompletedListener() { public void onScanCompleted(String path, Uri uri) { Intent shareIntent = new Intent( android.content.Intent.ACTION_SEND); if (mRecording.isPhoto()) { shareIntent.setType("image/*"); } else if (mRecording.isAudio()) { shareIntent.setType("audio/*"); } else if (mRecording.isVideo()) { shareIntent.setType("video/*"); } shareIntent.putExtra(Intent.EXTRA_STREAM, uri); shareIntent .addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); getMapActivity().startActivity(Intent.createChooser(shareIntent, getMapActivity().getString(R.string.share_note))); } }); } else { super.share(latLon, title, ""); } } }