12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)package org.chromium.chrome.browser.identity; 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.content.Context; 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.provider.Settings; 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.chromium.base.VisibleForTesting; 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import org.chromium.chrome.browser.util.HashUtil; 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import javax.annotation.Nullable; 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/** 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Unique identificator implementation that uses the Settings.Secure.ANDROID_ID field and MD5 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * hashing. 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)public class SettingsSecureBasedIdentificationGenerator implements UniqueIdentificationGenerator { 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public static final String GENERATOR_ID = "SETTINGS_SECURE_ANDROID_ID"; 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private final Context mContext; 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public SettingsSecureBasedIdentificationGenerator(Context context) { 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Since we do not know the lifetime of the given context, we get the application context 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // to ensure it is always possible to use it. 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mContext = context.getApplicationContext(); 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public String getUniqueId(@Nullable String salt) { 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) String androidId = getAndroidId(); 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (androidId == null) { 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ""; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) String md5Hash = HashUtil.getMd5Hash( 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new HashUtil.Params(androidId).withSalt(salt)); 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return md5Hash == null ? "" : md5Hash; 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @VisibleForTesting 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) String getAndroidId() { 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return Settings.Secure.getString(mContext.getContentResolver(), Settings.Secure.ANDROID_ID); 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 46