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