/*
* Copyright (C) 2017 MINDORKS NEXTGEN PRIVATE LIMITED
* 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
*
* https://mindorks.com/license/apache-v2
*
* 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.mindorks.framework.mvp.ui.main;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Animatable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.design.widget.NavigationView;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.ScaleAnimation;
import android.widget.TextView;
import com.mindorks.framework.mvp.BuildConfig;
import com.mindorks.framework.mvp.R;
import com.mindorks.framework.mvp.data.db.model.Question;
import com.mindorks.framework.mvp.ui.about.AboutFragment;
import com.mindorks.framework.mvp.ui.base.BaseActivity;
import com.mindorks.framework.mvp.ui.custom.RoundedImageView;
import com.mindorks.framework.mvp.ui.login.LoginActivity;
import com.mindorks.framework.mvp.utils.ScreenUtils;
import com.mindorks.placeholderview.SwipeDecor;
import com.mindorks.placeholderview.SwipePlaceHolderView;
import com.mindorks.placeholderview.listeners.ItemRemovedListener;
import java.util.List;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* Created by janisharali on 27/01/17.
*/
public class MainActivity extends BaseActivity implements MainMvpView {
@Inject
MainMvpPresenter<MainMvpView> mPresenter;
@BindView(R.id.toolbar)
Toolbar mToolbar;
@BindView(R.id.drawer_view)
DrawerLayout mDrawer;
@BindView(R.id.navigation_view)
NavigationView mNavigationView;
@BindView(R.id.tv_app_version)
TextView mAppVersionTextView;
@BindView(R.id.cards_container)
SwipePlaceHolderView mCardsContainerView;
private TextView mNameTextView;
private TextView mEmailTextView;
private RoundedImageView mProfileImageView;
private ActionBarDrawerToggle mDrawerToggle;
public static Intent getStartIntent(Context context) {
Intent intent = new Intent(context, MainActivity.class);
return intent;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getActivityComponent().inject(this);
setUnBinder(ButterKnife.bind(this));
mPresenter.onAttach(this);
setUp();
}
@Override
public void onBackPressed() {
FragmentManager fragmentManager = getSupportFragmentManager();
Fragment fragment = fragmentManager.findFragmentByTag(AboutFragment.TAG);
if (fragment == null) {
super.onBackPressed();
} else {
onFragmentDetached(AboutFragment.TAG);
}
}
@Override
public void refreshQuestionnaire(List<Question> questionList) {
for (Question question : questionList) {
if (question != null
&& question.getOptionList() != null
&& question.getOptionList().size() == 3) {
mCardsContainerView.addView(new QuestionCard(question));
}
}
}
@Override
public void reloadQuestionnaire(List<Question> questionList) {
refreshQuestionnaire(questionList);
ScaleAnimation animation =
new ScaleAnimation(
1.15f, 1, 1.15f, 1,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
mCardsContainerView.setAnimation(animation);
animation.setDuration(100);
animation.start();
}
@Override
public void updateAppVersion() {
String version = getString(R.string.version) + " " + BuildConfig.VERSION_NAME;
mAppVersionTextView.setText(version);
}
@Override
public void updateUserName(String currentUserName) {
mNameTextView.setText(currentUserName);
}
@Override
public void updateUserEmail(String currentUserEmail) {
mEmailTextView.setText(currentUserEmail);
}
@Override
public void updateUserProfilePic(String currentUserProfilePicUrl) {
//load profile pic url into ANImageView
}
@Override
protected void onDestroy() {
mPresenter.onDetach();
super.onDestroy();
}
@Override
public void onFragmentAttached() {
if (mDrawer != null)
mDrawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
}
@Override
public void onFragmentDetached(String tag) {
FragmentManager fragmentManager = getSupportFragmentManager();
Fragment fragment = fragmentManager.findFragmentByTag(tag);
if (fragment != null) {
fragmentManager
.beginTransaction()
.disallowAddToBackStack()
.setCustomAnimations(R.anim.slide_left, R.anim.slide_right)
.remove(fragment)
.commitNow();
if (mDrawer != null)
mDrawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
}
}
@Override
public void showAboutFragment() {
getSupportFragmentManager()
.beginTransaction()
.disallowAddToBackStack()
.setCustomAnimations(R.anim.slide_left, R.anim.slide_right)
.add(R.id.cl_root_view, AboutFragment.newInstance(), AboutFragment.TAG)
.commit();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Drawable drawable = item.getIcon();
if (drawable instanceof Animatable) {
((Animatable) drawable).start();
}
switch (item.getItemId()) {
case R.id.action_cut:
return true;
case R.id.action_copy:
return true;
case R.id.action_share:
return true;
case R.id.action_delete:
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
protected void setUp() {
setSupportActionBar(mToolbar);
mDrawerToggle = new ActionBarDrawerToggle(
this,
mDrawer,
mToolbar,
R.string.open_drawer,
R.string.close_drawer) {
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
hideKeyboard();
}
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
}
};
mDrawer.addDrawerListener(mDrawerToggle);
mDrawerToggle.syncState();
setupNavMenu();
mPresenter.onNavMenuCreated();
setupCardContainerView();
mPresenter.onViewInitialized();
}
private void setupCardContainerView() {
int screenWidth = ScreenUtils.getScreenWidth(this);
int screenHeight = ScreenUtils.getScreenHeight(this);
mCardsContainerView.getBuilder()
.setDisplayViewCount(3)
.setHeightSwipeDistFactor(10)
.setWidthSwipeDistFactor(5)
.setSwipeDecor(new SwipeDecor()
.setViewWidth((int) (0.90 * screenWidth))
.setViewHeight((int) (0.75 * screenHeight))
.setPaddingTop(20)
.setSwipeRotationAngle(10)
.setRelativeScale(0.01f));
mCardsContainerView.addItemRemoveListener(new ItemRemovedListener() {
@Override
public void onItemRemoved(int count) {
if (count == 0) {
// reload the contents again after 1 sec delay
new Handler(getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
mPresenter.onCardExhausted();
}
}, 800);
}
}
});
}
void setupNavMenu() {
View headerLayout = mNavigationView.getHeaderView(0);
mProfileImageView = (RoundedImageView) headerLayout.findViewById(R.id.iv_profile_pic);
mNameTextView = (TextView) headerLayout.findViewById(R.id.tv_name);
mEmailTextView = (TextView) headerLayout.findViewById(R.id.tv_email);
mNavigationView.setNavigationItemSelectedListener(
new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
mDrawer.closeDrawer(GravityCompat.START);
switch (item.getItemId()) {
case R.id.nav_item_about:
mPresenter.onDrawerOptionAboutClick();
return true;
case R.id.nav_item_logout:
mPresenter.onDrawerOptionLogoutClick();
return true;
default:
return false;
}
}
});
}
@Override
public void openLoginActivity() {
startActivity(LoginActivity.getStartIntent(this));
finish();
}
}