1 /* 2 * Copyright (C) 2022 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.ondevicepersonalization.services; 18 19 import android.annotation.NonNull; 20 import android.content.Context; 21 import android.ondevicepersonalization.aidl.IPrivacyStatusService; 22 import android.ondevicepersonalization.aidl.IPrivacyStatusServiceCallback; 23 import android.os.RemoteException; 24 import android.util.Log; 25 26 import com.android.ondevicepersonalization.services.data.user.PrivacySignal; 27 import com.android.ondevicepersonalization.services.data.user.RawUserData; 28 import com.android.ondevicepersonalization.services.data.user.UserDataCollector; 29 30 import java.util.Objects; 31 import java.util.concurrent.Executor; 32 33 /** 34 * ODP service that modifies and persists user's privacy status. 35 */ 36 public class OnDevicePersonalizationPrivacyStatusServiceDelegate 37 extends IPrivacyStatusService.Stub { 38 private static final String TAG = "OnDevicePersonalizationPrivacyStatusServiceDelegate"; 39 private final Context mContext; 40 private static final Executor sBackgroundExecutor = 41 OnDevicePersonalizationExecutors.getBackgroundExecutor(); 42 OnDevicePersonalizationPrivacyStatusServiceDelegate(Context context)43 public OnDevicePersonalizationPrivacyStatusServiceDelegate(Context context) { 44 mContext = context; 45 } 46 47 @Override setKidStatus(boolean kidStatusEnabled, @NonNull IPrivacyStatusServiceCallback callback)48 public void setKidStatus(boolean kidStatusEnabled, 49 @NonNull IPrivacyStatusServiceCallback callback) { 50 Objects.requireNonNull(callback); 51 // TODO(b/272823829): Verify caller's permission 52 // TODO(b/270468742): Call system server for U+ devices 53 sBackgroundExecutor.execute( 54 () -> { 55 try { 56 PrivacySignal privacySignal = PrivacySignal.getInstance(); 57 58 if (kidStatusEnabled == privacySignal.isKidStatusEnabled()) { 59 callback.onSuccess(); 60 return; 61 } 62 63 privacySignal.setKidStatusEnabled(kidStatusEnabled); 64 // Rollback all user data if kid status changes 65 RawUserData userData = RawUserData.getInstance(); 66 UserDataCollector userDataCollector = 67 UserDataCollector.getInstance(mContext); 68 userDataCollector.clearUserData(userData); 69 userDataCollector.clearMetadata(); 70 userDataCollector.clearDatabase(); 71 callback.onSuccess(); 72 } catch (RemoteException re) { 73 Log.e(TAG, "Unable to send result to the callback.", re); 74 } 75 } 76 ); 77 } 78 } 79