Fix issue 1945
1
.gitignore
vendored
|
@ -5,3 +5,4 @@ countries.reginfo
|
|||
h_*.png
|
||||
g_*.png
|
||||
mm_*.png
|
||||
mx_*.png
|
||||
|
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 384 B |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 216 B |
Before Width: | Height: | Size: 750 B After Width: | Height: | Size: 279 B |
Before Width: | Height: | Size: 892 B After Width: | Height: | Size: 186 B |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 483 B |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 252 B |
|
@ -1,4 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="no"?><resources>
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<resources>
|
||||
<string name="local_index_gpx_timespan">\nZeitspanne: %1$d:%2$02d:%3$02d</string>
|
||||
<string name="local_index_gpx_timemoving">\nZeit in Bewegung: %1$d:%2$02d:%3$02d</string>
|
||||
<string name="context_menu_item_destination_point">Als Ziel wählen</string>
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package net.osmand.plus.audionotes;
|
||||
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
@ -23,6 +22,7 @@ import net.osmand.PlatformUtil;
|
|||
import net.osmand.access.AccessibleAlertBuilder;
|
||||
import net.osmand.access.AccessibleToast;
|
||||
import net.osmand.data.DataTileManager;
|
||||
import net.osmand.data.FavouritePoint;
|
||||
import net.osmand.data.LatLon;
|
||||
import net.osmand.plus.ApplicationMode;
|
||||
import net.osmand.plus.ContextMenuAdapter;
|
||||
|
@ -38,6 +38,7 @@ import net.osmand.plus.activities.LocalIndexInfo;
|
|||
import net.osmand.plus.activities.LocalIndexesActivity;
|
||||
import net.osmand.plus.activities.LocalIndexesActivity.LoadLocalIndexTask;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.activities.SavingTrackHelper;
|
||||
import net.osmand.plus.activities.SettingsActivity;
|
||||
import net.osmand.plus.views.MapInfoLayer;
|
||||
import net.osmand.plus.views.OsmandMapTileView;
|
||||
|
@ -67,7 +68,6 @@ import android.media.MediaPlayer;
|
|||
import android.media.MediaPlayer.OnPreparedListener;
|
||||
import android.media.MediaRecorder;
|
||||
import android.media.SoundPool;
|
||||
import android.media.SoundPool.OnLoadCompleteListener;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.preference.Preference;
|
||||
|
@ -89,17 +89,17 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
|
||||
public static final String ID = "osmand.audionotes";
|
||||
public static final String THREEGP_EXTENSION = "3gp";
|
||||
public static final String MPEG4_EXTENSION = "mp4";
|
||||
public static final String IMG_EXTENSION = "jpg";
|
||||
public static final String MPEG4_EXTENSION = "mp4";
|
||||
public static final String IMG_EXTENSION = "jpg";
|
||||
private static final Log log = PlatformUtil.getLog(AudioVideoNotesPlugin.class);
|
||||
private static Method mRegisterMediaButtonEventReceiver;
|
||||
private static Method mUnregisterMediaButtonEventReceiver;
|
||||
private OsmandApplication app;
|
||||
private TextInfoWidget recordControl;
|
||||
|
||||
public final CommonPreference<Boolean> AV_EXTERNAL_RECORDER ;
|
||||
public final CommonPreference<Boolean> AV_EXTERNAL_PHOTO_CAM ;
|
||||
public final CommonPreference<Boolean> AV_PHOTO_PLAY_SOUND ;
|
||||
public final CommonPreference<Boolean> AV_EXTERNAL_RECORDER;
|
||||
public final CommonPreference<Boolean> AV_EXTERNAL_PHOTO_CAM;
|
||||
public final CommonPreference<Boolean> AV_PHOTO_PLAY_SOUND;
|
||||
|
||||
public static final int VIDEO_OUTPUT_MP4 = 0;
|
||||
public static final int VIDEO_OUTPUT_3GP = 1;
|
||||
|
@ -125,9 +125,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
|
||||
public final CommonPreference<Integer> AV_DEFAULT_ACTION;
|
||||
|
||||
public final OsmandPreference<Boolean> SHOW_RECORDINGS ;
|
||||
|
||||
|
||||
public final OsmandPreference<Boolean> SHOW_RECORDINGS;
|
||||
|
||||
private DataTileManager<Recording> recordings = new DataTileManager<AudioVideoNotesPlugin.Recording>(14);
|
||||
private Map<String, Recording> recordingByFileName = new LinkedHashMap<String, Recording>();
|
||||
|
@ -140,6 +138,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
public Recording(File f) {
|
||||
this.file = f;
|
||||
}
|
||||
|
||||
public File file;
|
||||
public String name;
|
||||
|
||||
|
@ -148,15 +147,15 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
private long duration = -1;
|
||||
private boolean available = true;
|
||||
|
||||
public double getLatitude(){
|
||||
public double getLatitude() {
|
||||
return lat;
|
||||
}
|
||||
|
||||
public double getLongitude(){
|
||||
public double getLongitude() {
|
||||
return lon;
|
||||
}
|
||||
|
||||
private void updateInternalDescription(){
|
||||
private void updateInternalDescription() {
|
||||
if (duration == -1) {
|
||||
duration = 0;
|
||||
if (!isPhoto()) {
|
||||
|
@ -187,15 +186,15 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
}
|
||||
|
||||
private String convertDegToExifRational(double l) {
|
||||
if(l < 0){
|
||||
if (l < 0) {
|
||||
l = -l;
|
||||
}
|
||||
String s = ((int) l) + "/1,"; //degrees
|
||||
String s = ((int) l) + "/1,"; // degrees
|
||||
l = (l - ((int) l)) * 60.0;
|
||||
s+= (int) l + "/1,"; //minutes
|
||||
s += (int) l + "/1,"; // minutes
|
||||
l = (l - ((int) l)) * 60000.0;
|
||||
s+= (int) l + "/1000"; //seconds
|
||||
//log.info("deg rational: " + s);
|
||||
s += (int) l + "/1000"; // seconds
|
||||
// log.info("deg rational: " + s);
|
||||
return s;
|
||||
}
|
||||
|
||||
|
@ -206,29 +205,31 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
|
||||
Constructor c = exClass.getConstructor(new Class[] { String.class });
|
||||
Object exInstance = c.newInstance(file.getAbsolutePath());
|
||||
Method setAttribute = exClass.getMethod("setAttribute",
|
||||
new Class[] { String.class, String.class } );
|
||||
setAttribute.invoke(exInstance,"GPSLatitude", convertDegToExifRational(lat));
|
||||
setAttribute.invoke(exInstance,"GPSLatitudeRef", lat > 0 ?"N" :"S");
|
||||
setAttribute.invoke(exInstance,"GPSLongitude", convertDegToExifRational(lon));
|
||||
setAttribute.invoke(exInstance,"GPSLongitudeRef", lon > 0?"E" : "W");
|
||||
if(!Double.isNaN(rot)){
|
||||
setAttribute.invoke(exInstance,"GPSImgDirectionRef", "T");
|
||||
while(rot < 0) { rot += 360; }
|
||||
while(rot > 360) { rot -= 360; }
|
||||
Method setAttribute = exClass.getMethod("setAttribute", new Class[] { String.class, String.class });
|
||||
setAttribute.invoke(exInstance, "GPSLatitude", convertDegToExifRational(lat));
|
||||
setAttribute.invoke(exInstance, "GPSLatitudeRef", lat > 0 ? "N" : "S");
|
||||
setAttribute.invoke(exInstance, "GPSLongitude", convertDegToExifRational(lon));
|
||||
setAttribute.invoke(exInstance, "GPSLongitudeRef", lon > 0 ? "E" : "W");
|
||||
if (!Double.isNaN(rot)) {
|
||||
setAttribute.invoke(exInstance, "GPSImgDirectionRef", "T");
|
||||
while (rot < 0) {
|
||||
rot += 360;
|
||||
}
|
||||
while (rot > 360) {
|
||||
rot -= 360;
|
||||
}
|
||||
int abs = (int) (Math.abs(rot) * 100.0);
|
||||
String rotString = abs/100f+"";
|
||||
setAttribute.invoke(exInstance,"GPSImgDirection", rotString);
|
||||
String rotString = abs / 100f + "";
|
||||
setAttribute.invoke(exInstance, "GPSImgDirection", rotString);
|
||||
}
|
||||
if(loc != null && loc.hasAltitude()){
|
||||
if (loc != null && loc.hasAltitude()) {
|
||||
double alt = loc.getAltitude();
|
||||
String altString = (int) (Math.abs(alt) * 100.0) + "/100";
|
||||
System.err.println(altString);
|
||||
setAttribute.invoke(exInstance,"GPSAltitude", altString);
|
||||
setAttribute.invoke(exInstance,"GPSAltitudeRef", alt < 0 ? "1" : "0");
|
||||
setAttribute.invoke(exInstance, "GPSAltitude", altString);
|
||||
setAttribute.invoke(exInstance, "GPSAltitudeRef", alt < 0 ? "1" : "0");
|
||||
}
|
||||
Method saveAttributes = exClass.getMethod("saveAttributes",
|
||||
new Class[] {} );
|
||||
Method saveAttributes = exClass.getMethod("saveAttributes", new Class[] {});
|
||||
saveAttributes.invoke(exInstance);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
|
@ -244,8 +245,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
|
||||
Constructor c = exClass.getConstructor(new Class[] { String.class });
|
||||
Object exInstance = c.newInstance(file.getAbsolutePath());
|
||||
Method getAttributeInt = exClass.getMethod("getAttributeInt",
|
||||
new Class[] { String.class, Integer.TYPE} );
|
||||
Method getAttributeInt = exClass.getMethod("getAttributeInt", new Class[] { String.class, Integer.TYPE });
|
||||
Integer it = (Integer) getAttributeInt.invoke(exInstance, "Orientation", new Integer(1));
|
||||
orientation = it.intValue();
|
||||
} catch (Exception e) {
|
||||
|
@ -271,62 +271,55 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
return rotation;
|
||||
}
|
||||
|
||||
public String getDescription(Context ctx){
|
||||
String nm = name == null? "" : name ;
|
||||
if(isPhoto()){
|
||||
return ctx.getString(R.string.recording_photo_description, nm,
|
||||
Algorithms.formatDateTime(file.lastModified())).trim();
|
||||
public String getDescription(Context ctx) {
|
||||
String nm = name == null ? "" : name;
|
||||
if (isPhoto()) {
|
||||
return ctx.getString(R.string.recording_photo_description, nm, Algorithms.formatDateTime(file.lastModified())).trim();
|
||||
}
|
||||
updateInternalDescription();
|
||||
return ctx.getString(R.string.recording_description, nm, getDuration(ctx),
|
||||
Algorithms.formatDateTime(file.lastModified())).trim();
|
||||
return ctx.getString(R.string.recording_description, nm, getDuration(ctx), Algorithms.formatDateTime(file.lastModified()))
|
||||
.trim();
|
||||
}
|
||||
|
||||
public String getSmallDescription(Context ctx){
|
||||
String nm = name == null? "" : name ;
|
||||
if(isPhoto()){
|
||||
return ctx.getString(R.string.recording_photo_description, nm,
|
||||
Algorithms.formatDateTime(file.lastModified())).trim();
|
||||
public String getSmallDescription(Context ctx) {
|
||||
String nm = name == null ? "" : name;
|
||||
if (isPhoto()) {
|
||||
return ctx.getString(R.string.recording_photo_description, nm, Algorithms.formatDateTime(file.lastModified())).trim();
|
||||
}
|
||||
return ctx.getString(R.string.recording_description, nm, "",
|
||||
Algorithms.formatDateTime(file.lastModified())).trim();
|
||||
return ctx.getString(R.string.recording_description, nm, "", Algorithms.formatDateTime(file.lastModified())).trim();
|
||||
}
|
||||
|
||||
private String getDuration(Context ctx) {
|
||||
String additional = "";
|
||||
if(duration > 0) {
|
||||
if (duration > 0) {
|
||||
int d = (int) (duration / 1000);
|
||||
additional += Algorithms.formatDuration(d);
|
||||
}
|
||||
if(!available) {
|
||||
additional += "("+ctx.getString(R.string.recording_unavailable)+")";
|
||||
if (!available) {
|
||||
additional += "(" + ctx.getString(R.string.recording_unavailable) + ")";
|
||||
}
|
||||
return additional;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private static void initializeRemoteControlRegistrationMethods() {
|
||||
try {
|
||||
if (mRegisterMediaButtonEventReceiver == null) {
|
||||
mRegisterMediaButtonEventReceiver = AudioManager.class.getMethod(
|
||||
"registerMediaButtonEventReceiver",
|
||||
new Class[] { ComponentName.class } );
|
||||
}
|
||||
if (mUnregisterMediaButtonEventReceiver == null) {
|
||||
mUnregisterMediaButtonEventReceiver = AudioManager.class.getMethod(
|
||||
"unregisterMediaButtonEventReceiver",
|
||||
new Class[] { ComponentName.class } );
|
||||
}
|
||||
/* success, this device will take advantage of better remote */
|
||||
/* control event handling */
|
||||
} catch (NoSuchMethodException nsme) {
|
||||
/* failure, still using the legacy behavior, but this app */
|
||||
/* is future-proof! */
|
||||
}
|
||||
try {
|
||||
if (mRegisterMediaButtonEventReceiver == null) {
|
||||
mRegisterMediaButtonEventReceiver = AudioManager.class.getMethod("registerMediaButtonEventReceiver",
|
||||
new Class[] { ComponentName.class });
|
||||
}
|
||||
if (mUnregisterMediaButtonEventReceiver == null) {
|
||||
mUnregisterMediaButtonEventReceiver = AudioManager.class.getMethod("unregisterMediaButtonEventReceiver",
|
||||
new Class[] { ComponentName.class });
|
||||
}
|
||||
/* success, this device will take advantage of better remote */
|
||||
/* control event handling */
|
||||
} catch (NoSuchMethodException nsme) {
|
||||
/* failure, still using the legacy behavior, but this app */
|
||||
/* is future-proof! */
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getId() {
|
||||
|
@ -339,9 +332,9 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
AV_EXTERNAL_RECORDER = settings.registerBooleanPreference("av_external_recorder", false).makeGlobal();
|
||||
AV_EXTERNAL_PHOTO_CAM = settings.registerBooleanPreference("av_external_cam", true).makeGlobal();
|
||||
AV_VIDEO_FORMAT = settings.registerIntPreference("av_video_format", VIDEO_OUTPUT_MP4).makeGlobal();
|
||||
AV_DEFAULT_ACTION = settings.registerIntPreference("av_default_action", AV_DEFAULT_ACTION_CHOOSE).makeGlobal();
|
||||
AV_DEFAULT_ACTION = settings.registerIntPreference("av_default_action", AV_DEFAULT_ACTION_CHOOSE).makeGlobal();
|
||||
// camera focus type:
|
||||
AV_CAMERA_FOCUS_TYPE = settings.registerIntPreference("av_camera_focus_type",AV_CAMERA_FOCUS_AUTO).makeGlobal();
|
||||
AV_CAMERA_FOCUS_TYPE = settings.registerIntPreference("av_camera_focus_type", AV_CAMERA_FOCUS_AUTO).makeGlobal();
|
||||
// camera sound:
|
||||
AV_PHOTO_PLAY_SOUND = settings.registerBooleanPreference("av_photo_play_sound", true).makeGlobal();
|
||||
|
||||
|
@ -362,19 +355,16 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
public boolean init(final OsmandApplication app) {
|
||||
initializeRemoteControlRegistrationMethods();
|
||||
AudioManager am = (AudioManager) app.getSystemService(Context.AUDIO_SERVICE);
|
||||
if(am != null){
|
||||
if (am != null) {
|
||||
registerMediaListener(am);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void registerLayers(MapActivity activity) {
|
||||
this.activity = activity;
|
||||
if(audioNotesLayer != null) {
|
||||
if (audioNotesLayer != null) {
|
||||
activity.getMapView().removeLayer(audioNotesLayer);
|
||||
}
|
||||
audioNotesLayer = new AudioNotesLayer(activity, this);
|
||||
|
@ -382,20 +372,17 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
registerWidget(activity);
|
||||
}
|
||||
|
||||
|
||||
private void registerMediaListener(AudioManager am) {
|
||||
|
||||
ComponentName receiver = new ComponentName(app.getPackageName(),
|
||||
MediaRemoteControlReceiver.class.getName());
|
||||
ComponentName receiver = new ComponentName(app.getPackageName(), MediaRemoteControlReceiver.class.getName());
|
||||
try {
|
||||
if (mRegisterMediaButtonEventReceiver == null) {
|
||||
return;
|
||||
}
|
||||
mRegisterMediaButtonEventReceiver.invoke(am,
|
||||
receiver);
|
||||
} catch (Exception ite) {
|
||||
log.error(ite.getMessage(), ite);
|
||||
}
|
||||
if (mRegisterMediaButtonEventReceiver == null) {
|
||||
return;
|
||||
}
|
||||
mRegisterMediaButtonEventReceiver.invoke(am, receiver);
|
||||
} catch (Exception ite) {
|
||||
log.error(ite.getMessage(), ite);
|
||||
}
|
||||
}
|
||||
|
||||
private void unregisterMediaListener(AudioManager am) {
|
||||
|
@ -410,7 +397,6 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void registerLayerContextMenuActions(final OsmandMapTileView mapView, ContextMenuAdapter adapter, final MapActivity mapActivity) {
|
||||
OnContextMenuClick listener = new OnContextMenuClick() {
|
||||
|
@ -423,62 +409,60 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
}
|
||||
}
|
||||
};
|
||||
adapter.item(R.string.layer_recordings).selected(SHOW_RECORDINGS.get()? 1 : 0)
|
||||
.icons(R.drawable.ic_action_audio_dark, R.drawable.ic_action_audio_light).listen(listener).position(6).reg();
|
||||
adapter.item(R.string.layer_recordings).selected(SHOW_RECORDINGS.get() ? 1 : 0)
|
||||
.icons(R.drawable.ic_action_audio_dark, R.drawable.ic_action_audio_light).listen(listener).position(6).reg();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerMapContextMenuActions(final MapActivity mapActivity, final double latitude, final double longitude, ContextMenuAdapter adapter,
|
||||
Object selectedObj) {
|
||||
adapter.item(R.string.recording_context_menu_arecord).icons(R.drawable.ic_action_micro_dark, R.drawable.ic_action_micro_light) .
|
||||
listen(new OnContextMenuClick() {
|
||||
public void registerMapContextMenuActions(final MapActivity mapActivity, final double latitude, final double longitude,
|
||||
ContextMenuAdapter adapter, Object selectedObj) {
|
||||
adapter.item(R.string.recording_context_menu_arecord).icons(R.drawable.ic_action_micro_dark, R.drawable.ic_action_micro_light)
|
||||
.listen(new OnContextMenuClick() {
|
||||
|
||||
@Override
|
||||
public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) {
|
||||
recordAudio(latitude, longitude, mapActivity);
|
||||
}
|
||||
}).position(6).reg();
|
||||
adapter.item(R.string.recording_context_menu_vrecord).icons(R.drawable.ic_action_video_dark, R.drawable.ic_action_video_light).
|
||||
listen(new OnContextMenuClick() {
|
||||
@Override
|
||||
public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) {
|
||||
recordAudio(latitude, longitude, mapActivity);
|
||||
}
|
||||
}).position(6).reg();
|
||||
adapter.item(R.string.recording_context_menu_vrecord).icons(R.drawable.ic_action_video_dark, R.drawable.ic_action_video_light)
|
||||
.listen(new OnContextMenuClick() {
|
||||
|
||||
@Override
|
||||
public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) {
|
||||
recordVideo(latitude, longitude, mapActivity);
|
||||
}
|
||||
}).position(7).reg();
|
||||
adapter.item(R.string.recording_context_menu_precord).icons(R.drawable.ic_action_photo_dark, R.drawable.ic_action_photo_light).
|
||||
listen(new OnContextMenuClick() {
|
||||
@Override
|
||||
public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) {
|
||||
takePhoto(latitude, longitude, mapActivity);
|
||||
}
|
||||
@Override
|
||||
public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) {
|
||||
recordVideo(latitude, longitude, mapActivity);
|
||||
}
|
||||
}).position(7).reg();
|
||||
adapter.item(R.string.recording_context_menu_precord).icons(R.drawable.ic_action_photo_dark, R.drawable.ic_action_photo_light)
|
||||
.listen(new OnContextMenuClick() {
|
||||
@Override
|
||||
public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) {
|
||||
takePhoto(latitude, longitude, mapActivity);
|
||||
}
|
||||
|
||||
}).position(8).reg();
|
||||
}).position(8).reg();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateLayers(OsmandMapTileView mapView, MapActivity activity) {
|
||||
if(SHOW_RECORDINGS.get()) {
|
||||
if(audioNotesLayer == null) {
|
||||
if (SHOW_RECORDINGS.get()) {
|
||||
if (audioNotesLayer == null) {
|
||||
registerLayers(activity);
|
||||
} else if(!mapView.getLayers().contains(audioNotesLayer)) {
|
||||
} else if (!mapView.getLayers().contains(audioNotesLayer)) {
|
||||
mapView.addLayer(audioNotesLayer, 3.5f);
|
||||
}
|
||||
} else if(audioNotesLayer != null){
|
||||
} else if (audioNotesLayer != null) {
|
||||
mapView.removeLayer(audioNotesLayer);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void registerWidget(MapActivity activity) {
|
||||
MapInfoLayer mapInfoLayer = activity.getMapLayers().getMapInfoLayer();
|
||||
if (mapInfoLayer != null ) {
|
||||
if (mapInfoLayer != null) {
|
||||
recordControl = new TextInfoWidget(activity, 0, mapInfoLayer.getPaintText(), mapInfoLayer.getPaintSubText());
|
||||
recordControl.setImageDrawable(activity.getResources().getDrawable(R.drawable.monitoring_rec_inactive));
|
||||
setRecordListener(recordControl, activity);
|
||||
mapInfoLayer.getMapInfoControls().registerSideWidget(recordControl,
|
||||
R.drawable.widget_icon_av_inactive, R.string.map_widget_av_notes, "audionotes", false,
|
||||
EnumSet.allOf(ApplicationMode.class),
|
||||
mapInfoLayer.getMapInfoControls().registerSideWidget(recordControl, R.drawable.widget_icon_av_inactive,
|
||||
R.string.map_widget_av_notes, "audionotes", false, EnumSet.allOf(ApplicationMode.class),
|
||||
EnumSet.noneOf(ApplicationMode.class), 22);
|
||||
mapInfoLayer.recreateControls();
|
||||
}
|
||||
|
@ -496,7 +480,6 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
});
|
||||
}
|
||||
|
||||
|
||||
private void updateWidgetIcon(final TextInfoWidget recordPlaceControl) {
|
||||
recordPlaceControl.setImageDrawable(activity.getResources().getDrawable(R.drawable.widget_icon_av_inactive));
|
||||
if (AV_DEFAULT_ACTION.get() == AV_DEFAULT_ACTION_VIDEO) {
|
||||
|
@ -526,26 +509,23 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
private void chooseDefaultAction(final double lat, final double lon, final MapActivity mapActivity) {
|
||||
AccessibleAlertBuilder ab = new AccessibleAlertBuilder(mapActivity);
|
||||
ab.setItems(new String[] {
|
||||
mapActivity.getString(R.string.recording_context_menu_arecord),
|
||||
mapActivity.getString(R.string.recording_context_menu_vrecord),
|
||||
mapActivity.getString(R.string.recording_context_menu_precord),
|
||||
}, new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
int action = which == 0 ? AV_DEFAULT_ACTION_AUDIO :
|
||||
(which == 1 ? AV_DEFAULT_ACTION_VIDEO:AV_DEFAULT_ACTION_TAKEPICTURE);
|
||||
takeAction(mapActivity, lon, lat, action);
|
||||
ab.setItems(
|
||||
new String[] { mapActivity.getString(R.string.recording_context_menu_arecord),
|
||||
mapActivity.getString(R.string.recording_context_menu_vrecord),
|
||||
mapActivity.getString(R.string.recording_context_menu_precord), }, new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
int action = which == 0 ? AV_DEFAULT_ACTION_AUDIO : (which == 1 ? AV_DEFAULT_ACTION_VIDEO
|
||||
: AV_DEFAULT_ACTION_TAKEPICTURE);
|
||||
takeAction(mapActivity, lon, lat, action);
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
ab.show();
|
||||
}
|
||||
|
||||
|
||||
private void takeAction(final MapActivity mapActivity, double lon, double lat, int action) {
|
||||
if (action == AV_DEFAULT_ACTION_VIDEO) {
|
||||
recordVideo(lat, lon, mapActivity);
|
||||
|
@ -556,7 +536,6 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
private File getBaseFileName(double lat, double lon, OsmandApplication app, String ext) {
|
||||
String basename = MapUtils.createShortLocString(lat, lon, 15);
|
||||
int k = 1;
|
||||
|
@ -565,31 +544,31 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
File fl;
|
||||
do {
|
||||
fl = new File(f, basename + "-" + (k++) + "." + ext);
|
||||
} while(fl.exists());
|
||||
} while (fl.exists());
|
||||
return fl;
|
||||
}
|
||||
|
||||
public void captureImage(double lat, double lon, final MapActivity mapActivity) {
|
||||
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
|
||||
Uri fileUri = Uri.fromFile(getBaseFileName(lat, lon, app, IMG_EXTENSION));
|
||||
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name
|
||||
// start the image capture Intent
|
||||
mapActivity.startActivityForResult(intent, 105);
|
||||
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
|
||||
Uri fileUri = Uri.fromFile(getBaseFileName(lat, lon, app, IMG_EXTENSION));
|
||||
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name
|
||||
// start the image capture Intent
|
||||
mapActivity.startActivityForResult(intent, 105);
|
||||
}
|
||||
|
||||
public void captureVideoExternal(double lat, double lon, final MapActivity mapActivity) {
|
||||
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
|
||||
|
||||
String ext = MPEG4_EXTENSION;
|
||||
if(AV_VIDEO_FORMAT.get() == VIDEO_OUTPUT_3GP ){
|
||||
if (AV_VIDEO_FORMAT.get() == VIDEO_OUTPUT_3GP) {
|
||||
ext = THREEGP_EXTENSION;
|
||||
}
|
||||
Uri fileUri = Uri.fromFile(getBaseFileName(lat, lon, app, ext));
|
||||
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name
|
||||
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name
|
||||
|
||||
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); // set the video image quality to high
|
||||
// start the video capture Intent
|
||||
mapActivity.startActivityForResult(intent, 205);
|
||||
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); // set the video image quality to high
|
||||
// start the video capture Intent
|
||||
mapActivity.startActivityForResult(intent, 205);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -598,7 +577,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
}
|
||||
|
||||
public void recordVideo(final double lat, final double lon, final MapActivity mapActivity) {
|
||||
if(AV_EXTERNAL_RECORDER.get()) {
|
||||
if (AV_EXTERNAL_RECORDER.get()) {
|
||||
captureVideoExternal(lat, lon, mapActivity);
|
||||
} else {
|
||||
recordVideoCamera(lat, lon, mapActivity);
|
||||
|
@ -619,14 +598,14 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
public void surfaceCreated(SurfaceHolder holder) {
|
||||
MediaRecorder mr = new MediaRecorder();
|
||||
String ext = MPEG4_EXTENSION;
|
||||
if(AV_VIDEO_FORMAT.get() == VIDEO_OUTPUT_3GP ){
|
||||
if (AV_VIDEO_FORMAT.get() == VIDEO_OUTPUT_3GP) {
|
||||
ext = THREEGP_EXTENSION;
|
||||
}
|
||||
final File f = getBaseFileName(lat, lon, app,ext );
|
||||
final File f = getBaseFileName(lat, lon, app, ext);
|
||||
|
||||
mr.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
|
||||
mr.setVideoSource(MediaRecorder.VideoSource.CAMERA);
|
||||
if(AV_VIDEO_FORMAT.get() == VIDEO_OUTPUT_3GP ){
|
||||
if (AV_VIDEO_FORMAT.get() == VIDEO_OUTPUT_3GP) {
|
||||
mr.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
|
||||
} else {
|
||||
mr.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
|
||||
|
@ -680,7 +659,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
protected Camera openCamera() {
|
||||
try {
|
||||
return Camera.open();
|
||||
} catch (Exception e ){
|
||||
} catch (Exception e) {
|
||||
logErr(e);
|
||||
return null;
|
||||
}
|
||||
|
@ -697,7 +676,6 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
public void recordAudio(double lat, double lon, final MapActivity mapActivity) {
|
||||
MediaRecorder mr = new MediaRecorder();
|
||||
final File f = getBaseFileName(lat, lon, app, THREEGP_EXTENSION);
|
||||
|
@ -727,7 +705,6 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
private void takePhotoWithCamera(final double lat, final double lon, final MapActivity mapActivity, final Camera cam) {
|
||||
try {
|
||||
final Dialog dlg = new Dialog(mapActivity);
|
||||
|
@ -748,16 +725,16 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
int rotation = mapActivity.getWindowManager().getDefaultDisplay().getRotation();
|
||||
int degrees = 0;
|
||||
switch (rotation) {
|
||||
case /*Surface.ROTATION_0*/ 0:
|
||||
case /* Surface.ROTATION_0 */0:
|
||||
degrees = 0;
|
||||
break;
|
||||
case /*Surface.ROTATION_90*/ 1:
|
||||
case /* Surface.ROTATION_90 */1:
|
||||
degrees = 90;
|
||||
break;
|
||||
case /*Surface.ROTATION_180*/ 2:
|
||||
case /* Surface.ROTATION_180 */2:
|
||||
degrees = 180;
|
||||
break;
|
||||
case /*Surface.ROTATION_270*/ 3:
|
||||
case /* Surface.ROTATION_270 */3:
|
||||
degrees = 270;
|
||||
break;
|
||||
}
|
||||
|
@ -780,10 +757,10 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
|
||||
// camera focus type:
|
||||
boolean autofocus = true;
|
||||
// boolean autofocus = !Boolean.parseBoolean(parameters.get("auto-exposure-lock-supported"));
|
||||
// boolean autofocus = !Boolean.parseBoolean(parameters.get("auto-exposure-lock-supported"));
|
||||
parameters.setGpsLatitude(lat);
|
||||
parameters.setGpsLongitude(lon);
|
||||
switch( AV_CAMERA_FOCUS_TYPE.get() ) {
|
||||
switch (AV_CAMERA_FOCUS_TYPE.get()) {
|
||||
case AV_CAMERA_FOCUS_HIPERFOCAL:
|
||||
parameters.setFocusMode(Parameters.FOCUS_MODE_FIXED);
|
||||
autofocus = false;
|
||||
|
@ -812,16 +789,15 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
log.info("Osmand:AudioNotes set camera FOCUS_MODE_AUTO");
|
||||
break;
|
||||
}
|
||||
// parameters.setFocusMode(Parameters.FOCUS_MODE_FIXED);
|
||||
// parameters.set("auto-exposure-lock", "true");
|
||||
//}
|
||||
// parameters.setFocusMode(Parameters.FOCUS_MODE_FIXED);
|
||||
// parameters.set("auto-exposure-lock", "true");
|
||||
// }
|
||||
// load sound befor shot:
|
||||
if (AV_PHOTO_PLAY_SOUND.get()) {
|
||||
if(sp==null)
|
||||
if (sp == null)
|
||||
sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
|
||||
log.info("Play sound on photo");
|
||||
if(shotId==0)
|
||||
{
|
||||
if (shotId == 0) {
|
||||
shotId = sp.load(app.getAssets().openFd("sounds/camera_click.ogg"), 1);
|
||||
log.debug("loaded file sound ID: " + shotId);
|
||||
}
|
||||
|
@ -853,8 +829,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
}
|
||||
|
||||
private void printCamParams(Parameters parameters, boolean autoExposure) {
|
||||
log.info("Cam params auto exposure=" + autoExposure +
|
||||
" focus_distances="+parameters.get("focus-distances"));
|
||||
log.info("Cam params auto exposure=" + autoExposure + " focus_distances=" + parameters.get("focus-distances"));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -869,7 +844,6 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
private void takeIntentPhoto(double lat, double lon, final MapActivity mapActivity) {
|
||||
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
|
||||
final File f = getBaseFileName(lat, lon, app, IMG_EXTENSION);
|
||||
|
@ -892,7 +866,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
final MapInfoLayer mil = mapActivity.getMapLayers().getMapInfoLayer();
|
||||
final StackWidgetView par = mil.getRightStack();
|
||||
final boolean contains = par.getAllViews().contains(recordControl);
|
||||
if(!contains) {
|
||||
if (!contains) {
|
||||
par.addStackView(recordControl);
|
||||
mapActivity.getMapView().refreshMap(true);
|
||||
}
|
||||
|
@ -900,7 +874,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
recordControl.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if(!contains) {
|
||||
if (!contains) {
|
||||
par.removeView(recordControl);
|
||||
}
|
||||
stopRecording(mapActivity);
|
||||
|
@ -912,19 +886,19 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
});
|
||||
}
|
||||
|
||||
public void indexFile(File f){
|
||||
public void indexFile(File f) {
|
||||
boolean oldFileExist = recordingByFileName.containsKey(f.getName());
|
||||
if(oldFileExist){
|
||||
if (oldFileExist) {
|
||||
return;
|
||||
}
|
||||
Recording r = new Recording(f);
|
||||
String encodeName = f.getName();
|
||||
int i = encodeName.indexOf('-');
|
||||
if(i > 0) {
|
||||
if (i > 0) {
|
||||
encodeName = encodeName.substring(0, i);
|
||||
}
|
||||
i = encodeName.indexOf('.');
|
||||
if(i > 0) {
|
||||
if (i > 0) {
|
||||
encodeName = encodeName.substring(0, i);
|
||||
}
|
||||
r.file = f;
|
||||
|
@ -933,7 +907,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
r.lon = l.getLongitude();
|
||||
Float heading = app.getLocationProvider().getHeading();
|
||||
Location loc = app.getLocationProvider().getLastKnownLocation();
|
||||
if(lastTakingPhoto != null && lastTakingPhoto.getName().equals(f.getName()) && heading != null) {
|
||||
if (lastTakingPhoto != null && lastTakingPhoto.getName().equals(f.getName()) && heading != null) {
|
||||
float rot = heading.floatValue();
|
||||
try {
|
||||
r.updatePhotoInformation(r.lat, r.lon, loc, rot == 0 ? Double.NaN : rot);
|
||||
|
@ -949,30 +923,41 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
@Override
|
||||
public void disable(OsmandApplication app) {
|
||||
AudioManager am = (AudioManager) app.getSystemService(Context.AUDIO_SERVICE);
|
||||
if(am != null){
|
||||
if (am != null) {
|
||||
unregisterMediaListener(am);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> indexingFiles(IProgress progress) {
|
||||
return indexingFiles(progress, true);
|
||||
return indexingFiles(progress, true, false);
|
||||
}
|
||||
|
||||
public List<String> indexingFiles(IProgress progress, boolean reIndexAndKeepOld) {
|
||||
public List<String> indexingFiles(IProgress progress, boolean reIndexAndKeepOld, boolean registerNew) {
|
||||
File avPath = app.getAppPath(IndexConstants.AV_INDEX_DIR);
|
||||
if (avPath.canRead()) {
|
||||
if(!reIndexAndKeepOld) {
|
||||
if (!reIndexAndKeepOld) {
|
||||
recordings.clear();
|
||||
recordingByFileName.clear();
|
||||
}
|
||||
File[] files = avPath.listFiles();
|
||||
if (files != null) {
|
||||
for (File f : files) {
|
||||
if(f.getName().endsWith(THREEGP_EXTENSION)
|
||||
|| f.getName().endsWith(MPEG4_EXTENSION)
|
||||
if (f.getName().endsWith(THREEGP_EXTENSION) || f.getName().endsWith(MPEG4_EXTENSION)
|
||||
|| f.getName().endsWith(IMG_EXTENSION)) {
|
||||
indexFile(f);
|
||||
if (registerNew) {
|
||||
Recording rec = recordingByFileName.get(f.getName());
|
||||
if (rec != null) {
|
||||
String name = f.getName();
|
||||
SavingTrackHelper savingTrackHelper = app.getSavingTrackHelper();
|
||||
savingTrackHelper.insertPointData(rec.lat, rec.lon, System.currentTimeMillis(), name);
|
||||
if (app.getSettings().SHOW_CURRENT_GPX_TRACK.get()) {
|
||||
app.getFavorites().addFavoritePointToGPXFile(new FavouritePoint(rec.lat, rec.lon, name, ""));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -980,23 +965,21 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
return null;
|
||||
}
|
||||
|
||||
|
||||
public DataTileManager<Recording> getRecordings() {
|
||||
return recordings;
|
||||
}
|
||||
|
||||
private void checkRecordings(){
|
||||
private void checkRecordings() {
|
||||
Iterator<Recording> it = recordingByFileName.values().iterator();
|
||||
while(it.hasNext()){
|
||||
while (it.hasNext()) {
|
||||
Recording r = it.next();
|
||||
if(!r.file.exists()) {
|
||||
if (!r.file.exists()) {
|
||||
it.remove();
|
||||
recordings.unregisterObject(r.lat, r.lon, r);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void deleteRecording(Recording r) {
|
||||
recordings.unregisterObject(r.lat, r.lon, r);
|
||||
recordingByFileName.remove(r.file.getName());
|
||||
|
@ -1005,7 +988,6 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
activity.getMapView().refreshMap();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void settingsActivityCreate(final SettingsActivity activity, PreferenceScreen screen) {
|
||||
Preference grp = new Preference(activity);
|
||||
|
@ -1024,13 +1006,13 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
|
||||
@Override
|
||||
public void onMapActivityExternalResult(int requestCode, int resultCode, Intent data) {
|
||||
if(requestCode == 205) {
|
||||
indexingFiles(null, true);
|
||||
if (requestCode == 205) {
|
||||
indexingFiles(null, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean onMapActivityKeyEvent(KeyEvent key){
|
||||
if(KeyEvent.KEYCODE_CAMERA == key.getKeyCode()) {
|
||||
public boolean onMapActivityKeyEvent(KeyEvent key) {
|
||||
if (KeyEvent.KEYCODE_CAMERA == key.getKeyCode()) {
|
||||
defaultAction(activity);
|
||||
return true;
|
||||
}
|
||||
|
@ -1088,27 +1070,27 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
playRecording(la, ri.rec);
|
||||
}
|
||||
};
|
||||
if(ri.rec.isPhoto()) {
|
||||
adapter.item(R.string.recording_context_menu_show).icons(
|
||||
R.drawable.ic_action_eye_dark, R.drawable.ic_action_eye_light).listen(listener).reg();
|
||||
if (ri.rec.isPhoto()) {
|
||||
adapter.item(R.string.recording_context_menu_show).icons(R.drawable.ic_action_eye_dark, R.drawable.ic_action_eye_light)
|
||||
.listen(listener).reg();
|
||||
} else {
|
||||
adapter.item(R.string.recording_context_menu_play).icons(
|
||||
R.drawable.ic_action_play_dark, R.drawable.ic_action_play_light).listen(listener).reg();
|
||||
adapter.item(R.string.recording_context_menu_play).icons(R.drawable.ic_action_play_dark, R.drawable.ic_action_play_light)
|
||||
.listen(listener).reg();
|
||||
}
|
||||
adapter.item(R.string.show_location).icons(R.drawable.ic_action_marker_dark, R.drawable.ic_action_marker_light).
|
||||
listen(new OnContextMenuClick() {
|
||||
@Override
|
||||
public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) {
|
||||
SHOW_RECORDINGS.set(true);
|
||||
app.getSettings().setMapLocationToShow(ri.rec.lat, ri.rec.lon, app.getSettings().getLastKnownMapZoom());
|
||||
MapActivity.launchMapActivityMoveToTop(la);
|
||||
adapter.item(R.string.show_location).icons(R.drawable.ic_action_marker_dark, R.drawable.ic_action_marker_light)
|
||||
.listen(new OnContextMenuClick() {
|
||||
@Override
|
||||
public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) {
|
||||
SHOW_RECORDINGS.set(true);
|
||||
app.getSettings().setMapLocationToShow(ri.rec.lat, ri.rec.lon, app.getSettings().getLastKnownMapZoom());
|
||||
MapActivity.launchMapActivityMoveToTop(la);
|
||||
|
||||
}
|
||||
}).reg();
|
||||
}
|
||||
}).reg();
|
||||
}
|
||||
}
|
||||
|
||||
public Collection<Recording> getAllRecordings(){
|
||||
public Collection<Recording> getAllRecordings() {
|
||||
return recordingByFileName.values();
|
||||
}
|
||||
|
||||
|
@ -1128,7 +1110,6 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
return res;
|
||||
}
|
||||
|
||||
|
||||
public void playRecording(final Context ctx, final Recording r) {
|
||||
final MediaPlayer player = r.isPhoto() ? null : new MediaPlayer();
|
||||
final AccessibleAlertBuilder dlg = new AccessibleAlertBuilder(ctx);
|
||||
|
@ -1136,7 +1117,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
|
||||
@Override
|
||||
public void onClick(DialogInterface v, int w) {
|
||||
if(player == null) {
|
||||
if (player == null) {
|
||||
Intent vint = new Intent(Intent.ACTION_VIEW);
|
||||
vint.setDataAndType(Uri.fromFile(r.file), "image/*");
|
||||
vint.setFlags(0x10000000);
|
||||
|
@ -1156,11 +1137,11 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
}
|
||||
}
|
||||
});
|
||||
dlg.setNegativeButton(R.string.default_buttons_cancel, new OnClickListener(){
|
||||
dlg.setNegativeButton(R.string.default_buttons_cancel, new OnClickListener() {
|
||||
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
if(player != null && player.isPlaying()) {
|
||||
if (player != null && player.isPlaying()) {
|
||||
player.stop();
|
||||
}
|
||||
|
||||
|
@ -1226,21 +1207,18 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
FileOutputStream fos = new FileOutputStream(pictureFile);
|
||||
fos.write(data);
|
||||
fos.close();
|
||||
indexingFiles(null, true);
|
||||
indexingFiles(null, true, true);
|
||||
dlg.dismiss();
|
||||
// play sound after photo - sound file must be loaded at this time:
|
||||
if (AV_PHOTO_PLAY_SOUND.get()) {
|
||||
if(sp!=null && shotId!=0)
|
||||
{
|
||||
int ret=sp.play(shotId, 0.7f, 0.7f, 0, 0, 1);
|
||||
if (sp != null && shotId != 0) {
|
||||
int ret = sp.play(shotId, 0.7f, 0.7f, 0, 0, 1);
|
||||
log.debug("play sound shot success!");
|
||||
log.debug("sp.play()="+ret);
|
||||
// sp.release();
|
||||
// sp=null;
|
||||
// shotId=0
|
||||
}
|
||||
else
|
||||
{
|
||||
log.debug("sp.play()=" + ret);
|
||||
// sp.release();
|
||||
// sp=null;
|
||||
// shotId=0
|
||||
} else {
|
||||
log.error("can not play sound on shot - not init SoundPool or not loaded sound");
|
||||
}
|
||||
}
|
||||
|
|