FastHub/app/src/main/java/com/fastaccess/ui/base/BaseActivity.java

253 lines
8.3 KiB
Java

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<V extends BaseMvp.FAView, P extends BasePresenter<V>> extends TiActivity<P, V> 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);
}
}