package de.tum.in.tumcampusapp.activities.generic;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.NavigationView;
import android.support.v4.app.NavUtils;
import android.support.v4.app.TaskStackBuilder;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import com.google.common.base.Optional;
import de.hdodenhof.circleimageview.CircleImageView;
import de.tum.in.tumcampusapp.R;
import de.tum.in.tumcampusapp.activities.MainActivity;
import de.tum.in.tumcampusapp.activities.UserPreferencesActivity;
import de.tum.in.tumcampusapp.auxiliary.Const;
import de.tum.in.tumcampusapp.auxiliary.DrawerMenuHelper;
import de.tum.in.tumcampusapp.auxiliary.ImplicitCounter;
import de.tum.in.tumcampusapp.auxiliary.Utils;
import de.tum.in.tumcampusapp.models.tumo.Employee;
import de.tum.in.tumcampusapp.tumonline.TUMOnlineConst;
import de.tum.in.tumcampusapp.tumonline.TUMOnlineRequest;
/**
* Takes care of the navigation drawer which might be attached to the activity and also handles up navigation
*/
public abstract class BaseActivity extends AppCompatActivity {
/**
* Default layouts for user interaction
*/
private final int mLayoutId;
protected DrawerLayout mDrawerLayout;
protected NavigationView mDrawerList;
protected View headerView;
/**
* Standard constructor for BaseActivity.
* The given layout might include a DrawerLayout.
*
* @param layoutId Resource id of the xml layout that should be used to inflate the activity
*/
public BaseActivity(int layoutId) {
mLayoutId = layoutId;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ImplicitCounter.count(this);
setContentView(mLayoutId);
// Get handles to navigation drawer
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (NavigationView) findViewById(R.id.left_drawer);
// Setup the navigation drawer if present in the layout
if (mDrawerList != null && mDrawerLayout != null) {
// Set personalization in the navdrawer
headerView = mDrawerList.inflateHeaderView(R.layout.drawer_header);
TextView nameText = (TextView) headerView.findViewById(R.id.name);
TextView emailText = (TextView) headerView.findViewById(R.id.email);
nameText.setText(Utils.getSetting(this, Const.CHAT_ROOM_DISPLAY_NAME,
getString(R.string.token_not_enabled)));
StringBuffer email = new StringBuffer(Utils.getSetting(this, Const.LRZ_ID, ""));
if (!email.toString().isEmpty()) {
email.append("@mytum.de");
}
emailText.setText(email);
// Set picture as set in TUMOnline
fetchProfilePicture();
DrawerMenuHelper helper = new DrawerMenuHelper(this, mDrawerLayout);
helper.populateMenu(mDrawerList.getMenu());
// Set the NavigationDrawer's click listener
mDrawerList.setNavigationItemSelectedListener(helper);
}
String parent = NavUtils.getParentActivityName(this);
Toolbar toolbar = (Toolbar) findViewById(R.id.main_toolbar);
setSupportActionBar(toolbar);
if (getSupportActionBar() != null && (
(parent != null && parent.equals(MainActivity.class.getName()))
|| this instanceof MainActivity
|| this instanceof UserPreferencesActivity
)) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
// Respond to the action bar's Up/Home button
Intent upIntent = NavUtils.getParentActivityIntent(this);
upIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
// This activity is NOT part of this apps task, so create a new task
// when navigating up, with a synthesized back stack.
TaskStackBuilder.create(this).addNextIntentWithParentStack(upIntent).startActivities();
} else {
// This activity is part of this apps task, so simply
// navigate up to the logical parent activity.
NavUtils.navigateUpTo(this, upIntent);
}
return true;
}
return super.onOptionsItemSelected(item);
}
private void fetchProfilePicture() {
String id = Utils.getSetting(this, Const.TUMO_PIDENT_NR, "");
if (id.isEmpty()) {
return;
}
final TUMOnlineRequest<Employee> request = new TUMOnlineRequest<>(TUMOnlineConst.PERSON_DETAILS, this, true);
request.setParameter("pIdentNr", id);
new Thread(new Runnable() {
@Override
public void run() {
final Optional<Employee> result = request.fetch();
if (!result.isPresent()) {
return;
}
runOnUiThread(new Runnable() {
@Override
public void run() {
CircleImageView picture = (CircleImageView) headerView.findViewById(R.id.profile_image);
if (result.get().getImage() != null) {
picture.setImageBitmap(result.get().getImage());
}
}
});
}
}).start();
}
}