package org.shikato.infodumper.dump;
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.provider.Settings;
import com.facebook.stetho.dumpapp.DumpException;
import com.google.android.gms.ads.identifier.AdvertisingIdClient;
import com.google.android.gms.common.GooglePlayServicesNotAvailableException;
import com.google.android.gms.common.GooglePlayServicesRepairableException;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.UUID;
public class IdsDumper implements InfoDumper {
@Override
public String getTitle() {
return "ID";
}
@Override
public LinkedHashMap<String, String> getDumpMap(Context context) throws DumpException {
LinkedHashMap<String, String> dumps = new LinkedHashMap<>();
dumps.put(Settings.Secure.ANDROID_ID, getAndroidId(context));
dumps.put("UUID", getUUID());
String adIdKey = "AdvertisingId";
String adOptoutKey = "isAdOptout";
AdvertisingIdClient.Info adInfo = getAdInfo(context);
if (adInfo == null) {
dumps.put(adIdKey, "Getting AdvertisingId need a android.permission.INTERNET");
dumps.put(adOptoutKey, "Getting AdvertisingId need a android.permission.INTERNET");
} else {
dumps.put(adIdKey, adInfo.getId());
dumps.put(adOptoutKey, Boolean.toString(adInfo.isLimitAdTrackingEnabled()));
}
return dumps;
}
@Override
public List<String> getDumpList(Context context) throws DumpException {
return null;
}
@Override
public String getErrorMessage() {
return null;
}
private String getAndroidId(Context context) {
return Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
}
private String getUUID() {
return UUID.randomUUID().toString();
}
private AdvertisingIdClient.Info getAdInfo(Context context) throws DumpException {
if (context.getPackageManager().checkPermission(Manifest.permission.INTERNET, context.getPackageName()) ==
PackageManager.PERMISSION_GRANTED) {
try {
return AdvertisingIdClient.getAdvertisingIdInfo(context);
} catch (IOException e) {
throw new DumpException(e.getMessage());
} catch (GooglePlayServicesNotAvailableException e) {
throw new DumpException(e.getMessage());
} catch (GooglePlayServicesRepairableException e) {
throw new DumpException(e.getMessage());
}
} else {
return null;
}
}
}