Add aidl interface to lock and unlock the screen.

For instance it call allow a service to wake up the navigation using media buttons
This commit is contained in:
Everton Hermann 2020-07-19 16:45:00 +02:00
parent 28edfaa695
commit 440ad5828b
8 changed files with 108 additions and 4 deletions

View file

@ -95,6 +95,7 @@ import net.osmand.aidlapi.mapmarker.RemoveMapMarkersParams;
import net.osmand.aidlapi.quickaction.QuickActionParams; import net.osmand.aidlapi.quickaction.QuickActionParams;
import net.osmand.aidlapi.quickaction.QuickActionInfoParams; import net.osmand.aidlapi.quickaction.QuickActionInfoParams;
import net.osmand.aidlapi.lock.SetLockStateParams;
// NOTE: Add new methods at the end of file!!! // NOTE: Add new methods at the end of file!!!
@ -841,4 +842,9 @@ interface IOsmAndAidlInterface {
boolean executeQuickAction(in QuickActionParams params); boolean executeQuickAction(in QuickActionParams params);
boolean getQuickActionsInfo(out List<QuickActionInfoParams> quickActions); boolean getQuickActionsInfo(out List<QuickActionInfoParams> quickActions);
/**
* Toggle Lock/Unlock screen.
*/
boolean setLockState(in SetLockStateParams params);
} }

View file

@ -0,0 +1,3 @@
package net.osmand.aidlapi.lock;
parcelable SetLockStateParams;

View file

@ -0,0 +1,41 @@
package net.osmand.aidlapi.lock;
import android.os.Bundle;
import android.os.Parcel;
import net.osmand.aidlapi.AidlParams;
public class SetLockStateParams extends AidlParams {
private boolean lock;
public SetLockStateParams(boolean lock) {
this.lock = lock;
}
public SetLockStateParams(Parcel in) {
readFromParcel(in);
}
public static final Creator<SetLockStateParams> CREATOR = new Creator<SetLockStateParams>() {
@Override
public SetLockStateParams createFromParcel(Parcel in) {
return new SetLockStateParams(in);
}
@Override
public SetLockStateParams[] newArray(int size) {
return new SetLockStateParams[size];
}
};
public boolean getLockState(){
return lock;
}
@Override
public void writeToBundle(Bundle bundle) {
bundle.putBoolean("lock", this.lock);
}
@Override
protected void readFromBundle(Bundle bundle) {
lock = bundle.getBoolean("lock");
}
}

View file

@ -96,6 +96,7 @@ import net.osmand.aidl.mapmarker.RemoveMapMarkersParams;
import net.osmand.aidl.quickaction.QuickActionParams; import net.osmand.aidl.quickaction.QuickActionParams;
import net.osmand.aidl.quickaction.QuickActionInfoParams; import net.osmand.aidl.quickaction.QuickActionInfoParams;
import net.osmand.aidlapi.lock.SetLockStateParams;
// NOTE: Add new methods at the end of file!!! // NOTE: Add new methods at the end of file!!!
@ -856,4 +857,8 @@ interface IOsmAndAidlInterface {
boolean executeQuickAction(in QuickActionParams params); boolean executeQuickAction(in QuickActionParams params);
boolean getQuickActionsInfo(out List<QuickActionInfoParams> quickActions); boolean getQuickActionsInfo(out List<QuickActionInfoParams> quickActions);
/**
* Toggle Lock/Unlock screen.
*/
boolean setLockState(in SetLockStateParams params);
} }

View file

