Skip to content

Commit

Permalink
Merge pull request #145 from adobe/staging
Browse files Browse the repository at this point in the history
Merge `staging` into `main` for Assurance 3.0.4
  • Loading branch information
prudrabhat authored Oct 29, 2024
2 parents 94d1830 + 2e6e20a commit fd5126a
Show file tree
Hide file tree
Showing 5 changed files with 717 additions and 252 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public class Assurance {

public static final Class<? extends Extension> EXTENSION = AssuranceExtension.class;
public static final String LOG_TAG = "Assurance";
public static final String EXTENSION_VERSION = "3.0.3";
public static final String EXTENSION_VERSION = "3.0.4";
public static final String EXTENSION_NAME = "com.adobe.assurance";
public static final String EXTENSION_FRIENDLY_NAME = "Assurance";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.location.LocationManager;
Expand All @@ -24,27 +26,38 @@
import android.os.PowerManager;
import android.provider.Settings;
import android.telephony.TelephonyManager;
import android.util.Log;
import androidx.annotation.VisibleForTesting;
import androidx.core.app.ActivityCompat;
import com.adobe.marketing.mobile.Assurance;
import com.adobe.marketing.mobile.services.ServiceProvider;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import org.json.JSONException;
import org.json.JSONObject;

final class AssuranceClientInfo {

private static final String VALUE_UNKNOWN = "Unknown";
private static final String MANIFEST_FILE_NAME = "AndroidManifest.xml";
private static final String EVENT_TYPE_CONNECT = "connect";
private static final String KEY_MANIFEST = "manifest";
private static final String KEY_PACKAGE = "package";
private static final String FALLBACK_KEY_VERSION_NAME = "versionName";
private static final String FALLBACK_KEY_VERSION_CODE = "versionCode";
private static final String FALLBACK_KEY_APPLICATION = "application";
private static final String FALLBACK_KEY_APPLICATION_NAME = "name";

private final JSONObject manifestData;

AssuranceClientInfo() {
// parse the manifest file and store it in a JSONObject for later use as this does not
// change
// during the lifetime of the application
manifestData = AssuranceIOUtils.parseXMLResourceFileToJson(MANIFEST_FILE_NAME);
// change during the lifetime of the application
final JSONObject parsedManifest =
AssuranceIOUtils.parseXMLResourceFileToJson(MANIFEST_FILE_NAME);
final boolean isValid = validateManifestData(parsedManifest);
manifestData = isValid ? parsedManifest : getFallbackManifestData();
}

/**
Expand Down Expand Up @@ -362,4 +375,79 @@ private boolean isPowerSaveModeEnabled() {

return powerManager.isPowerSaveMode();
}

/**
* Checks that the manifest data provided is associated with the current application.
*
* @param manifestData the manifest data JSONObject to validate
* @return true if the manifest data is valid, false otherwise
*/
@VisibleForTesting
boolean validateManifestData(final JSONObject manifestData) {
if (manifestData == null) {
return false;
}
final JSONObject manifest = manifestData.optJSONObject(KEY_MANIFEST);
if (manifest == null) {
return false;
}

final String parsedPackageName = manifest.optString(KEY_PACKAGE, "");
final Application app =
ServiceProvider.getInstance().getAppContextService().getApplication();
return (app != null && parsedPackageName.equals(app.getPackageName()));
}

/**
* Returns a curated JSONObject with fallback manifest data. This is typically is to be used
* when the manifest data parsed is invalid (i.e not associated with the application)
*
* <p>The fallback manifest data has the following structure: { "manifest": { "package":
* "com.mygroup.myapp", "versionName": "1.0", "versionCode": "1", "application": { "name":
* "MyAppName" } } }
*
* @return a JSONObject with fallback manifest data
*/
@VisibleForTesting
JSONObject getFallbackManifestData() {
final Application app =
ServiceProvider.getInstance().getAppContextService().getApplication();
final JSONObject result = new JSONObject();
final JSONObject manifestJson = new JSONObject();
if (app == null) {
return manifestJson;
}

try {
final String appPackageName = app.getPackageName();
manifestJson.put(KEY_PACKAGE, appPackageName);

final PackageManager pm = app.getApplicationContext().getPackageManager();
try {
final PackageInfo packageInfo =
pm.getPackageInfo(appPackageName, PackageManager.GET_PERMISSIONS);
final String versionName = packageInfo.versionName;
final String versionCode = String.valueOf(packageInfo.versionCode);
manifestJson.put(FALLBACK_KEY_VERSION_NAME, versionName);
manifestJson.put(FALLBACK_KEY_VERSION_CODE, versionCode);

} catch (PackageManager.NameNotFoundException e) {
Log.d(Assurance.LOG_TAG, "Failed to get package info for " + appPackageName);
}

final ApplicationInfo appInfo = app.getApplicationInfo();
if (appInfo != null) {
final String applicationName = appInfo.name;
final JSONObject applicationJson = new JSONObject();
applicationJson.put(FALLBACK_KEY_APPLICATION_NAME, applicationName);
manifestJson.put(FALLBACK_KEY_APPLICATION, applicationJson);
}

result.put(KEY_MANIFEST, manifestJson);
} catch (JSONException e) {
Log.d(Assurance.LOG_TAG, "Failed to put version details into fallbackManifestData");
}

return result;
}
}

This file was deleted.

Loading

0 comments on commit fd5126a

Please sign in to comment.