190f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang/* 290f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang * Copyright 2016, The Android Open Source Project 390f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang * 490f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang * Licensed under the Apache License, Version 2.0 (the "License"); 590f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang * you may not use this file except in compliance with the License. 690f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang * You may obtain a copy of the License at 790f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang * 890f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang * http://www.apache.org/licenses/LICENSE-2.0 990f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang * 1090f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang * Unless required by applicable law or agreed to in writing, software 1190f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang * distributed under the License is distributed on an "AS IS" BASIS, 1290f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1390f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang * See the License for the specific language governing permissions and 1490f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang * limitations under the License. 1590f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang */ 1690f58ca887207a527c80d7e9ccea97e205c960d4Victor Changpackage com.android.managedprovisioning.common; 1790f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang 1890f58ca887207a527c80d7e9ccea97e205c960d4Victor Changimport android.content.Context; 1990f58ca887207a527c80d7e9ccea97e205c960d4Victor Changimport android.content.SharedPreferences; 2090f58ca887207a527c80d7e9ccea97e205c960d4Victor Changimport android.support.annotation.VisibleForTesting; 2190f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang 2290f58ca887207a527c80d7e9ccea97e205c960d4Victor Changpublic class ManagedProvisioningSharedPreferences { 2390f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang public static final long DEFAULT_PROVISIONING_ID = 0L; 2490f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang 2590f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang @VisibleForTesting 2690f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang static final String KEY_PROVISIONING_ID = "provisioning_id"; 2790f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang 2890f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang @VisibleForTesting 2990f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang static final String SHARED_PREFERENCE = "managed_profile_shared_preferences"; 3090f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang 3190f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang /** 3290f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang * It's a process-wise in-memory write lock. No other processes will write the same file. 3390f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang */ 3490f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang private static final Object sWriteLock = new Object(); 3590f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang 3690f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang private final SharedPreferences mSharedPreferences; 3790f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang 3890f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang public ManagedProvisioningSharedPreferences(Context context) { 3990f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang mSharedPreferences = context.getSharedPreferences(SHARED_PREFERENCE, Context.MODE_PRIVATE); 4090f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang } 4190f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang 4290f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang @VisibleForTesting 4390f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang public long getProvisioningId() { 4490f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang return mSharedPreferences.getLong(KEY_PROVISIONING_ID, DEFAULT_PROVISIONING_ID); 4590f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang } 4690f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang 4790f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang /** 4890f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang * Can assume the id is unique across all provisioning sessions 4990f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang * @return a new provisioning id by incrementing the current id 5090f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang */ 5190f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang public long incrementAndGetProvisioningId() { 5290f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang synchronized (sWriteLock) { 5390f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang long provisioningId = getProvisioningId(); 5490f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang provisioningId++; 5590f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang // commit synchronously 5690f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang mSharedPreferences.edit().putLong(KEY_PROVISIONING_ID, provisioningId).commit(); 5790f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang return provisioningId; 5890f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang } 5990f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang } 6090f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang} 61