@ -44,6 +44,7 @@ import net.osmand.plus.AppInitializer;
import net.osmand.plus.AppInitializer.AppInitializeListener; import net.osmand.plus.AppInitializer.AppInitializeListener;
import net.osmand.plus.AppInitializer.InitEvents; import net.osmand.plus.AppInitializer.InitEvents;
import net.osmand.plus.dialogs.GpxAppearanceAdapter; import net.osmand.plus.dialogs.GpxAppearanceAdapter;
import net.osmand.plus.helpers.LockHelper;
import net.osmand.plus.settings.backend.ApplicationMode; import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.ContextMenuAdapter; import net.osmand.plus.ContextMenuAdapter;
import net.osmand.plus.ContextMenuItem; import net.osmand.plus.ContextMenuItem;
@ -177,6 +178,7 @@ public class OsmandAidlApi {
private static final String AIDL_EXECUTE_QUICK_ACTION = "aidl_execute_quick_action"; 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 String AIDL_QUICK_ACTION_NUMBER = "aidl_quick_action_number";
private static final String AIDL_LOCK_STATE = "lock_state";
private static final ApplicationMode DEFAULT_PROFILE = ApplicationMode.CAR; private static final ApplicationMode DEFAULT_PROFILE = ApplicationMode.CAR;
@ -228,6 +230,7 @@ public class OsmandAidlApi {
registerShowSqliteDbFileReceiver(mapActivity); registerShowSqliteDbFileReceiver(mapActivity);
registerHideSqliteDbFileReceiver(mapActivity); registerHideSqliteDbFileReceiver(mapActivity);
registerExecuteQuickActionReceiver(mapActivity); registerExecuteQuickActionReceiver(mapActivity);
registerLockStateReceiver(mapActivity);
initOsmandTelegram(); initOsmandTelegram();
app.getAppCustomization().addListener(mapActivity); app.getAppCustomization().addListener(mapActivity);
aMapPointUpdateListener = mapActivity; aMapPointUpdateListener = mapActivity;
@ -853,7 +856,24 @@ public class OsmandAidlApi {
}; };
registerReceiver(executeQuickActionReceiver, mapActivity, AIDL_EXECUTE_QUICK_ACTION); registerReceiver(executeQuickActionReceiver, mapActivity, AIDL_EXECUTE_QUICK_ACTION);
} }
private void registerLockStateReceiver(MapActivity mapActivity) {
BroadcastReceiver lockStateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
boolean lock = intent.getBooleanExtra(AIDL_LOCK_STATE,false);
LockHelper lh = app.getLockHelper();
if(lock) {
lh.lock();
}
else{
lh.unlock();
}
}
};
registerReceiver(lockStateReceiver, mapActivity, AIDL_LOCK_STATE);
}
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);
@ -1691,7 +1711,13 @@ public class OsmandAidlApi {
app.sendBroadcast(intent); app.sendBroadcast(intent);
return true; return true;
} }
boolean setLockState(boolean lock) {
Intent intent = new Intent();
intent.setAction(AIDL_LOCK_STATE);
intent.putExtra(AIDL_LOCK_STATE, lock);
app.sendBroadcast(intent);
return true;
}
boolean search(final String searchQuery, final int searchType, final double latitude, final double longitude, boolean search(final String searchQuery, final int searchType, final double latitude, final double longitude,
final int radiusLevel, final int totalLimit, final SearchCompleteCallback callback) { final int radiusLevel, final int totalLimit, final SearchCompleteCallback callback) {
if (Algorithms.isEmpty(searchQuery) || latitude == 0 || longitude == 0 || callback == null) { if (Algorithms.isEmpty(searchQuery) || latitude == 0 || longitude == 0 || callback == null) {

View file

@ -85,6 +85,7 @@ 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;
import net.osmand.aidlapi.lock.SetLockStateParams;
import net.osmand.data.LatLon; import net.osmand.data.LatLon;
import net.osmand.plus.settings.backend.OsmAndAppCustomization; import net.osmand.plus.settings.backend.OsmAndAppCustomization;
import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandApplication;
@ -1326,6 +1327,16 @@ public class OsmandAidlService extends Service implements AidlCallbackListener {
return false; return false;
} }
} }
@Override
public boolean setLockState(SetLockStateParams params) {
try {
OsmandAidlApi api = getApi("setLockState");
return api != null && api.setLockState(params.getLockState());
} catch (Exception e) {
handleException(e);
return false;
}
}
}; };
private void setCustomization(OsmandAidlApi api, CustomizationInfoParams params) { private void setCustomization(OsmandAidlApi api, CustomizationInfoParams params) {

View file

@ -15,6 +15,7 @@ import net.osmand.PlatformUtil;
import net.osmand.aidl.OsmandAidlApi.GpxBitmapCreatedCallback; import net.osmand.aidl.OsmandAidlApi.GpxBitmapCreatedCallback;
import net.osmand.aidl.OsmandAidlApi.OsmandAppInitCallback; import net.osmand.aidl.OsmandAidlApi.OsmandAppInitCallback;
import net.osmand.aidl.OsmandAidlApi.SearchCompleteCallback; import net.osmand.aidl.OsmandAidlApi.SearchCompleteCallback;
import net.osmand.aidlapi.lock.SetLockStateParams;
import net.osmand.aidlapi.IOsmAndAidlCallback; import net.osmand.aidlapi.IOsmAndAidlCallback;
import net.osmand.aidlapi.IOsmAndAidlInterface; import net.osmand.aidlapi.IOsmAndAidlInterface;
import net.osmand.aidlapi.calculateroute.CalculateRouteParams; import net.osmand.aidlapi.calculateroute.CalculateRouteParams;
@ -1259,6 +1260,17 @@ public class OsmandAidlServiceV2 extends Service implements AidlCallbackListener
return false; return false;
} }
} }
@Override
public boolean setLockState(SetLockStateParams params) {
try {
OsmandAidlApi api = getApi("setLockState");
return api != null && api.setLockState(params.getLockState());
} catch (Exception e) {
handleException(e);
return false;
}
}
}; };
private void setCustomization(OsmandAidlApi api, CustomizationInfoParams params) { private void setCustomization(OsmandAidlApi api, CustomizationInfoParams params) {

View file

@ -104,7 +104,7 @@ public class LockHelper implements SensorEventListener {
} }
@SuppressLint("WakelockTimeout") @SuppressLint("WakelockTimeout")
private void unlock() { public void unlock() {
if (lockUIAdapter != null) { if (lockUIAdapter != null) {
lockUIAdapter.unlock(); lockUIAdapter.unlock();
} }
@ -116,7 +116,7 @@ public class LockHelper implements SensorEventListener {
} }
} }
private void lock() { public void lock() {
releaseWakeLocks(); releaseWakeLocks();
if (lockUIAdapter != null) { if (lockUIAdapter != null) {
boolean useSystemTimeout = useSystemScreenTimeout.get(); boolean useSystemTimeout = useSystemScreenTimeout.get();