commit
aa8bed7e65
19 changed files with 539 additions and 19 deletions
|
@ -93,6 +93,9 @@ import net.osmand.aidlapi.contextmenu.RemoveContextMenuButtonsParams;
|
|||
|
||||
import net.osmand.aidlapi.mapmarker.RemoveMapMarkersParams;
|
||||
|
||||
import net.osmand.aidlapi.quickaction.QuickActionParams;
|
||||
import net.osmand.aidlapi.quickaction.QuickActionInfoParams;
|
||||
|
||||
// NOTE: Add new methods at the end of file!!!
|
||||
|
||||
interface IOsmAndAidlInterface {
|
||||
|
@ -834,4 +837,8 @@ interface IOsmAndAidlInterface {
|
|||
boolean removeAllActiveMapMarkers(in RemoveMapMarkersParams params);
|
||||
|
||||
boolean importProfile(in ProfileSettingsParams params);
|
||||
|
||||
boolean executeQuickAction(in QuickActionParams params);
|
||||
|
||||
boolean getQuickActionsInfo(out List<QuickActionInfoParams> quickActions);
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
package net.osmand.aidlapi.quickaction;
|
||||
|
||||
parcelable QuickActionInfoParams;
|
|
@ -0,0 +1,69 @@
|
|||
package net.osmand.aidlapi.quickaction;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.os.Parcel;
|
||||
|
||||
import net.osmand.aidlapi.AidlParams;
|
||||
|
||||
public class QuickActionInfoParams extends AidlParams {
|
||||
|
||||
private int actionId;
|
||||
private String name;
|
||||
private String actionType;
|
||||
private String params;
|
||||
|
||||
public QuickActionInfoParams(int actionId, String name, String actionType, String params) {
|
||||
this.actionId = actionId;
|
||||
this.name = name;
|
||||
this.actionType = actionType;
|
||||
this.params = params;
|
||||
}
|
||||
|
||||
public QuickActionInfoParams(Parcel in) {
|
||||
readFromParcel(in);
|
||||
}
|
||||
|
||||
public static final Creator<QuickActionInfoParams> CREATOR = new Creator<QuickActionInfoParams>() {
|
||||
@Override
|
||||
public QuickActionInfoParams createFromParcel(Parcel in) {
|
||||
return new QuickActionInfoParams(in);
|
||||
}
|
||||
|
||||
@Override
|
||||
public QuickActionInfoParams[] newArray(int size) {
|
||||
return new QuickActionInfoParams[size];
|
||||
}
|
||||
};
|
||||
|
||||
public int getActionId() {
|
||||
return actionId;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public String getActionType() {
|
||||
return actionType;
|
||||
}
|
||||
|
||||
public String getParams() {
|
||||
return params;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToBundle(Bundle bundle) {
|
||||
bundle.putInt("actionId", actionId);
|
||||
bundle.putString("name", name);
|
||||
bundle.putString("actionType", actionType);
|
||||
bundle.putString("params", params);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void readFromBundle(Bundle bundle) {
|
||||
actionId = bundle.getInt("actionNumber");
|
||||
name = bundle.getString("name");
|
||||
actionType = bundle.getString("actionType");
|
||||
params = bundle.getString("params");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
package net.osmand.aidlapi.quickaction;
|
||||
|
||||
parcelable QuickActionParams;
|
|
@ -0,0 +1,45 @@
|
|||
package net.osmand.aidlapi.quickaction;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.os.Parcel;
|
||||
|
||||
import net.osmand.aidlapi.AidlParams;
|
||||
|
||||
public class QuickActionParams extends AidlParams {
|
||||
|
||||
private int actionNumber;
|
||||
|
||||
public QuickActionParams(int actionNumber) {
|
||||
this.actionNumber = actionNumber;
|
||||
}
|
||||
|
||||
public QuickActionParams(Parcel in) {
|
||||
readFromParcel(in);
|
||||
}
|
||||
|
||||
public static final Creator<QuickActionParams> CREATOR = new Creator<QuickActionParams>() {
|
||||
@Override
|
||||
public QuickActionParams createFromParcel(Parcel in) {
|
||||
return new QuickActionParams(in);
|
||||
}
|
||||
|
||||
@Override
|
||||
public QuickActionParams[] newArray(int size) {
|
||||
return new QuickActionParams[size];
|
||||
}
|
||||
};
|
||||
|
||||
public int getActionNumber() {
|
||||
return actionNumber;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToBundle(Bundle bundle) {
|
||||
bundle.putInt("actionNumber", actionNumber);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void readFromBundle(Bundle bundle) {
|
||||
actionNumber = bundle.getInt("actionNumber");
|
||||
}
|
||||
}
|
|
@ -73,6 +73,7 @@ import net.osmand.aidl.customization.SetWidgetsParams;
|
|||
import net.osmand.aidl.customization.OsmandSettingsParams;
|
||||
import net.osmand.aidl.customization.OsmandSettingsInfoParams;
|
||||
import net.osmand.aidl.customization.CustomizationInfoParams;
|
||||
import net.osmand.aidl.customization.ProfileSettingsParams;
|
||||
|
||||
import net.osmand.aidl.gpx.AGpxFile;
|
||||
import net.osmand.aidl.gpx.AGpxFileDetails;
|
||||
|
@ -93,6 +94,8 @@ import net.osmand.aidl.contextmenu.RemoveContextMenuButtonsParams;
|
|||
|
||||
import net.osmand.aidl.mapmarker.RemoveMapMarkersParams;
|
||||
|
||||
import net.osmand.aidl.quickaction.QuickActionParams;
|
||||
|
||||
// NOTE: Add new methods at the end of file!!!
|
||||
|
||||
interface IOsmAndAidlInterface {
|
||||
|
@ -305,6 +308,13 @@ interface IOsmAndAidlInterface {
|
|||
*/
|
||||
boolean addFavoriteGroup(in AddFavoriteGroupParams params);
|
||||
|
||||
/**
|
||||
* Remove favorite group with given name.
|
||||
*
|
||||
* @param name (String) - name of favorite group.
|
||||
*/
|
||||
boolean removeFavoriteGroup(in RemoveFavoriteGroupParams params);
|
||||
|
||||
/**
|
||||
* Update favorite group with given params.
|
||||
*
|
||||
|
@ -315,13 +325,6 @@ interface IOsmAndAidlInterface {
|
|||
* @param colorNew (String) - group color (new).
|
||||
* @param visibleNew (boolean) - group visibility (new).
|
||||
*/
|
||||
boolean removeFavoriteGroup(in RemoveFavoriteGroupParams params);
|
||||
|
||||
/**
|
||||
* Remove favorite group with given name.
|
||||
*
|
||||
* @param name (String) - name of favorite group.
|
||||
*/
|
||||
boolean updateFavoriteGroup(in UpdateFavoriteGroupParams params);
|
||||
|
||||
/**
|
||||
|
@ -338,6 +341,16 @@ interface IOsmAndAidlInterface {
|
|||
*/
|
||||
boolean addFavorite(in AddFavoriteParams params);
|
||||
|
||||
/**
|
||||
* Remove favorite at given location with given params.
|
||||
*
|
||||
* @param lat (double) - latitude.
|
||||
* @param lon (double) - longitude.
|
||||
* @param name (String) - name of favorite item.
|
||||
* @param category (String) - category of favorite item.
|
||||
*/
|
||||
boolean removeFavorite(in RemoveFavoriteParams params);
|
||||
|
||||
/**
|
||||
* Update favorite at given location with given params.
|
||||
*
|
||||
|
@ -356,16 +369,6 @@ interface IOsmAndAidlInterface {
|
|||
* "lightgreen", "green", "lightblue", "blue", "purple", "pink", "brown".
|
||||
* @param visibleNew (boolean) - should new category be visible after creation.
|
||||
*/
|
||||
boolean removeFavorite(in RemoveFavoriteParams params);
|
||||
|
||||
/**
|
||||
* Remove favorite at given location with given params.
|
||||
*
|
||||
* @param lat (double) - latitude.
|
||||
* @param lon (double) - longitude.
|
||||
* @param name (String) - name of favorite item.
|
||||
* @param category (String) - category of favorite item.
|
||||
*/
|
||||
boolean updateFavorite(in UpdateFavoriteParams params);
|
||||
|
||||
/**
|
||||
|
@ -846,4 +849,8 @@ interface IOsmAndAidlInterface {
|
|||
*
|
||||
*/
|
||||
boolean getGpxColor(inout GpxColorParams params);
|
||||
|
||||
boolean importProfile(in ProfileSettingsParams params);
|
||||
|
||||
boolean executeQuickAction(in QuickActionParams params);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
package net.osmand.aidl.customization;
|
||||
|
||||
parcelable ProfileSettingsParams;
|
|
@ -0,0 +1,64 @@
|
|||
package net.osmand.aidl.customization;
|
||||
|
||||
import android.net.Uri;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
||||
public class ProfileSettingsParams implements Parcelable {
|
||||
|
||||
private Uri profileSettingsUri;
|
||||
private String latestChanges;
|
||||
private int version;
|
||||
|
||||
public ProfileSettingsParams(Uri profileSettingsUri, String latestChanges, int version) {
|
||||
this.profileSettingsUri = profileSettingsUri;
|
||||
this.latestChanges = latestChanges;
|
||||
this.version = version;
|
||||
}
|
||||
|
||||
public ProfileSettingsParams(Parcel in) {
|
||||
readFromParcel(in);
|
||||
}
|
||||
|
||||
public static final Creator<ProfileSettingsParams> CREATOR = new Creator<ProfileSettingsParams>() {
|
||||
@Override
|
||||
public ProfileSettingsParams createFromParcel(Parcel in) {
|
||||
return new ProfileSettingsParams(in);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProfileSettingsParams[] newArray(int size) {
|
||||
return new ProfileSettingsParams[size];
|
||||
}
|
||||
};
|
||||
|
||||
public int getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
public String getLatestChanges() {
|
||||
return latestChanges;
|
||||
}
|
||||
|
||||
public Uri getProfileSettingsUri() {
|
||||
return profileSettingsUri;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel out, int flags) {
|
||||
out.writeInt(version);
|
||||
out.writeString(latestChanges);
|
||||
out.writeParcelable(profileSettingsUri, flags);
|
||||
}
|
||||
|
||||
private void readFromParcel(Parcel in) {
|
||||
version = in.readInt();
|
||||
latestChanges = in.readString();
|
||||
profileSettingsUri = in.readParcelable(Uri.class.getClassLoader());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
package net.osmand.aidl.quickaction;
|
||||
|
||||
parcelable QuickActionParams;
|
|
@ -0,0 +1,47 @@
|
|||
package net.osmand.aidl.quickaction;
|
||||
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
||||
public class QuickActionParams implements Parcelable {
|
||||
|
||||
private int actionNumber;
|
||||
|
||||
public QuickActionParams(int actionNumber) {
|
||||
this.actionNumber = actionNumber;
|
||||
}
|
||||
|
||||
public QuickActionParams(Parcel in) {
|
||||
readFromParcel(in);
|
||||
}
|
||||
|
||||
public static final Creator<QuickActionParams> CREATOR = new Creator<QuickActionParams>() {
|
||||
@Override
|
||||
public QuickActionParams createFromParcel(Parcel in) {
|
||||
return new QuickActionParams(in);
|
||||
}
|
||||
|
||||
@Override
|
||||
public QuickActionParams[] newArray(int size) {
|
||||
return new QuickActionParams[size];
|
||||
}
|
||||
};
|
||||
|
||||
public int getActionNumber() {
|
||||
return actionNumber;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel out, int flags) {
|
||||
out.writeInt(actionNumber);
|
||||
}
|
||||
|
||||
private void readFromParcel(Parcel in) {
|
||||
actionNumber = in.readInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
}
|
|
@ -94,6 +94,9 @@ import net.osmand.aidl.contextmenu.RemoveContextMenuButtonsParams;
|
|||
|
||||
import net.osmand.aidl.mapmarker.RemoveMapMarkersParams;
|
||||
|
||||
import net.osmand.aidl.quickaction.QuickActionParams;
|
||||
import net.osmand.aidl.quickaction.QuickActionInfoParams;
|
||||
|
||||
// NOTE: Add new methods at the end of file!!!
|
||||
|
||||
interface IOsmAndAidlInterface {
|
||||
|
@ -849,4 +852,8 @@ interface IOsmAndAidlInterface {
|
|||
boolean getGpxColor(inout GpxColorParams params);
|
||||
|
||||
boolean importProfile(in ProfileSettingsParams params);
|
||||
|
||||
boolean executeQuickAction(in QuickActionParams params);
|
||||
|
||||
boolean getQuickActionsInfo(out List<QuickActionInfoParams> quickActions);
|
||||
}
|
||||
|
|
|
@ -20,6 +20,9 @@ import androidx.annotation.NonNull;
|
|||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
|
||||
import net.osmand.AndroidUtils;
|
||||
import net.osmand.CallbackWithObject;
|
||||
import net.osmand.GPXUtilities;
|
||||
|
@ -32,6 +35,7 @@ import net.osmand.aidl.gpx.AGpxFileDetails;
|
|||
import net.osmand.aidl.gpx.ASelectedGpxFile;
|
||||
import net.osmand.aidl.navigation.ADirectionInfo;
|
||||
import net.osmand.aidl.navigation.OnVoiceNavigationParams;
|
||||
import net.osmand.aidl.quickaction.QuickActionInfoParams;
|
||||
import net.osmand.aidl.tiles.ASqliteDbFile;
|
||||
import net.osmand.data.FavouritePoint;
|
||||
import net.osmand.data.LatLon;
|
||||
|
@ -63,6 +67,8 @@ import net.osmand.plus.mapcontextmenu.MapContextMenu;
|
|||
import net.osmand.plus.mapcontextmenu.other.IContextMenuButtonListener;
|
||||
import net.osmand.plus.monitoring.OsmandMonitoringPlugin;
|
||||
import net.osmand.plus.myplaces.TrackBitmapDrawer;
|
||||
import net.osmand.plus.quickaction.QuickAction;
|
||||
import net.osmand.plus.quickaction.QuickActionRegistry;
|
||||
import net.osmand.plus.rastermaps.OsmandRasterMapsPlugin;
|
||||
import net.osmand.plus.routing.IRoutingDataUpdateListener;
|
||||
import net.osmand.plus.routing.RouteCalculationResult.NextDirectionInfo;
|
||||
|
@ -90,9 +96,11 @@ import java.io.FileOutputStream;
|
|||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
|
@ -167,6 +175,9 @@ public class OsmandAidlApi {
|
|||
private static final String AIDL_HIDE_SQLITEDB_FILE = "aidl_hide_sqlitedb_file";
|
||||
private static final String AIDL_FILE_NAME = "aidl_file_name";
|
||||
|
||||
private static final String AIDL_EXECUTE_QUICK_ACTION = "aidl_execute_quick_action";
|
||||
private static final String AIDL_QUICK_ACTION_NUMBER = "aidl_quick_action_number";
|
||||
|
||||
|
||||
private static final ApplicationMode DEFAULT_PROFILE = ApplicationMode.CAR;
|
||||
|
||||
|
@ -216,6 +227,7 @@ public class OsmandAidlApi {
|
|||
registerUnmuteNavigationReceiver(mapActivity);
|
||||
registerShowSqliteDbFileReceiver(mapActivity);
|
||||
registerHideSqliteDbFileReceiver(mapActivity);
|
||||
registerExecuteQuickActionReceiver(mapActivity);
|
||||
initOsmandTelegram();
|
||||
app.getAppCustomization().addListener(mapActivity);
|
||||
aMapPointUpdateListener = mapActivity;
|
||||
|
@ -824,6 +836,24 @@ public class OsmandAidlApi {
|
|||
registerReceiver(hideSqliteDbFileReceiver, mapActivity, AIDL_HIDE_SQLITEDB_FILE);
|
||||
}
|
||||
|
||||
private void registerExecuteQuickActionReceiver(MapActivity mapActivity) {
|
||||
final WeakReference<MapActivity> mapActivityRef = new WeakReference<>(mapActivity);
|
||||
BroadcastReceiver executeQuickActionReceiver = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
int actionNumber = intent.getIntExtra(AIDL_QUICK_ACTION_NUMBER, -1);
|
||||
MapActivity mapActivity = mapActivityRef.get();
|
||||
if (actionNumber != -1 && mapActivity != null) {
|
||||
List<QuickAction> actionsList = app.getQuickActionRegistry().getFilteredQuickActions();
|
||||
if (actionNumber < actionsList.size()) {
|
||||
QuickActionRegistry.produceAction(actionsList.get(actionNumber)).execute(mapActivity);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
registerReceiver(executeQuickActionReceiver, mapActivity, AIDL_EXECUTE_QUICK_ACTION);
|
||||
}
|
||||
|
||||
public void registerMapLayers(@NonNull MapActivity mapActivity) {
|
||||
for (ConnectedApp connectedApp : connectedApps.values()) {
|
||||
connectedApp.registerMapLayers(mapActivity);
|
||||
|
@ -2110,6 +2140,48 @@ public class OsmandAidlApi {
|
|||
}
|
||||
}
|
||||
|
||||
public boolean executeQuickAction(int actionNumber) {
|
||||
Intent intent = new Intent();
|
||||
intent.setAction(AIDL_EXECUTE_QUICK_ACTION);
|
||||
intent.putExtra(AIDL_QUICK_ACTION_NUMBER, actionNumber);
|
||||
app.sendBroadcast(intent);
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean getQuickActionsInfo(List<QuickActionInfoParams> quickActions) {
|
||||
Gson gson = new Gson();
|
||||
Type type = new TypeToken<HashMap<String, String>>() {
|
||||
}.getType();
|
||||
|
||||
List<QuickAction> actionsList = app.getQuickActionRegistry().getFilteredQuickActions();
|
||||
for (int i = 0; i < actionsList.size(); i++) {
|
||||
QuickAction action = actionsList.get(i);
|
||||
String name = action.getName(app);
|
||||
String actionType = action.getActionType().getStringId();
|
||||
String params = gson.toJson(action.getParams(), type);
|
||||
|
||||
quickActions.add(new QuickActionInfoParams(i, name, actionType, params));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean getQuickActionsInfoV2(List<net.osmand.aidlapi.quickaction.QuickActionInfoParams> quickActions) {
|
||||
Gson gson = new Gson();
|
||||
Type type = new TypeToken<HashMap<String, String>>() {
|
||||
}.getType();
|
||||
|
||||
List<QuickAction> actionsList = app.getQuickActionRegistry().getFilteredQuickActions();
|
||||
for (int i = 0; i < actionsList.size(); i++) {
|
||||
QuickAction action = actionsList.get(i);
|
||||
String name = action.getName(app);
|
||||
String actionType = action.getActionType().getStringId();
|
||||
String params = gson.toJson(action.getParams(), type);
|
||||
|
||||
quickActions.add(new net.osmand.aidlapi.quickaction.QuickActionInfoParams(i, name, actionType, params));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private class FileCopyInfo {
|
||||
long startTime;
|
||||
long lastAccessTime;
|
||||
|
|
|
@ -80,6 +80,8 @@ import net.osmand.aidl.note.StartVideoRecordingParams;
|
|||
import net.osmand.aidl.note.StopRecordingParams;
|
||||
import net.osmand.aidl.note.TakePhotoNoteParams;
|
||||
import net.osmand.aidl.plugins.PluginParams;
|
||||
import net.osmand.aidl.quickaction.QuickActionInfoParams;
|
||||
import net.osmand.aidl.quickaction.QuickActionParams;
|
||||
import net.osmand.aidl.search.SearchParams;
|
||||
import net.osmand.aidl.search.SearchResult;
|
||||
import net.osmand.aidl.tiles.ASqliteDbFile;
|
||||
|
@ -1302,6 +1304,28 @@ public class OsmandAidlService extends Service implements AidlCallbackListener {
|
|||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean executeQuickAction(QuickActionParams params) {
|
||||
try {
|
||||
OsmandAidlApi api = getApi("executeQuickAction");
|
||||
return api != null && api.executeQuickAction(params.getActionNumber());
|
||||
} catch (Exception e) {
|
||||
handleException(e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getQuickActionsInfo(List<QuickActionInfoParams> quickActions) {
|
||||
try {
|
||||
OsmandAidlApi api = getApi("getQuickActionsInfo");
|
||||
return api != null && api.getQuickActionsInfo(quickActions);
|
||||
} catch (Exception e) {
|
||||
handleException(e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private void setCustomization(OsmandAidlApi api, CustomizationInfoParams params) {
|
||||
|
|
|
@ -81,6 +81,8 @@ import net.osmand.aidlapi.note.StartVideoRecordingParams;
|
|||
import net.osmand.aidlapi.note.StopRecordingParams;
|
||||
import net.osmand.aidlapi.note.TakePhotoNoteParams;
|
||||
import net.osmand.aidlapi.plugins.PluginParams;
|
||||
import net.osmand.aidlapi.quickaction.QuickActionInfoParams;
|
||||
import net.osmand.aidlapi.quickaction.QuickActionParams;
|
||||
import net.osmand.aidlapi.search.SearchParams;
|
||||
import net.osmand.aidlapi.search.SearchResult;
|
||||
import net.osmand.aidlapi.tiles.ASqliteDbFile;
|
||||
|
@ -1235,6 +1237,28 @@ public class OsmandAidlServiceV2 extends Service implements AidlCallbackListener
|
|||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean executeQuickAction(QuickActionParams params) {
|
||||
try {
|
||||
OsmandAidlApi api = getApi("executeQuickAction");
|
||||
return api != null && api.executeQuickAction(params.getActionNumber());
|
||||
} catch (Exception e) {
|
||||
handleException(e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getQuickActionsInfo(List<QuickActionInfoParams> quickActions) {
|
||||
try {
|
||||
OsmandAidlApi api = getApi("getQuickActionsInfo");
|
||||
return api != null && api.getQuickActionsInfoV2(quickActions);
|
||||
} catch (Exception e) {
|
||||
handleException(e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private void setCustomization(OsmandAidlApi api, CustomizationInfoParams params) {
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
package net.osmand.aidl.quickaction;
|
||||
|
||||
parcelable QuickActionInfoParams;
|
|
@ -0,0 +1,71 @@
|
|||
package net.osmand.aidl.quickaction;
|
||||
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
||||
public class QuickActionInfoParams implements Parcelable {
|
||||
|
||||
private int actionId;
|
||||
private String name;
|
||||
private String actionType;
|
||||
private String params;
|
||||
|
||||
public QuickActionInfoParams(int actionId, String name, String actionType, String params) {
|
||||
this.actionId = actionId;
|
||||
this.name = name;
|
||||
this.actionType = actionType;
|
||||
this.params = params;
|
||||
}
|
||||
|
||||
public QuickActionInfoParams(Parcel in) {
|
||||
readFromParcel(in);
|
||||
}
|
||||
|
||||
public static final Creator<QuickActionInfoParams> CREATOR = new Creator<QuickActionInfoParams>() {
|
||||
@Override
|
||||
public QuickActionInfoParams createFromParcel(Parcel in) {
|
||||
return new QuickActionInfoParams(in);
|
||||
}
|
||||
|
||||
@Override
|
||||
public QuickActionInfoParams[] newArray(int size) {
|
||||
return new QuickActionInfoParams[size];
|
||||
}
|
||||
};
|
||||
|
||||
public int getActionId() {
|
||||
return actionId;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public String getActionType() {
|
||||
return actionType;
|
||||
}
|
||||
|
||||
public String getParams() {
|
||||
return params;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel out, int flags) {
|
||||
out.writeInt(actionId);
|
||||
out.writeString(name);
|
||||
out.writeString(actionType);
|
||||
out.writeString(params);
|
||||
}
|
||||
|
||||
private void readFromParcel(Parcel in) {
|
||||
actionId = in.readInt();
|
||||
name = in.readString();
|
||||
actionType = in.readString();
|
||||
params = in.readString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
package net.osmand.aidl.quickaction;
|
||||
|
||||
parcelable QuickActionParams;
|
|
@ -0,0 +1,47 @@
|
|||
package net.osmand.aidl.quickaction;
|
||||
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
||||
public class QuickActionParams implements Parcelable {
|
||||
|
||||
private int actionNumber;
|
||||
|
||||
public QuickActionParams(int actionNumber) {
|
||||
this.actionNumber = actionNumber;
|
||||
}
|
||||
|
||||
public QuickActionParams(Parcel in) {
|
||||
readFromParcel(in);
|
||||
}
|
||||
|
||||
public static final Creator<QuickActionParams> CREATOR = new Creator<QuickActionParams>() {
|
||||
@Override
|
||||
public QuickActionParams createFromParcel(Parcel in) {
|
||||
return new QuickActionParams(in);
|
||||
}
|
||||
|
||||
@Override
|
||||
public QuickActionParams[] newArray(int size) {
|
||||
return new QuickActionParams[size];
|
||||
}
|
||||
};
|
||||
|
||||
public int getActionNumber() {
|
||||
return actionNumber;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel out, int flags) {
|
||||
out.writeInt(actionNumber);
|
||||
}
|
||||
|
||||
private void readFromParcel(Parcel in) {
|
||||
actionNumber = in.readInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
}
|
|
@ -36,6 +36,8 @@ import net.osmand.plus.activities.MapActivity.ShowQuickSearchMode;
|
|||
import net.osmand.plus.audionotes.AudioVideoNotesPlugin;
|
||||
import net.osmand.plus.mapcontextmenu.MapContextMenu;
|
||||
import net.osmand.plus.monitoring.OsmandMonitoringPlugin;
|
||||
import net.osmand.plus.quickaction.QuickAction;
|
||||
import net.osmand.plus.quickaction.QuickActionRegistry;
|
||||
import net.osmand.plus.routing.RouteCalculationResult.NextDirectionInfo;
|
||||
import net.osmand.plus.routing.RouteDirectionInfo;
|
||||
import net.osmand.plus.routing.RoutingHelper;
|
||||
|
@ -96,6 +98,8 @@ public class ExternalApiHelper {
|
|||
public static final String API_CMD_SAVE_GPX = "save_gpx";
|
||||
public static final String API_CMD_CLEAR_GPX = "clear_gpx";
|
||||
|
||||
public static final String API_EXECUTE_QUICK_ACTION = "execute_quick_action";
|
||||
|
||||
public static final String API_CMD_SUBSCRIBE_VOICE_NOTIFICATIONS = "subscribe_voice_notifications";
|
||||
public static final int VERSION_CODE = 1;
|
||||
|
||||
|
@ -139,6 +143,7 @@ public class ExternalApiHelper {
|
|||
|
||||
public static final String PARAM_CLOSE_AFTER_COMMAND = "close_after_command";
|
||||
|
||||
public static final String PARAM_QUICK_ACTION_NUMBER = "quick_action_number";
|
||||
|
||||
public static final ApplicationMode[] VALID_PROFILES = new ApplicationMode[]{
|
||||
ApplicationMode.CAR,
|
||||
|
@ -159,6 +164,7 @@ public class ExternalApiHelper {
|
|||
public static final int RESULT_CODE_ERROR_INVALID_PROFILE = 1005;
|
||||
public static final int RESULT_CODE_ERROR_EMPTY_SEARCH_QUERY = 1006;
|
||||
public static final int RESULT_CODE_ERROR_SEARCH_LOCATION_UNDEFINED = 1007;
|
||||
public static final int RESULT_CODE_ERROR_QUICK_ACTION_NOT_FOUND = 1008;
|
||||
|
||||
private MapActivity mapActivity;
|
||||
private int resultCode;
|
||||
|
@ -589,6 +595,18 @@ public class ExternalApiHelper {
|
|||
finish = true;
|
||||
}
|
||||
resultCode = Activity.RESULT_OK;
|
||||
} else if (API_EXECUTE_QUICK_ACTION.equals(cmd)) {
|
||||
String actionNumberStr = uri.getQueryParameter(PARAM_QUICK_ACTION_NUMBER);
|
||||
if (!Algorithms.isEmpty(actionNumberStr)) {
|
||||
int actionNumber = Integer.parseInt(actionNumberStr);
|
||||
List<QuickAction> actionsList = app.getQuickActionRegistry().getFilteredQuickActions();
|
||||
if (actionNumber >= 0 && actionNumber < actionsList.size()) {
|
||||
QuickActionRegistry.produceAction(actionsList.get(actionNumber)).execute(mapActivity);
|
||||
resultCode = Activity.RESULT_OK;
|
||||
} else {
|
||||
resultCode = RESULT_CODE_ERROR_QUICK_ACTION_NOT_FOUND;
|
||||
}
|
||||
}
|
||||
} else if (API_CMD_SUBSCRIBE_VOICE_NOTIFICATIONS.equals(cmd)) {
|
||||
// not implemented yet
|
||||
resultCode = RESULT_CODE_ERROR_NOT_IMPLEMENTED;
|
||||
|
|
Loading…
Reference in a new issue