13551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 23551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 33551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// found in the LICENSE file. 43551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 53551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)package org.chromium.chrome.browser.identity; 63551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 73551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)import android.content.Context; 83551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)import android.content.SharedPreferences; 93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)import android.preference.PreferenceManager; 103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.chromium.base.VisibleForTesting; 123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)import java.util.UUID; 143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)import javax.annotation.Nullable; 163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)/** 183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * Generates unique IDs that are {@link UUID} strings. 193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) */ 203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)public class UuidBasedUniqueIdentificationGenerator implements UniqueIdentificationGenerator { 2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public static final String GENERATOR_ID = "UUID"; 223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private final Context mContext; 233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private final String mPreferenceKey; 243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public UuidBasedUniqueIdentificationGenerator(Context context, String preferenceKey) { 263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mContext = context; 273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mPreferenceKey = preferenceKey; 283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) @Override 313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public String getUniqueId(@Nullable String salt) { 323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SharedPreferences preferences = PreferenceManager 333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) .getDefaultSharedPreferences(mContext); 343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) String storedUniqueId = preferences.getString(mPreferenceKey, null); 353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (storedUniqueId != null) { 363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return storedUniqueId; 373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Generate a new unique ID. 403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) String uniqueId = getUUID(); 413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Store the field so we ensure we always return the same unique ID. 433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SharedPreferences.Editor editor = preferences.edit(); 443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) editor.putString(mPreferenceKey, uniqueId); 453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) editor.apply(); 463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return uniqueId; 473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) @VisibleForTesting 513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) String getUUID() { 523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return UUID.randomUUID().toString(); 533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 55