/*
* Copyright (c) 2014-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
package com.facebook.stetho.inspector.elements.android;
import android.app.Application;
import android.os.Handler;
import android.os.Looper;
import com.facebook.stetho.common.ThreadBound;
import com.facebook.stetho.common.UncheckedCallable;
import com.facebook.stetho.common.Util;
import com.facebook.stetho.common.android.HandlerUtil;
import com.facebook.stetho.inspector.elements.DescriptorProvider;
import com.facebook.stetho.inspector.elements.DocumentProvider;
import com.facebook.stetho.inspector.elements.DocumentProviderFactory;
import java.util.List;
public final class AndroidDocumentProviderFactory
implements DocumentProviderFactory, ThreadBound {
private final Application mApplication;
private final List<DescriptorProvider> mDescriptorProviders;
private final Handler mHandler;
public AndroidDocumentProviderFactory(
Application application,
List<DescriptorProvider> descriptorProviders) {
mApplication = Util.throwIfNull(application);
mDescriptorProviders = Util.throwIfNull(descriptorProviders);
mHandler = new Handler(Looper.getMainLooper());
}
@Override
public DocumentProvider create() {
return new AndroidDocumentProvider(mApplication, mDescriptorProviders, this);
}
// ThreadBound implementation
@Override
public boolean checkThreadAccess() {
return HandlerUtil.checkThreadAccess(mHandler);
}
@Override
public void verifyThreadAccess() {
HandlerUtil.verifyThreadAccess(mHandler);
}
@Override
public <V> V postAndWait(UncheckedCallable<V> c) {
return HandlerUtil.postAndWait(mHandler, c);
}
@Override
public void postAndWait(Runnable r) {
HandlerUtil.postAndWait(mHandler, r);
}
@Override
public void postDelayed(Runnable r, long delayMillis) {
if (!mHandler.postDelayed(r, delayMillis)) {
throw new RuntimeException("Handler.postDelayed() returned false");
}
}
@Override
public void removeCallbacks(Runnable r) {
mHandler.removeCallbacks(r);
}
}