Skip to content

Commit

Permalink
Changed calback usage
Browse files Browse the repository at this point in the history
  • Loading branch information
Corwin-Kh committed Oct 24, 2024
1 parent b69242d commit d917a63
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 9 deletions.
11 changes: 11 additions & 0 deletions OsmAnd/src/net/osmand/plus/OsmandApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.car.app.CarToast;
import androidx.core.app.ActivityCompat;
import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
Expand Down Expand Up @@ -157,6 +158,7 @@ public class OsmandApplication extends MultiDexApplication {

NavigationCarAppService navigationCarAppService;
NavigationSession carNavigationSession;
ActivityCompat.OnRequestPermissionsResultCallback androidAutoPermissionRequestResultListener;

private final SQLiteAPI sqliteAPI = new SQLiteAPIImpl(this);
private final OsmAndTaskManager taskManager = new OsmAndTaskManager(this);
Expand Down Expand Up @@ -697,6 +699,15 @@ public void setNavigationCarAppService(@Nullable NavigationCarAppService navigat
this.navigationCarAppService = navigationCarAppService;
}

@Nullable
public ActivityCompat.OnRequestPermissionsResultCallback getAndroidAutoPermissionRequestResultListener() {
return androidAutoPermissionRequestResultListener;
}

public void setAndroidAutoPermissionRequestResultListener(@Nullable ActivityCompat.OnRequestPermissionsResultCallback callback) {
this.androidAutoPermissionRequestResultListener = callback;
}

@Nullable
public NavigationSession getCarNavigationSession() {
return carNavigationSession;
Expand Down
27 changes: 21 additions & 6 deletions OsmAnd/src/net/osmand/plus/auto/NavigationCarAppService.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import androidx.car.app.CarAppService;
import androidx.car.app.Session;
import androidx.car.app.validation.HostValidator;
import androidx.core.app.ActivityCompat;
import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LifecycleOwner;

Expand All @@ -28,7 +29,7 @@
* details, see the <a href="https://developer.android.com/training/cars/navigation">Android for
* Cars Library developer guide</a>.
*/
public final class NavigationCarAppService extends CarAppService {
public final class NavigationCarAppService extends CarAppService implements ActivityCompat.OnRequestPermissionsResultCallback {

private static final org.apache.commons.logging.Log LOG = PlatformUtil.getLog(NavigationCarAppService.class);
private boolean foreground = false;
Expand All @@ -45,41 +46,55 @@ public static Uri createDeepLinkUri(@NonNull String deepLinkAction) {
return Uri.fromParts(NavigationSession.URI_SCHEME, NavigationSession.URI_HOST, deepLinkAction);
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
int result = super.onStartCommand(intent, flags, startId);
getApp().setNavigationCarAppService(this);
return result;
}

@Override
public void onCreate() {
super.onCreate();
getApp().setAndroidAutoPermissionRequestResultListener(this);
}

@Override
public void onDestroy() {
super.onDestroy();
getApp().setAndroidAutoPermissionRequestResultListener(null);
getApp().setNavigationCarAppService(null);
}

@Override
@NonNull
public Session onCreateSession() {
OsmandApplication app = getApp();
getApp().setNavigationCarAppService(this);
startForegroundWithPermission(app);
NavigationSession session = new NavigationSession();
session.getLifecycle()
.addObserver(new DefaultLifecycleObserver() {
@Override
public void onDestroy(@NonNull LifecycleOwner owner) {
foreground = false;
stopForeground(STOP_FOREGROUND_REMOVE);
}
});

return session;
}

private void startForegroundWithPermission(OsmandApplication app) {
if (!foreground && OsmAndLocationProvider.isLocationPermissionAvailable(app)) {
private void startForegroundWithPermission(@NonNull OsmandApplication app) {
if (!foreground && app.getCarNavigationSession() != null && OsmAndLocationProvider.isLocationPermissionAvailable(app)) {
foreground = true;
Notification notification = app.getNotificationHelper().buildCarAppNotification();
startForeground(app.getNotificationHelper().getOsmandNotificationId(NotificationType.CAR_APP), notification);
}
}

public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
List<String> permissionsList = Arrays.asList(permissions);
if (permissionsList.contains(Manifest.permission.ACCESS_FINE_LOCATION) ||
if (getApp().getCarNavigationSession() != null && permissionsList.contains(Manifest.permission.ACCESS_FINE_LOCATION) ||
permissionsList.contains(Manifest.permission.ACCESS_COARSE_LOCATION)) {
startForegroundWithPermission(getApp());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,9 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis
controlsHelper.onRequestPermissionsResult(requestCode, permissions, grantResults);
}

NavigationCarAppService navigationCarAppService = app.getNavigationCarAppService();
if (navigationCarAppService != null) {
navigationCarAppService.onRequestPermissionsResult(requestCode, permissions, grantResults);
OnRequestPermissionsResultCallback aaCallback = app.getAndroidAutoPermissionRequestResultListener();
if (aaCallback != null) {
aaCallback.onRequestPermissionsResult(requestCode, permissions, grantResults);
}

if (requestCode == DownloadActivity.PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE
Expand Down

0 comments on commit d917a63

Please sign in to comment.