package com.mercandalli.android.apps.files;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.os.Build;
import android.support.v4.view.LayoutInflaterCompat;
import android.support.v4.view.LayoutInflaterFactory;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.app.AppCompatDelegate;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import com.mercandalli.android.apps.files.view.StaticProgressBar;
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public final class LayoutInflaterWrapper {
public static void wrap(final Activity activity) {
final LayoutInflater layoutInflater = LayoutInflater.from(activity);
if (activity instanceof AppCompatActivity) {
final AppCompatDelegate delegate = ((AppCompatActivity) activity).getDelegate();
if (delegate instanceof LayoutInflaterFactory) {
LayoutInflaterCompat.setFactory(layoutInflater,
new LayoutInflaterWrapperCompat((LayoutInflaterFactory) delegate));
return;
}
}
final LayoutInflater.Factory factory = layoutInflater.getFactory();
final LayoutInflater.Factory2 factory2 = layoutInflater.getFactory2();
if (factory != null && factory2 != null) {
layoutInflater.setFactory2(new LayoutInflaterWrapperFactory2());
}
}
private static View createView(String name, Context context, AttributeSet attrs) {
if ("ProgressBar".equals(name)) {
return new StaticProgressBar(context, attrs);
}
return null;
}
private static class LayoutInflaterWrapperFactory2 implements LayoutInflater.Factory2 {
@Override
public View onCreateView(View parent, String name, Context context, AttributeSet attrs) {
return createView(name, context, attrs);
}
@Override
public View onCreateView(String name, Context context, AttributeSet attrs) {
return createView(name, context, attrs);
}
}
private static class LayoutInflaterWrapperCompat implements LayoutInflaterFactory {
private final LayoutInflaterFactory mLayoutInflaterFactory;
private LayoutInflaterWrapperCompat(LayoutInflaterFactory layoutInflaterFactory) {
mLayoutInflaterFactory = layoutInflaterFactory;
}
@Override
public View onCreateView(View parent, String name, Context context, AttributeSet attrs) {
final View view = createView(name, context, attrs);
if (view != null) {
return view;
}
return mLayoutInflaterFactory.onCreateView(parent, name, context, attrs);
}
}
}