UuidBasedUniqueIdentificationGenerator.java revision 58537e28ecd584eab876aee8be7156509866d23a
11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2013 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccipackage org.chromium.chrome.browser.identity; 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport android.content.Context; 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport android.content.SharedPreferences; 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport android.preference.PreferenceManager; 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport com.google.common.annotations.VisibleForTesting; 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport java.util.UUID; 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport javax.annotation.Nullable; 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/** 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Generates unique IDs that are {@link UUID} strings. 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccipublic class UuidBasedUniqueIdentificationGenerator implements UniqueIdentificationGenerator { 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public static final String GENERATOR_ID = "UUID"; 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private final Context mContext; 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private final String mPreferenceKey; 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public UuidBasedUniqueIdentificationGenerator(Context context, String preferenceKey) { 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mContext = context; 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mPreferenceKey = preferenceKey; 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci @Override 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public String getUniqueId(@Nullable String salt) { 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SharedPreferences preferences = PreferenceManager 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .getDefaultSharedPreferences(mContext); 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci String storedUniqueId = preferences.getString(mPreferenceKey, null); 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (storedUniqueId != null) { 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return storedUniqueId; 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Generate a new unique ID. 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci String uniqueId = getUUID(); 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Store the field so we ensure we always return the same unique ID. 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SharedPreferences.Editor editor = preferences.edit(); 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci editor.putString(mPreferenceKey, uniqueId); 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci editor.apply(); 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return uniqueId; 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci @VisibleForTesting 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci String getUUID() { 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return UUID.randomUUID().toString(); 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci