Merge pull request #9477 from ehermann/aidl_lock

Add aidl interface to lock and unlock the screen.
This commit is contained in:
Vitaliy 2020-07-20 21:51:36 +03:00 committed by GitHub
commit 0c6cafd0ed
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 164 additions and 7 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,45 @@
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.aidl.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

@ -43,8 +43,6 @@ import net.osmand.data.PointDescription;
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.settings.backend.ApplicationMode;
import net.osmand.plus.ContextMenuAdapter;
import net.osmand.plus.ContextMenuItem;
import net.osmand.plus.FavouritesDbHelper;
@ -53,16 +51,15 @@ import net.osmand.plus.GpxSelectionHelper;
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.settings.backend.OsmAndAppCustomization;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.plus.SQLiteTileSource;
import net.osmand.plus.settings.backend.SettingsHelper;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.audionotes.AudioVideoNotesPlugin;
import net.osmand.plus.dialogs.GpxAppearanceAdapter;
import net.osmand.plus.helpers.ColorDialogs;
import net.osmand.plus.helpers.ExternalApiHelper;
import net.osmand.plus.helpers.LockHelper;
import net.osmand.plus.mapcontextmenu.MapContextMenu;
import net.osmand.plus.mapcontextmenu.other.IContextMenuButtonListener;
import net.osmand.plus.monitoring.OsmandMonitoringPlugin;
@ -74,6 +71,10 @@ import net.osmand.plus.routing.IRoutingDataUpdateListener;
import net.osmand.plus.routing.RouteCalculationResult.NextDirectionInfo;
import net.osmand.plus.routing.RoutingHelper;
import net.osmand.plus.routing.VoiceRouter;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.settings.backend.OsmAndAppCustomization;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.plus.settings.backend.SettingsHelper;
import net.osmand.plus.views.AidlMapLayer;
import net.osmand.plus.views.MapInfoLayer;
import net.osmand.plus.views.OsmandMapLayer;
@ -178,6 +179,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;
@ -229,6 +231,7 @@ public class OsmandAidlApi {
registerShowSqliteDbFileReceiver(mapActivity);
registerHideSqliteDbFileReceiver(mapActivity);
registerExecuteQuickActionReceiver(mapActivity);
registerLockStateReceiver(mapActivity);
initOsmandTelegram();
app.getAppCustomization().addListener(mapActivity);
aMapPointUpdateListener = mapActivity;
@ -859,6 +862,22 @@ 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) {
LockHelper lockHelper = app.getLockHelper();
boolean lock = intent.getBooleanExtra(AIDL_LOCK_STATE, false);
if (lock) {
lockHelper.lock();
} else {
lockHelper.unlock();
}
}
};
registerReceiver(lockStateReceiver, mapActivity, AIDL_LOCK_STATE);
}
public void registerMapLayers(@NonNull MapActivity mapActivity) {
for (ConnectedApp connectedApp : connectedApps.values()) {
connectedApp.registerMapLayers(mapActivity);
@ -1698,6 +1717,14 @@ public class OsmandAidlApi {
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.aidl.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

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

View file

@ -0,0 +1,45 @@
package net.osmand.aidl.lock;
import android.os.Parcel;
import android.os.Parcelable;
public class SetLockStateParams implements Parcelable {
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;
}
public void writeToParcel(Parcel out, int flags) {
out.writeByte((byte) (lock ? 1 : 0));
}
private void readFromParcel(Parcel in) {
lock = in.readByte() == 1;
}
public int describeContents() {
return 0;
}
}

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();