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.QuickActionInfoParams;
import net.osmand.aidlapi.lock.SetLockStateParams;
// NOTE: Add new methods at the end of file!!!
@ -841,4 +842,9 @@ interface IOsmAndAidlInterface {
boolean executeQuickAction(in QuickActionParams params);
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.QuickActionInfoParams;
import net.osmand.aidlapi.lock.SetLockStateParams;
// NOTE: Add new methods at the end of file!!!
@ -856,4 +857,8 @@ interface IOsmAndAidlInterface {
boolean executeQuickAction(in QuickActionParams params);
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.InitEvents;
import net.osmand.plus.dialogs.GpxAppearanceAdapter;
import net.osmand.plus.helpers.LockHelper;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.ContextMenuAdapter;
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_QUICK_ACTION_NUMBER = "aidl_quick_action_number";
private static final String AIDL_LOCK_STATE = "lock_state";
private static final ApplicationMode DEFAULT_PROFILE = ApplicationMode.CAR;
@ -228,6 +230,7 @@ public class OsmandAidlApi {
registerShowSqliteDbFileReceiver(mapActivity);
registerHideSqliteDbFileReceiver(mapActivity);
registerExecuteQuickActionReceiver(mapActivity);
registerLockStateReceiver(mapActivity);
initOsmandTelegram();
app.getAppCustomization().addListener(mapActivity);
aMapPointUpdateListener = mapActivity;
@ -854,6 +857,23 @@ public class OsmandAidlApi {
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) {
for (ConnectedApp connectedApp : connectedApps.values()) {
connectedApp.registerMapLayers(mapActivity);
@ -1691,7 +1711,13 @@ public class OsmandAidlApi {
app.sendBroadcast(intent);
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,
final int radiusLevel, final int totalLimit, final SearchCompleteCallback callback) {
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.SearchResult;
import net.osmand.aidl.tiles.ASqliteDbFile;
import net.osmand.aidlapi.lock.SetLockStateParams;
import net.osmand.data.LatLon;
import net.osmand.plus.settings.backend.OsmAndAppCustomization;
import net.osmand.plus.OsmandApplication;
@ -1326,6 +1327,16 @@ public class OsmandAidlService extends Service implements AidlCallbackListener {
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) {

View file

@ -15,6 +15,7 @@ import net.osmand.PlatformUtil;
import net.osmand.aidl.OsmandAidlApi.GpxBitmapCreatedCallback;
import net.osmand.aidl.OsmandAidlApi.OsmandAppInitCallback;
import net.osmand.aidl.OsmandAidlApi.SearchCompleteCallback;
import net.osmand.aidlapi.lock.SetLockStateParams;
import net.osmand.aidlapi.IOsmAndAidlCallback;
import net.osmand.aidlapi.IOsmAndAidlInterface;
import net.osmand.aidlapi.calculateroute.CalculateRouteParams;
@ -1259,6 +1260,17 @@ public class OsmandAidlServiceV2 extends Service implements AidlCallbackListener
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) {

View file

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