/*
* Copyright (C) 2016 Ferid Cafer
*
* 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
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 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.ferid.app.classroom;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Handler;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import com.ferid.app.classroom.attendance.AttendancesFragment;
import com.ferid.app.classroom.edit.EditClassroomFragment;
import com.ferid.app.classroom.listeners.PermissionGrantListener;
import com.ferid.app.classroom.statistics.StatisticsFragment;
import com.ferid.app.classroom.utility.ApplicationRating;
import com.ferid.app.classroom.utility.PermissionProcessor;
/**
* Created by ferid.cafer on 4/15/2015.
*/
public class MainActivity extends AppCompatActivity {
private ViewPager viewPager;
private TabsPagerAdapter mAdapter;
private TabLayout mSlidingTabLayout;
private FloatingActionButton floatingActionButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
int numberOfClassrooms = 0;
Bundle args = getIntent().getExtras();
if (args != null) {
numberOfClassrooms = args.getInt("numberOfClassrooms");
}
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
viewPager = (ViewPager) findViewById(R.id.pager);
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(mAdapter);
mSlidingTabLayout = (TabLayout) findViewById(R.id.sliding_tabs);
mSlidingTabLayout.setSelectedTabIndicatorColor(ContextCompat.getColor(this, R.color.white));
mSlidingTabLayout.setTabTextColors(ContextCompat.getColor(this, R.color.colourPrimaryLight),
ContextCompat.getColor(this, R.color.white));
mSlidingTabLayout.setupWithViewPager(viewPager);
floatingActionButton = (FloatingActionButton) findViewById(R.id.floatingActionButton);
addOnPageChangeListener();
//if there are already entered classrooms, just show take attendance page,
//otherwise show edit classrooms page to add a new one.
if (numberOfClassrooms > 0) {
viewPager.setCurrentItem(1);
} else {
viewPager.setCurrentItem(0);
//make floating button available to add classrooms
setButtonAdd();
}
//rate the app
ApplicationRating.ratingPopupManager(this);
}
/**
* View Pager, page change listener.
*/
private void addOnPageChangeListener() {
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
switch (position) {
case 0: //editing
setButtonAdd();
break;
case 1: //attendance
setButtonHidden();
break;
case 2: //statistics
setButtonPublish();
break;
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
/**
* EditClassroom.<br />
* Add a new classroom.
*/
private void setButtonAdd() {
new Handler().post(new Runnable() {
@Override
public void run() {
floatingActionButton.setImageResource(R.drawable.ic_action_add);
floatingActionButton.show();
}
});
floatingActionButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditClassroomFragment fragment = (EditClassroomFragment) getSupportFragmentManager()
.findFragmentByTag("android:switcher:" + viewPager.getId() + ":"
+ mAdapter.getItemId(0));
fragment.addClassroom();
}
});
}
/**
* Attendance.<br />
* Just hide the button.
*/
private void setButtonHidden() {
new Handler().post(new Runnable() {
@Override
public void run() {
floatingActionButton.hide();
}
});
}
/**
* Statistics.<br />
* Convert attendances into an excel file and share it.
*/
private void setButtonPublish() {
new Handler().post(new Runnable() {
@Override
public void run() {
floatingActionButton.setImageResource(R.drawable.ic_action_document);
floatingActionButton.show();
}
});
floatingActionButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
checkPermissionForExternal();
}
});
}
/**
* Export attendances list as an excel file
*/
private void exportToExcel() {
StatisticsFragment fragment = (StatisticsFragment) getSupportFragmentManager()
.findFragmentByTag("android:switcher:" + viewPager.getId() + ":"
+ mAdapter.getItemId(2));
fragment.getDataForExcel();
}
/**
* Checks permission to access external storage.
*/
public void checkPermissionForExternal() {
PermissionProcessor permissionProcessor = new PermissionProcessor(this, viewPager);
permissionProcessor.setPermissionGrantListener(new PermissionGrantListener() {
@Override
public void OnGranted() {
exportToExcel();
}
});
permissionProcessor.askForPermissionExternalStorage();
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
if (requestCode == PermissionProcessor.REQUEST_EXTERNAL_STORAGE) {
//if request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
exportToExcel();
}
}
}
public class TabsPagerAdapter extends FragmentPagerAdapter {
public TabsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return EditClassroomFragment.newInstance();
case 1:
return AttendancesFragment.newInstance();
case 2:
return StatisticsFragment.newInstance();
default:
return AttendancesFragment.newInstance();
}
}
@Override
public int getCount() {
// get item count - equal to number of tabs
return 3;
}
@Override
public CharSequence getPageTitle(int position) {
String[] titles = getResources().getStringArray(R.array.main_page);
return titles[position];
}
}
}