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