-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathMaps3DJavaApplication.java
More file actions
88 lines (80 loc) · 3.51 KB
/
Maps3DJavaApplication.java
File metadata and controls
88 lines (80 loc) · 3.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
// Copyright 2025 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.example.maps3djava;
import android.app.Application;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import java.util.Objects;
/**
* `Maps3DKotlinApplication` is a custom Application class for the API demo.
* <p>
* This class is responsible for application-wide initialization and setup,
* such as checking for the presence and validity of the API key during the
* application's startup.
* <p>
* It extends the [Application] class and overrides the [.onCreate]
* method to perform these initialization tasks.
*/
public class Maps3DJavaApplication extends Application {
private final String TAG = this.getClass().getSimpleName();
/**
* Called when the application is starting, before any activity, service,
* or receiver objects (excluding content providers) have been created.
* This is where application-wide initialization should be performed.
*/
@Override
public void onCreate() {
super.onCreate();
checkApiKey();
}
/**
* Checks if the API key for Google Maps is properly configured in the application's metadata.
* <p>
* This method retrieves the API key from the application's metadata, specifically looking for
* a string value associated with the key "com.google.android.geo.maps3d.API_KEY".
* The key must be present, not blank, and not set to the placeholder value "DEFAULT_API_KEY".
* <p>
* If any of these checks fail, a Toast message is displayed indicating that the API key is missing or
* incorrectly configured, and a RuntimeException is thrown.
*/
private void checkApiKey() {
if (BuildConfig.IS_CI) {
return;
}
try {
ApplicationInfo appInfo =
getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
Bundle bundle = Objects.requireNonNull(appInfo.metaData);
String apiKey =
bundle.getString("com.google.android.geo.maps3d.API_KEY"); // Key name is important!
if (apiKey == null || apiKey.isBlank() || apiKey.equals("DEFAULT_API_KEY")) {
Toast.makeText(
this,
"API Key was not set in secrets.properties",
Toast.LENGTH_LONG
).show();
throw new RuntimeException("API Key was not set in secrets.properties");
}
} catch (PackageManager.NameNotFoundException e) {
Log.e(TAG, "Package name not found.", e);
throw new RuntimeException("Error getting package info.", e);
} catch (NullPointerException e) {
Log.e(TAG, "Error accessing meta-data.", e); // Handle the case where meta-data is completely missing.
throw new RuntimeException("Error accessing meta-data in manifest", e);
}
}
}