package com.wamod.activity.home;
import android.annotation.SuppressLint;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.NavigationView;
import android.support.v4.app.Fragment;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewTreeObserver;
import android.view.animation.Animation;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.Transformation;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.wamod.ColorsManager;
import com.wamod.Resources;
import com.wamod.Utils;
/**
* Created by brianvalente on 10/3/16.
*/
public class HomeActivity extends AppCompatActivity {
private Toolbar mToolbar;
private View mStatusBarColorView;
private ActionBar mActionBar;
private NavigationView mNavigationView;
private DrawerLayout mDrawerLayout;
private RelativeLayout mContent;
private boolean mIsLollipop;
private CallsFragment mCallsFragment;
private ConversationsFragment mConversationsFragment;
private ContactsFragment mContactsFragment;
public static final int FRAGMENT_CALLS = 0;
public static final int FRAGMENT_CONVERSATIONS = 1;
public static final int FRAGMENT_CONTACTS = 2;
public static final int ANIMATION_DURATION = (int) (Utils.getSystemShortAnimationDuration() * 0.75);
private static int FRAGMENT_ACTIVE = 1;
@SuppressLint("NewApi")
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
//setTheme(Resources.getStyle("WAMOD.Theme.Home"));
super.onCreate(savedInstanceState);
setContentView(Resources.getLayout("wamod_activity_home"));
// Initialize fields
mContent = (RelativeLayout) findViewById(Resources.getID("content"));
mToolbar = (Toolbar) findViewById(Resources.getID("toolbar"));
mStatusBarColorView = findViewById(Resources.getID("status_bar_color"));
setSupportActionBar(mToolbar);
mActionBar = getSupportActionBar();
mNavigationView = (NavigationView) findViewById(Resources.id.wamod_drawer);
mDrawerLayout = (DrawerLayout) findViewById(Resources.id.wamod_drawer_parent);
mIsLollipop = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
mCallsFragment = (CallsFragment) getFragmentManager().findFragmentById(Resources.getID("fragment_calls"));
mConversationsFragment = (ConversationsFragment) getFragmentManager().findFragmentById(Resources.getID("fragment_conversations"));
mContactsFragment = (ContactsFragment) getFragmentManager().findFragmentById(Resources.getID("fragment_contacts"));
// Stop Android for drawing a translucent background on bars
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
// Load toolbar and status bar colors
mStatusBarColorView.setBackgroundColor(ColorsManager.getColor(ColorsManager.UI_ACTIVITY_STATUSBAR));
mStatusBarColorView.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, Utils.getStatusBarHeight(this)));
mToolbar.setBackgroundColor(ColorsManager.getColor(ColorsManager.UI_ACTIVITY_TOOLBAR));
// Set toolbar up button (Navigation bar toggle)
Drawable upIndicator = getResources().getDrawable(Resources.drawable.wamod_ic_menu);
upIndicator.setColorFilter(ColorsManager.getColor(ColorsManager.UI_ACTIVITY_TOOLBAR_ICONS), PorterDuff.Mode.MULTIPLY);
mActionBar.setDisplayHomeAsUpEnabled(true);
mActionBar.setHomeAsUpIndicator(upIndicator);
// Set toolbar title
mActionBar.setTitle("WhatsApp");
// Set navigation bar color
if (mIsLollipop)
getWindow().setNavigationBarColor(ColorsManager.getColor(ColorsManager.UI_ACTIVITY_NAVBAR));
// Set activity background color
mContent.setBackgroundColor(ColorsManager.getColor(ColorsManager.UI_ACTIVITY_BACKGROUND));
// Set fragments initial visibility
mCallsFragment.getView().setAlpha(FRAGMENT_ACTIVE == FRAGMENT_CALLS? 1 : 0);
mConversationsFragment.getView().setAlpha(FRAGMENT_ACTIVE == FRAGMENT_CONVERSATIONS? 1 : 0);
mContactsFragment.getView().setAlpha(FRAGMENT_ACTIVE == FRAGMENT_CONTACTS? 1 : 0);
switch (FRAGMENT_ACTIVE) {
case FRAGMENT_CALLS:
mCallsFragment.getView().bringToFront();
break;
case FRAGMENT_CONVERSATIONS:
mConversationsFragment.getView().bringToFront();
break;
case FRAGMENT_CONTACTS:
mContactsFragment.getView().bringToFront();
break;
}
// Avoid showing a space for the status bar when it's not present
updateBarsVisibility();
}
public void setActiveFragment(int fragment) {
if (FRAGMENT_ACTIVE == fragment) return;
final View oldFragment = getFragment(FRAGMENT_ACTIVE).getView();
final View newFragment = getFragment(fragment).getView();
newFragment.bringToFront();
final int dpToPixel_100 = Utils.convertDpToPixel(1, HomeActivity.this);
Animation oldAnim = new Animation() {
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
super.applyTransformation(interpolatedTime, t);
float interpolatedTimeInverted = (interpolatedTime * -1) + 1;
int top = (int)((interpolatedTime * 40) * dpToPixel_100);
oldFragment.setTop(top);
oldFragment.setAlpha(interpolatedTimeInverted);
}
};
Animation newAnim = new Animation() {
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
super.applyTransformation(interpolatedTime, t);
float interpolatedTimeInverted = (interpolatedTime * -1) + 1;
int top = (int)((interpolatedTimeInverted * 40) * dpToPixel_100);
newFragment.setTop(top);
newFragment.setAlpha(interpolatedTime);
}
};
oldAnim.setDuration(ANIMATION_DURATION);
newAnim.setDuration(ANIMATION_DURATION);
oldAnim.setInterpolator(new DecelerateInterpolator());
newAnim.setInterpolator(new DecelerateInterpolator());
oldFragment.startAnimation(oldAnim);
newFragment.startAnimation(newAnim);
FRAGMENT_ACTIVE = fragment;
}
private android.app.Fragment getFragment(int fragment) {
switch (fragment) {
case FRAGMENT_CALLS:
return mCallsFragment;
case FRAGMENT_CONVERSATIONS:
return mConversationsFragment;
case FRAGMENT_CONTACTS:
return mContactsFragment;
}
return null;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
showNavigationDrawer();
return true;
/*case 0:
a.onSearchRequested();
return true;*/
}
return false;
}
@Override
protected void onResume() {
super.onResume();
updateBarsVisibility();
}
private void updateBarsVisibility() {
mStatusBarColorView.setVisibility(View.VISIBLE);
if (Utils.isFullscreen(mStatusBarColorView))
mStatusBarColorView.setVisibility(View.VISIBLE);
else
mStatusBarColorView.setVisibility(View.GONE);
}
@Override
public void onMultiWindowModeChanged(boolean isInMultiWindowMode) {
super.onMultiWindowModeChanged(isInMultiWindowMode);
updateBarsVisibility();
}
private void showNavigationDrawer() {
mDrawerLayout.openDrawer(mNavigationView);
}
}