package com.V4Creations.vtulife.view.activity; import java.io.File; import java.io.IOException; import java.util.ArrayList; import android.app.Dialog; import android.content.ActivityNotFoundException; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.support.v4.app.ActionBarDrawerToggle; import android.support.v4.app.Fragment; import android.support.v4.view.GravityCompat; import android.support.v4.view.MenuItemCompat; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarActivity; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import com.V4Creations.vtulife.R; import com.V4Creations.vtulife.controller.adapters.VTULifeFragmentAdapter; import com.V4Creations.vtulife.controller.adapters.VTULifeFragmentAdapter.FragmentInfo; import com.V4Creations.vtulife.controller.db.VTULifeDataBase; import com.V4Creations.vtulife.controller.server.GCMRegisterManager; import com.V4Creations.vtulife.model.ActionBarStatus; import com.V4Creations.vtulife.model.interfaces.RefreshListener; import com.V4Creations.vtulife.util.BugSenseManager; import com.V4Creations.vtulife.util.GoogleAnalyticsManager; import com.V4Creations.vtulife.util.NavigationMenuManager; import com.V4Creations.vtulife.util.NavigationMenuManager.NavigationMenuManagerListener; import com.V4Creations.vtulife.util.PagerSlidingTabStrip; import com.V4Creations.vtulife.util.Settings; import com.V4Creations.vtulife.util.VTULifeConstance; import com.V4Creations.vtulife.util.VTULifeUtils; import com.V4Creations.vtulife.util.system.SystemFeatureChecker; import com.V4Creations.vtulife.view.fragments.ClassResultListFragment; import com.V4Creations.vtulife.view.fragments.DirectoryListingFragment; import com.V4Creations.vtulife.view.fragments.FastResultListFragment; import com.V4Creations.vtulife.view.fragments.ShareAPicFragment; import com.V4Creations.vtulife.view.fragments.UploadFileFragment; import com.V4Creations.vtulife.view.fragments.WebFragment; import com.google.analytics.tracking.android.EasyTracker; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GooglePlayServicesUtil; import de.keyboardsurfer.android.widget.crouton.Configuration; import de.keyboardsurfer.android.widget.crouton.Crouton; import de.keyboardsurfer.android.widget.crouton.Style; public class VTULifeMainActivity extends ActionBarActivity implements NavigationMenuManagerListener { String TAG = "VTULifeMainActivity"; private final static int INTERNET_CHECK_TIME_DELAY_HIGH = 10000; private final static int INTERNET_CHECK_TIME_DELAY_LOW = 2000; private final static int PREFERENCE_REQUEST_CODE = 1000, NOTIFICATION_REQUEST_CODE = 1001; private final static int PLAY_SERVICES_RESOLUTION_REQUEST = 9000; public static final int NUM_OF_FRAGMENTS = 6; public static final int ID_VTU_LIFE_WEB_FRAGMENT = 0; public static final int ID_DIRECTORY_LISTING_FRAGMENT = 1; public static final int ID_FAST_RESULT_FRAGMENT = 2; public static final int ID_CLASS_RESULT_FRAGMENT = 3; public static final int ID_UPLOAD_FILE_FRAGEMENT = 4; public static final int ID_SHARE_A_PIC_FRAGMENT = 5; private ViewPager mViewPager; private PagerSlidingTabStrip mTabs; private VTULifeFragmentAdapter mVtuLifeFragmentAdapter; private ArrayList<Fragment> vtuLifeFragments; private boolean isInternetCheckRunning, isHighDelay; private Handler handler; private Crouton infiniteCrouton; private static final Configuration CONFIGURATION_INFINITE = new Configuration.Builder() .setDuration(Configuration.DURATION_INFINITE).build(); private EasyTracker mEasyTracker; private boolean mExitFlag = false; private Dialog mHelpDialog; private DrawerLayout mDrawerLayout; private ActionBarDrawerToggle mDrawerToggle; private View mMenuDrawer; private NavigationMenuManager mNavigationMenuManager; private TextView mNotificationCountTextView; private NavigationMenu mNavigationMenu; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); BugSenseManager.initBugSense(this); supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); setContentView(R.layout.activity_main); init(); gcmCheck(); checkFirstTimeUse(); } private void checkFirstTimeUse() { if (Settings.isFirtsTime(getApplicationContext())) { Settings.setFirstTime(getApplicationContext(), false); showCrouton(getString(R.string.welcome_to), Style.INFO, true); } } private void gcmCheck() { if (checkPlayServices() && !Settings.isGCMRegistered(getApplicationContext())) registerGCMToServer(); } private void registerGCMToServer() { new GCMRegisterManager(this).execute(); } private void init() { handler = new Handler(); initNavigationDrawer(); initFragments(); initTabs(); } private void initNavigationDrawer() { mMenuDrawer = findViewById(R.id.left_drawer); mNavigationMenu = new NavigationMenu(this, mMenuDrawer); mNavigationMenuManager = new NavigationMenuManager(this); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.vtulife_ic_navigation_drawer, R.string.navigation_drawer_open, R.string.navigation_drawer_close) { public void onDrawerClosed(View view) { super.onDrawerClosed(view); getSupportActionBar().setTitle(R.string.app_name); supportInvalidateOptionsMenu(); } public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); getSupportActionBar().setTitle(R.string.menu); supportInvalidateOptionsMenu(); } }; mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); mDrawerLayout.setDrawerListener(mDrawerToggle); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); mDrawerLayout.openDrawer(mMenuDrawer); } private void initTabs() { mEasyTracker = GoogleAnalyticsManager .getGoogleAnalyticsTracker(getApplicationContext()); mTabs = (PagerSlidingTabStrip) findViewById(R.id.tabs); mViewPager = (ViewPager) findViewById(R.id.pager); mViewPager.setOffscreenPageLimit(NUM_OF_FRAGMENTS); mVtuLifeFragmentAdapter = new VTULifeFragmentAdapter( getSupportFragmentManager(), vtuLifeFragments, getApplicationContext()); mViewPager.setAdapter(mVtuLifeFragmentAdapter); mTabs.setViewPager(mViewPager); mTabs.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int position) { FragmentInfo fragmentInfo = (FragmentInfo) mVtuLifeFragmentAdapter .getItem(position); reflectActionBarChange(fragmentInfo.getActionBarStatus(), position, true); GoogleAnalyticsManager.infomGoogleAnalytics(mEasyTracker, GoogleAnalyticsManager.CATEGORY_FRAGMENT, GoogleAnalyticsManager.ACTION_FRAGMENT_SELECTED, fragmentInfo.getTitle(getApplicationContext()), 0L); mNavigationMenu.changeSelected(position); } }); int currentPage = Settings.getFavoritePage(getApplicationContext()); mViewPager.setCurrentItem(currentPage); mNavigationMenu.changeSelected(currentPage); } private void initFragments() { vtuLifeFragments = new ArrayList<Fragment>(); vtuLifeFragments.add(new WebFragment()); vtuLifeFragments.add(new DirectoryListingFragment()); vtuLifeFragments.add(new FastResultListFragment()); vtuLifeFragments.add(new ClassResultListFragment()); vtuLifeFragments.add(new UploadFileFragment()); vtuLifeFragments.add(new ShareAPicFragment()); } @Override protected void onPause() { super.onPause(); stopInternetCheck(); } private void stopInternetCheck() { isInternetCheckRunning = false; if (infiniteCrouton != null) { Crouton.hide(infiniteCrouton); infiniteCrouton = null; } } @Override protected void onResume() { super.onResume(); updateInternetConnection(); } private boolean checkPlayServices() { int resultCode = GooglePlayServicesUtil .isGooglePlayServicesAvailable(this); if (resultCode != ConnectionResult.SUCCESS) { if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) { GooglePlayServicesUtil.getErrorDialog(resultCode, this, PLAY_SERVICES_RESOLUTION_REQUEST).show(); } else finish(); return false; } return true; } public void changeCurrentFragemnt(int id) { mViewPager.setCurrentItem(id); mDrawerLayout.closeDrawer(mMenuDrawer); } @Override public void onBackPressed() { if (mDrawerLayout.isDrawerOpen(mMenuDrawer)) { mDrawerLayout.closeDrawer(mMenuDrawer); return; } if (mExitFlag) finish(); else { Toast.makeText(getApplicationContext(), R.string.exit_message, Toast.LENGTH_SHORT).show(); new Thread(new Runnable() { @Override public void run() { mExitFlag = true; try { Thread.sleep(2000); } catch (InterruptedException e) { } mExitFlag = false; } }).start(); } } public void reflectActionBarChange(ActionBarStatus actionBarStatus, int fragmentId, boolean isInvalidate) { if (actionBarStatus != null) { if (mViewPager.getCurrentItem() == fragmentId) { getSupportActionBar().setTitle(R.string.app_name); getSupportActionBar().setSubtitle(actionBarStatus.subTitle); setSupportProgressBarIndeterminateVisibility(actionBarStatus.isInterminatePorogressBarVisible); if (actionBarStatus.isCustomViewOnActionBarEnabled) getSupportActionBar().setCustomView( actionBarStatus.customView); getSupportActionBar().setDisplayShowCustomEnabled( actionBarStatus.isCustomViewOnActionBarEnabled); } } else { getSupportActionBar().setSubtitle(null); setSupportProgressBarIndeterminateVisibility(false); getSupportActionBar().setDisplayShowCustomEnabled(false); } if (isInvalidate) supportInvalidateOptionsMenu(); } public void showCrouton(String message, Style style, boolean isHighPriority) { if (infiniteCrouton == null || isHighPriority) Crouton.makeText(this, message, style).show(); } public void showCrouton(int messageFromResource, Style style, boolean isHighPriority) { if (infiniteCrouton == null || isHighPriority) Crouton.makeText(this, messageFromResource, style).show(); } public void clearPendingCrouton() { if (infiniteCrouton == null) Crouton.clearCroutonsForActivity(this); } private void updateInternetConnection() { isInternetCheckRunning = true; isHighDelay = true; new Thread(new Runnable() { @Override public void run() { while (isInternetCheckRunning) { try { handler.post(new Runnable() { @Override public void run() { if (SystemFeatureChecker .isInternetConnection(getApplicationContext())) { if (infiniteCrouton != null) { Crouton.hide(infiniteCrouton); infiniteCrouton = null; showCrouton( R.string.internet_connected, Style.INFO, true); isHighDelay = true; } } else if (infiniteCrouton == null) { Crouton.clearCroutonsForActivity(VTULifeMainActivity.this); infiniteCrouton = Crouton .makeText(VTULifeMainActivity.this, R.string.internet_lost, Style.ALERT) .setConfiguration( CONFIGURATION_INFINITE); infiniteCrouton.show(); isHighDelay = false; } } }); Thread.sleep(isHighDelay ? INTERNET_CHECK_TIME_DELAY_HIGH : INTERNET_CHECK_TIME_DELAY_LOW); } catch (Exception e) { } } } }).start(); } @Override protected void onStart() { super.onStart(); GoogleAnalyticsManager.startGoogleAnalyticsForActivity(this); } @Override protected void onStop() { super.onStop(); GoogleAnalyticsManager.stopGoogleAnalyticsForActivity(this); } @Override protected void onDestroy() { super.onDestroy(); VTULifeDataBase.closeDb(); } public void showPreferences() { Intent intent = new Intent(getApplicationContext(), VTULifePreferencesActivity.class); startActivityForResult(intent, PREFERENCE_REQUEST_CODE); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (PREFERENCE_REQUEST_CODE == requestCode) notifyUSNCleaner(); else if (NOTIFICATION_REQUEST_CODE == requestCode) notifyNotificationRefresh(); } private void notifyNotificationRefresh() { int count = VTULifeDataBase.getInstance(this) .getUnreadedNotificationCount(); mNotificationCountTextView.setText(count + ""); } private void notifyUSNCleaner() { ((RefreshListener) mVtuLifeFragmentAdapter .getItem(ID_CLASS_RESULT_FRAGMENT)).refresh(); ((RefreshListener) mVtuLifeFragmentAdapter .getItem(ID_FAST_RESULT_FRAGMENT)).refresh(); } public void showAbout() { Intent intent = new Intent(getApplicationContext(), VTULifeAboutActivity.class); startActivity(intent); } public void showHelp() { mHelpDialog = new Dialog(this); mHelpDialog.setContentView(R.layout.activity_help); Button facebookButton = (Button) mHelpDialog .findViewById(R.id.facebookButton); Button mailButton = (Button) mHelpDialog.findViewById(R.id.emailButton); Button downloadButton = (Button) mHelpDialog .findViewById(R.id.downloadButton); View.OnClickListener onClickListener = new View.OnClickListener() { @Override public void onClick(View v) { switch (v.getId()) { case R.id.facebookButton: likeUsOnFacebook(); break; case R.id.emailButton: sendNormalMail(); break; case R.id.downloadButton: downloadHelpManual(); break; } } }; facebookButton.setOnClickListener(onClickListener); mailButton.setOnClickListener(onClickListener); downloadButton.setOnClickListener(onClickListener); mHelpDialog.setTitle(R.string.help); mHelpDialog.show(); } protected void downloadHelpManual() { if (isManualIsAlradyDownloaded()) openManual(); else doDownloadHelpManual(); if (mHelpDialog != null) mHelpDialog.dismiss(); } private void doDownloadHelpManual() { SystemFeatureChecker.downloadFile(VTULifeMainActivity.this, VTULifeConstance.WEB_URL + "/" + VTULifeConstance.ANDROID_USER_MANUAL, false); } private void openManual() { try { Uri path = Uri.fromFile(new File(getManualFileUrl())); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(path, "application/pdf"); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); try { startActivity(intent); } catch (ActivityNotFoundException e) { Toast.makeText(this, R.string.pdf_viewer_missing, Toast.LENGTH_SHORT).show(); } } catch (IOException e) { doDownloadHelpManual(); } } private boolean isManualIsAlradyDownloaded() { try { String fileName = getManualFileUrl(); return new File(fileName).exists(); } catch (IOException e) { return false; } } private String getManualFileUrl() throws IOException { // TODO take it to a commen class return new File(VTULifeUtils.getDefaultRootFolder(), VTULifeConstance.ANDROID_USER_MANUAL).getAbsolutePath(); } protected void sendNormalMail() { Intent i = new Intent(Intent.ACTION_SEND); i.setType("message/rfc822"); i.putExtra(Intent.EXTRA_EMAIL, new String[] { VTULifeUtils.getVTULifePublicEmailId() }); try { startActivity(Intent.createChooser(i, getString(R.string.send_email_for_help))); } catch (android.content.ActivityNotFoundException ex) { throw ex; } } public void likeUsOnFacebook() { SystemFeatureChecker.openUrlInBrowser(this, VTULifeConstance.FACEBOOK_PAGE_URL); } public void showNotificationActivity() { Intent intent = new Intent(getApplicationContext(), VTULifeNotificationActivity.class); startActivityForResult(intent, NOTIFICATION_REQUEST_CODE); } public void showRateApp() { try { SystemFeatureChecker.rateAppOnPlayStore(this); } catch (ActivityNotFoundException e) { showCrouton(R.string.play_app_missing, Style.ALERT, true); } } public void showFeedback() { try { SystemFeatureChecker.sendFeedback(this); } catch (ActivityNotFoundException e) { showCrouton(R.string.email_client_missing, Style.ALERT, true); } } @Override public void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); mDrawerToggle.syncState(); } @Override public void onConfigurationChanged( android.content.res.Configuration newConfig) { super.onConfigurationChanged(newConfig); mDrawerToggle.onConfigurationChanged(newConfig); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (mDrawerToggle.onOptionsItemSelected(item)) { return true; } switch (item.getItemId()) { case R.id.menu_settings: showPreferences(); return true; } return super.onOptionsItemSelected(item); } @Override public boolean onPrepareOptionsMenu(Menu menu) { mNavigationMenuManager.toggleNavMenu(menu, mDrawerLayout.isDrawerOpen(mMenuDrawer)); return super.onPrepareOptionsMenu(menu); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.navigation_drawer_menu, menu); MenuItem notificationMenuItem = menu.findItem(R.id.menu_notifications); View notificationView = MenuItemCompat .getActionView(notificationMenuItem); mNotificationCountTextView = (TextView) notificationView .findViewById(R.id.notifcationCountTextView); notifyNotificationRefresh(); notificationView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { showNotificationActivity(); } }); return super.onCreateOptionsMenu(menu); } @Override public void reflectNavChange(boolean isShowing) { if (!isShowing) { FragmentInfo fragmentInfo = (FragmentInfo) mVtuLifeFragmentAdapter .getItem(mViewPager.getCurrentItem()); reflectActionBarChange(fragmentInfo.getActionBarStatus(), mViewPager.getCurrentItem(), false); } else { reflectActionBarChange(null, -1, false); } } public boolean isNavigationDrawerOpen() { return mDrawerLayout.isDrawerOpen(mMenuDrawer); } }