| /* |
| * Copyright (C) 2016 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.packageinstaller; |
| |
| import android.annotation.NonNull; |
| import android.content.BroadcastReceiver; |
| import android.content.Context; |
| import android.content.Intent; |
| |
| /** |
| * Receives install events and perists them using a {@link EventResultPersister}. |
| */ |
| public class InstallEventReceiver extends BroadcastReceiver { |
| private static final Object sLock = new Object(); |
| private static EventResultPersister sReceiver; |
| |
| /** |
| * Get the event receiver persisting the results |
| * |
| * @return The event receiver. |
| */ |
| @NonNull private static EventResultPersister getReceiver(@NonNull Context context) { |
| synchronized (sLock) { |
| if (sReceiver == null) { |
| sReceiver = new EventResultPersister( |
| TemporaryFileManager.getInstallStateFile(context)); |
| } |
| } |
| |
| return sReceiver; |
| } |
| |
| @Override |
| public void onReceive(Context context, Intent intent) { |
| getReceiver(context).onEventReceived(context, intent); |
| } |
| |
| /** |
| * Add an observer. If there is already an event for this id, call back inside of this call. |
| * |
| * @param context A context of the current app |
| * @param id The id the observer is for or {@code GENERATE_NEW_ID} to generate a new one. |
| * @param observer The observer to call back. |
| * |
| * @return The id for this event |
| */ |
| static int addObserver(@NonNull Context context, int id, |
| @NonNull EventResultPersister.EventResultObserver observer) |
| throws EventResultPersister.OutOfIdsException { |
| return getReceiver(context).addObserver(id, observer); |
| } |
| |
| /** |
| * Remove a observer. |
| * |
| * @param context A context of the current app |
| * @param id The id the observer was added for |
| */ |
| static void removeObserver(@NonNull Context context, int id) { |
| getReceiver(context).removeObserver(id); |
| } |
| } |