This commit is contained in:
Vitaliy 2020-05-06 14:01:51 +03:00
parent 100561be7b
commit da1a065846
9 changed files with 162 additions and 0 deletions

View file

@ -93,6 +93,8 @@ import net.osmand.aidlapi.contextmenu.RemoveContextMenuButtonsParams;
import net.osmand.aidlapi.mapmarker.RemoveMapMarkersParams; import net.osmand.aidlapi.mapmarker.RemoveMapMarkersParams;
import net.osmand.aidlapi.quickaction.QuickActionParams;
// NOTE: Add new methods at the end of file!!! // NOTE: Add new methods at the end of file!!!
interface IOsmAndAidlInterface { interface IOsmAndAidlInterface {
@ -834,4 +836,6 @@ interface IOsmAndAidlInterface {
boolean removeAllActiveMapMarkers(in RemoveMapMarkersParams params); boolean removeAllActiveMapMarkers(in RemoveMapMarkersParams params);
boolean importProfile(in ProfileSettingsParams params); boolean importProfile(in ProfileSettingsParams params);
boolean executeQuickAction(in QuickActionParams params);
} }

View file

@ -0,0 +1,3 @@
package net.osmand.aidlapi.quickaction;
parcelable QuickActionParams;

View file

@ -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");
}
}

View file

@ -94,6 +94,8 @@ import net.osmand.aidl.contextmenu.RemoveContextMenuButtonsParams;
import net.osmand.aidl.mapmarker.RemoveMapMarkersParams; import net.osmand.aidl.mapmarker.RemoveMapMarkersParams;
import net.osmand.aidl.quickaction.QuickActionParams;
// NOTE: Add new methods at the end of file!!! // NOTE: Add new methods at the end of file!!!
interface IOsmAndAidlInterface { interface IOsmAndAidlInterface {
@ -849,4 +851,6 @@ interface IOsmAndAidlInterface {
boolean getGpxColor(inout GpxColorParams params); boolean getGpxColor(inout GpxColorParams params);
boolean importProfile(in ProfileSettingsParams params); boolean importProfile(in ProfileSettingsParams params);
boolean executeQuickAction(in QuickActionParams params);
} }

View file

@ -63,6 +63,8 @@ import net.osmand.plus.mapcontextmenu.MapContextMenu;
import net.osmand.plus.mapcontextmenu.other.IContextMenuButtonListener; import net.osmand.plus.mapcontextmenu.other.IContextMenuButtonListener;
import net.osmand.plus.monitoring.OsmandMonitoringPlugin; import net.osmand.plus.monitoring.OsmandMonitoringPlugin;
import net.osmand.plus.myplaces.TrackBitmapDrawer; 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.rastermaps.OsmandRasterMapsPlugin;
import net.osmand.plus.routing.IRoutingDataUpdateListener; import net.osmand.plus.routing.IRoutingDataUpdateListener;
import net.osmand.plus.routing.RouteCalculationResult.NextDirectionInfo; import net.osmand.plus.routing.RouteCalculationResult.NextDirectionInfo;
@ -167,6 +169,9 @@ public class OsmandAidlApi {
private static final String AIDL_HIDE_SQLITEDB_FILE = "aidl_hide_sqlitedb_file"; 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_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; private static final ApplicationMode DEFAULT_PROFILE = ApplicationMode.CAR;
@ -216,6 +221,7 @@ public class OsmandAidlApi {
registerUnmuteNavigationReceiver(mapActivity); registerUnmuteNavigationReceiver(mapActivity);
registerShowSqliteDbFileReceiver(mapActivity); registerShowSqliteDbFileReceiver(mapActivity);
registerHideSqliteDbFileReceiver(mapActivity); registerHideSqliteDbFileReceiver(mapActivity);
registerExecuteQuickActionReceiver(mapActivity);
initOsmandTelegram(); initOsmandTelegram();
app.getAppCustomization().addListener(mapActivity); app.getAppCustomization().addListener(mapActivity);
aMapPointUpdateListener = mapActivity; aMapPointUpdateListener = mapActivity;
@ -824,6 +830,24 @@ public class OsmandAidlApi {
registerReceiver(hideSqliteDbFileReceiver, mapActivity, AIDL_HIDE_SQLITEDB_FILE); 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) { public void registerMapLayers(@NonNull MapActivity mapActivity) {
for (ConnectedApp connectedApp : connectedApps.values()) { for (ConnectedApp connectedApp : connectedApps.values()) {
connectedApp.registerMapLayers(mapActivity); connectedApp.registerMapLayers(mapActivity);
@ -2110,6 +2134,14 @@ 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;
}
private class FileCopyInfo { private class FileCopyInfo {
long startTime; long startTime;
long lastAccessTime; long lastAccessTime;

View file

@ -80,6 +80,7 @@ import net.osmand.aidl.note.StartVideoRecordingParams;
import net.osmand.aidl.note.StopRecordingParams; import net.osmand.aidl.note.StopRecordingParams;
import net.osmand.aidl.note.TakePhotoNoteParams; import net.osmand.aidl.note.TakePhotoNoteParams;
import net.osmand.aidl.plugins.PluginParams; import net.osmand.aidl.plugins.PluginParams;
import net.osmand.aidl.quickaction.QuickActionParams;
import net.osmand.aidl.search.SearchParams; import net.osmand.aidl.search.SearchParams;
import net.osmand.aidl.search.SearchResult; import net.osmand.aidl.search.SearchResult;
import net.osmand.aidl.tiles.ASqliteDbFile; import net.osmand.aidl.tiles.ASqliteDbFile;
@ -1302,6 +1303,17 @@ public class OsmandAidlService extends Service implements AidlCallbackListener {
return false; 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;
}
}
}; };
private void setCustomization(OsmandAidlApi api, CustomizationInfoParams params) { private void setCustomization(OsmandAidlApi api, CustomizationInfoParams params) {

View file

@ -81,6 +81,7 @@ import net.osmand.aidlapi.note.StartVideoRecordingParams;
import net.osmand.aidlapi.note.StopRecordingParams; import net.osmand.aidlapi.note.StopRecordingParams;
import net.osmand.aidlapi.note.TakePhotoNoteParams; import net.osmand.aidlapi.note.TakePhotoNoteParams;
import net.osmand.aidlapi.plugins.PluginParams; import net.osmand.aidlapi.plugins.PluginParams;
import net.osmand.aidlapi.quickaction.QuickActionParams;
import net.osmand.aidlapi.search.SearchParams; import net.osmand.aidlapi.search.SearchParams;
import net.osmand.aidlapi.search.SearchResult; import net.osmand.aidlapi.search.SearchResult;
import net.osmand.aidlapi.tiles.ASqliteDbFile; import net.osmand.aidlapi.tiles.ASqliteDbFile;
@ -1235,6 +1236,17 @@ public class OsmandAidlServiceV2 extends Service implements AidlCallbackListener
return false; 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;
}
}
}; };
private void setCustomization(OsmandAidlApi api, CustomizationInfoParams params) { private void setCustomization(OsmandAidlApi api, CustomizationInfoParams params) {

View file

@ -0,0 +1,3 @@
package net.osmand.aidl.quickaction;
parcelable QuickActionParams;

View file

@ -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;
}
}