[AA] Enabled rudimentary Android Auto Support

Enabled the app for Android Auto, currently no real functionality
yet, but to be added in future commits.
This commit is contained in:
Alexander Dörflinger
2025-04-07 08:50:16 +02:00
parent be6b5284df
commit 1bfe0a4088
10 changed files with 118 additions and 4 deletions

View File

@@ -13,7 +13,8 @@ android {
minSdk 32
targetSdk 34
versionCode 1
versionName "1.0"
versionName "1.0" // ... other configurations
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
@@ -31,11 +32,12 @@ android {
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.7.0'
implementation 'com.google.android.material:material:1.12.0'
implementation 'androidx.constraintlayout:constraintlayout:2.2.1'
implementation 'io.reactivex.rxjava3:rxjava:3.1.5'
implementation 'androidx.car.app:app:1.4.0'
implementation 'androidx.concurrent:concurrent-futures:1.2.0'
//Google Maps SDK
implementation 'com.google.android.gms:play-services-maps:19.1.0'

View File

@@ -29,6 +29,8 @@
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="AIzaSyB7C4QCJEBvS7mFa_DeIZdzqe2hddtl-vk" />
<meta-data android:name="com.google.android.gms.car.application"
android:resource="@xml/automotive_app_desc"/>
<activity
android:name=".FlashlightActivity"
@@ -66,6 +68,13 @@
android:name=".workers.ShareLocationBackgroundWorker"
android:foregroundServiceType="location" />
<service android:name=".auto.ShareLocationCarAppService"
android:exported="true">
<intent-filter>
<action android:name="androidx.car.app.action.SERVICE" />
</intent-filter>
</service>
<receiver
android:name=".DoerflingerHelpersDeviceAdminReceiver"
android:exported="true"

View File

@@ -0,0 +1,20 @@
package com.aldo.apps.familyhelpers.auto;
import androidx.annotation.NonNull;
import androidx.car.app.CarAppService;
import androidx.car.app.Session;
import androidx.car.app.validation.HostValidator;
public class ShareLocationCarAppService extends CarAppService {
@NonNull
@Override
public HostValidator createHostValidator() {
return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
}
@NonNull
@Override
public Session onCreateSession() {
return new ShareLocationSession();
}
}

View File

@@ -0,0 +1,52 @@
package com.aldo.apps.familyhelpers.auto;
import android.content.Intent;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.car.app.CarContext;
import androidx.car.app.Screen;
import androidx.car.app.model.CarIcon;
import androidx.car.app.model.GridTemplate;
import androidx.car.app.model.ItemList;
import androidx.car.app.model.Row;
import androidx.car.app.model.Template;
import androidx.core.graphics.drawable.IconCompat;
import com.aldo.apps.familyhelpers.R;
import com.aldo.apps.familyhelpers.workers.ShareLocationBackgroundWorker;
public class ShareLocationScreen extends Screen {
// Constructor for ShareLocationScreen
protected ShareLocationScreen(@NonNull CarContext carContext) {
super(carContext);
}
@NonNull
@Override
public Template onGetTemplate() {
// Create an ItemList to hold the rows
final ItemList itemList = new ItemList.Builder()
.addItem(new Row.Builder()
.setTitle("Start Sharing Location") // Set the title of the row
.setOnClickListener(() -> {
// Create an intent to start the ShareLocationBackgroundWorker service
final Intent startServiceIntent = new Intent(getCarContext(), ShareLocationBackgroundWorker.class);
// Start the service using the car context
getCarContext().startForegroundService(startServiceIntent);
Log.d("ShareLocationScreen", "Starting ShareLocationBackgroundWorker Service");
})
.setImage(new CarIcon.Builder(
IconCompat.createWithResource(getCarContext(),
R.drawable.ic_location_helper)).build())
.build())
.build();
// Return a GridTemplate with the ItemList
return new GridTemplate.Builder()
.setSingleList(itemList)
.setTitle("Share Location")
.build();
}
}

View File

@@ -0,0 +1,15 @@
package com.aldo.apps.familyhelpers.auto;
import android.content.Intent;
import androidx.annotation.NonNull;
import androidx.car.app.Session;
public class ShareLocationSession extends Session {
@NonNull
@Override
public androidx.car.app.Screen onCreateScreen(@NonNull Intent intent) {
return new ShareLocationScreen(getCarContext());
}
}

View File

@@ -82,7 +82,7 @@ public final class LocationHelper {
for (final Location location : allReceivedLocations) {
if (location.hasSpeed()) {
Log.d(TAG, "onLocationResult: Location with speed received, continue...");
handleReceivedLocation(location);
handleReceivedLocation(location);
return;
}
}

View File

@@ -68,4 +68,10 @@
<string name="pref_key_flashlight_store_brightness" translatable="false">store_last_brightness</string>
<string name="pref_key_flashlight_default_brightness" translatable="false">flashlight_default_brightness</string>
<!-- Android Auto related Strings -->
<string name="android_auto_message_currently_sharing" translatable="false">You are already sharing your location with your family, do you wanna stop?</string>
<string name="android_auto_message_not_sharing" translatable="false">Android Auto start has been detected, do you wanna share your location?</string>
<string name="android_auto_actions_start_sharing" translatable="false">Yes, start to share</string>
<string name="android_auto_actions_stop_sharing" translatable="false">Yes, stop sharing</string>
</resources>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<automotiveApp>
<uses name="notification" />
</automotiveApp>

View File

@@ -4,3 +4,9 @@ plugins {
id 'com.google.gms.google-services' version '4.4.2' apply false
id("com.google.firebase.crashlytics") version "3.0.3" apply false
}
allprojects {
repositories {
google()
mavenCentral()
}
}

View File

@@ -6,7 +6,7 @@ pluginManagement {
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositoriesMode.set(RepositoriesMode.PREFER_PROJECT)
repositories {
google()
mavenCentral()