package com.fastaccess.ui.base; import android.content.Intent; import android.os.Bundle; import android.support.annotation.DrawableRes; import android.support.annotation.LayoutRes; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.StringRes; import android.support.design.widget.AppBarLayout; import android.support.v7.app.AppCompatDelegate; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.webkit.CookieManager; import android.widget.Toast; import com.fastaccess.App; import com.fastaccess.BuildConfig; import com.fastaccess.R; import com.fastaccess.data.dao.model.Login; import com.fastaccess.helper.AppHelper; import com.fastaccess.helper.InputHelper; import com.fastaccess.helper.PrefGetter; import com.fastaccess.helper.ViewHelper; import com.fastaccess.ui.base.mvp.BaseMvp; import com.fastaccess.ui.base.mvp.presenter.BasePresenter; import com.fastaccess.ui.modules.login.LoginView; import com.fastaccess.ui.widgets.dialog.ProgressDialogFragment; import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.AdView; import com.google.android.gms.ads.MobileAds; import net.grandcentrix.thirtyinch.TiActivity; import butterknife.BindView; import butterknife.ButterKnife; import es.dmoral.toasty.Toasty; import icepick.Icepick; import icepick.State; /** * Created by Kosh on 24 May 2016, 8:48 PM */ public abstract class BaseActivity> extends TiActivity implements BaseMvp.FAView { @State boolean isProgressShowing; @Nullable @BindView(R.id.toolbar) Toolbar toolbar; @Nullable @BindView(R.id.appbar) AppBarLayout shadowView; @Nullable @BindView(R.id.adView) AdView adView; private Toast toast; @LayoutRes protected abstract int layout(); protected abstract boolean isTransparent(); protected abstract boolean canBack(); protected abstract boolean isSecured(); @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); Icepick.saveInstanceState(this, outState); } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { setupTheme(); super.onCreate(savedInstanceState); if (layout() != 0) { setContentView(layout()); ButterKnife.bind(this); } if (!isSecured()) { if (!isLoggedIn()) { startActivity(new Intent(this, LoginView.class)); finish(); return; } } Icepick.setDebug(BuildConfig.DEBUG); if (savedInstanceState != null && !savedInstanceState.isEmpty()) { Icepick.restoreInstanceState(this, savedInstanceState); } setupToolbarAndStatusBar(toolbar); showHideAds(); } @Override protected void onResume() { super.onResume(); if (adView != null && adView.isShown()) { adView.resume(); } } @Override protected void onPause() { if (adView != null && adView.isShown()) { adView.pause(); } super.onPause(); } @Override public boolean onCreateOptionsMenu(Menu menu) { return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (canBack()) { if (item.getItemId() == android.R.id.home) { onBackPressed(); return true; } } return super.onOptionsItemSelected(item); } @Override protected void onDestroy() { if (adView != null && adView.isShown()) { adView.destroy(); } super.onDestroy(); } @Override public void onDialogDismissed() { }//pass @Override public void onMessageDialogActionClicked(boolean isOk, @Nullable Bundle bundle) { }//pass @Override public void showMessage(@StringRes int titleRes, @StringRes int msgRes) { showMessage(getString(titleRes), getString(msgRes)); } @Override public void showMessage(@NonNull String titleRes, @NonNull String msgRes) { hideProgress(); if (toast != null) toast.cancel(); toast = titleRes.equals(getString(R.string.error)) ? Toasty.error(getApplicationContext(), msgRes, Toast.LENGTH_LONG) : Toasty.info(getApplicationContext(), msgRes, Toast.LENGTH_LONG); toast.show(); } @Override public void showErrorMessage(@NonNull String msgRes) { showMessage(getString(R.string.error), msgRes); } @Override public boolean isLoggedIn() { return !InputHelper.isEmpty(PrefGetter.getToken()) && Login.getUser() != null; } @Override public void showProgress(@StringRes int resId) { String msg = getString(R.string.in_progress); if (resId != 0) { msg = getString(resId); } if (!isProgressShowing) { ProgressDialogFragment fragment = (ProgressDialogFragment) AppHelper.getFragmentByTag(getSupportFragmentManager(), ProgressDialogFragment.TAG); if (fragment == null) { isProgressShowing = true; fragment = ProgressDialogFragment.newInstance(msg, false); fragment.show(getSupportFragmentManager(), ProgressDialogFragment.TAG); } } } @Override public void hideProgress() { ProgressDialogFragment fragment = (ProgressDialogFragment) AppHelper.getFragmentByTag(getSupportFragmentManager(), ProgressDialogFragment.TAG); if (fragment != null) { isProgressShowing = false; fragment.dismiss(); } } @Override public void onRequireLogin() { Toasty.warning(this, getString(R.string.unauthorized_user), Toast.LENGTH_LONG).show(); CookieManager.getInstance().removeAllCookies(null); PrefGetter.clear(); App.getInstance().getDataStore() .delete(Login.class) .get() .toSingle() .toBlocking() .value(); recreate(); } private void setupToolbarAndStatusBar(@Nullable Toolbar toolbar) { changeStatusBarColor(isTransparent()); if (toolbar != null) { setSupportActionBar(toolbar); if (canBack()) { if (getSupportActionBar() != null) { getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_back); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } } } } protected void setToolbarIcon(@DrawableRes int res) { if (getSupportActionBar() != null) { getSupportActionBar().setHomeAsUpIndicator(res); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } } protected void showHideAds() { if (adView != null) { boolean isAdsEnabled = PrefGetter.isAdsEnabled(); if (isAdsEnabled) { adView.setVisibility(View.VISIBLE); MobileAds.initialize(this, getString(R.string.banner_ad_unit_id)); AdRequest adRequest = new AdRequest.Builder() .addTestDevice(getString(R.string.test_device_id)) .build(); adView.loadAd(adRequest); } else { adView.destroy(); adView.setVisibility(View.GONE); } } } protected void hideShowShadow(boolean show) { if (shadowView != null) { shadowView.setElevation(show ? getResources().getDimension(R.dimen.spacing_micro) : 0.0f); } } protected void changeStatusBarColor(boolean isTransparent) { if (!isTransparent) { getWindow().setStatusBarColor(ViewHelper.getPrimaryDarkColor(this)); } } private void setupTheme() { int themeMode = PrefGetter.getThemeType(getApplicationContext()); int mode = AppCompatDelegate.MODE_NIGHT_AUTO; if (themeMode == PrefGetter.LIGHT) { mode = AppCompatDelegate.MODE_NIGHT_NO; } else if (themeMode == PrefGetter.DARK) { mode = AppCompatDelegate.MODE_NIGHT_YES; } AppCompatDelegate.setDefaultNightMode(mode); } }