/* * 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.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.support.annotation.NonNull; /** * 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); } }