package com.florianmski.tracktoid.ui.activities;
import android.graphics.Rect;
import android.graphics.drawable.ColorDrawable;
import android.os.Build;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import com.florianmski.tracktoid.R;
import com.florianmski.tracktoid.TraktoidTheme;
import com.florianmski.tracktoid.utils.Utils;
import com.florianmski.tracktoid.ui.widgets.DrawInsetsFrameLayout;
import java.util.ArrayList;
import java.util.List;
public abstract class TranslucentActivity extends BaseActivity implements DrawInsetsFrameLayout.OnInsetsCallback
{
private Rect insets = null;
private List<DrawInsetsFrameLayout.OnInsetsCallback> insetsCallbacks = new ArrayList<DrawInsetsFrameLayout.OnInsetsCallback>();
protected DrawInsetsFrameLayout difl;
protected abstract int getContentViewId();
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addOnInsetsCallback(this);
}
@Override
protected View getContentView()
{
final View v = LayoutInflater.from(this).inflate(getContentViewId(), null);
// if we can, do the translucent thing, if we don't, do nothing
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
{
difl = new DrawInsetsFrameLayout(this);
difl.setInsetStatusBarBackground(new ColorDrawable(Utils.getColorFromAttribute(this, R.attr.colorPrimaryDark)));
difl.setInsetNavBarBackground(new ColorDrawable(getResources().getColor(R.color.black_transparent)));
difl.setOnInsetsCallback(new DrawInsetsFrameLayout.OnInsetsCallback()
{
@Override
public void onInsetsChanged(Rect insets)
{
if (v.getLayoutParams() instanceof ViewGroup.MarginLayoutParams)
{
ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
p.setMargins(p.leftMargin, insets.top, p.rightMargin, p.bottomMargin);
v.requestLayout();
}
for(DrawInsetsFrameLayout.OnInsetsCallback callback : insetsCallbacks)
callback.onInsetsChanged(insets);
}
});
FrameLayout fl = new FrameLayout(this);
fl.addView(v);
fl.addView(difl);
return fl;
}
return v;
}
@Override
protected void onDestroy()
{
super.onDestroy();
removeOnInsetsCallback(this);
}
@Override
public void setContentView(int layoutResID)
{
super.setContentView(layoutResID);
}
public void addOnInsetsCallback(DrawInsetsFrameLayout.OnInsetsCallback callback)
{
insetsCallbacks.add(callback);
if(insets != null)
callback.onInsetsChanged(insets);
}
public void removeOnInsetsCallback(DrawInsetsFrameLayout.OnInsetsCallback callback)
{
insetsCallbacks.remove(callback);
}
@Override
public void onInsetsChanged(Rect insets)
{
this.insets = insets;
// expand the toolbar behind the status bar
// View toolbar = findViewById(R.id.toolbar);
// if(toolbar != null)
// toolbar.setPadding(insets.left, insets.top, insets.right, toolbar.getPaddingBottom());
}
@Override
public void setTheme(TraktoidTheme theme)
{
super.setTheme(theme);
// set statusbar color
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
difl.setInsetStatusBarBackground(new ColorDrawable(theme.getColorDark(this)));
}
}