package com.orgzly.android.ui;
import android.content.BroadcastReceiver;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.content.res.TypedArray;
import android.os.Build;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.View;
import com.orgzly.BuildConfig;
import com.orgzly.R;
import com.orgzly.android.Broadcasts;
import com.orgzly.android.prefs.AppPreferences;
import com.orgzly.android.ui.util.ActivityUtils;
import com.orgzly.android.util.AppPermissions;
import com.orgzly.android.util.LogUtils;
/**
* Ash nazg durbatulûk, ash nazg gimbatul,
* ash nazg thrakatulûk agh burzum-ishi krimpatul.
*
* ("Extended by all activities.")
*/
public class CommonActivity extends AppCompatActivity {
private static final String TAG = CommonActivity.class.getName();
protected Snackbar snackbar;
private void dismissSnackbar() {
if (snackbar != null) {
snackbar.dismiss();
snackbar = null;
}
}
public void showSimpleSnackbarLong(int resId) {
showSimpleSnackbarLong(getString(resId));
}
public void showSimpleSnackbarLong(String message) {
View view = findViewById(R.id.main_content);
if (view != null) {
showSnackbar(Snackbar.make(view, message, Snackbar.LENGTH_LONG));
}
}
public void showSnackbar(Snackbar s) {
dismissSnackbar();
/* Close drawer before displaying snackbar. */
DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawerLayout != null) {
drawerLayout.closeDrawer(GravityCompat.START);
}
snackbar = s;
/* Set background color from attribute. */
int bgColor = getSnackbarBackgroundColor();
snackbar.getView().setBackgroundColor(bgColor);
snackbar.show();
}
private int getSnackbarBackgroundColor() {
TypedArray arr = obtainStyledAttributes(R.styleable.ColorScheme);
int color = arr.getColor(R.styleable.ColorScheme_snackbar_bg_color, 0);
arr.recycle();
return color;
}
@Override
public void onBackPressed() {
super.onBackPressed();
dismissSnackbar();
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
boolean consumed = super.dispatchTouchEvent(ev);
if (ev.getAction() == MotionEvent.ACTION_UP) {
dismissSnackbar();
}
return consumed;
}
/**
* Set theme and styles.
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
if (BuildConfig.LOG_DEBUG) LogUtils.d(TAG, savedInstanceState);
setupTheme();
setupLayoutDirection();
super.onCreate(savedInstanceState);
}
private void setupLayoutDirection() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
String setting = AppPreferences.layoutDirection(this);
int layoutDirection = View.LAYOUT_DIRECTION_LOCALE;
if (getString(R.string.pref_value_layout_direction_ltr).equals(setting)) {
layoutDirection = View.LAYOUT_DIRECTION_LTR;
} else if (getString(R.string.pref_value_layout_direction_rtl).equals(setting)) {
layoutDirection = View.LAYOUT_DIRECTION_RTL;
}
getWindow().getDecorView().setLayoutDirection(layoutDirection);
}
}
private void setupTheme() {
/*
* Set theme - color scheme.
*/
String colorScheme = AppPreferences.colorScheme(this);
if (getString(R.string.pref_value_color_scheme_dark).equals(colorScheme)) {
setTheme(R.style.AppDarkTheme_Dark);
} else if (getString(R.string.pref_value_color_scheme_black).equals(colorScheme)) {
setTheme(R.style.AppDarkTheme_Black);
} else {
setTheme(R.style.AppLightTheme_Light);
}
/*
* Apply font style based on preferences.
*/
String fontSizePref = AppPreferences.fontSize(this);
if (getString(R.string.pref_value_font_size_large).equals(fontSizePref)) {
getTheme().applyStyle(R.style.FontSize_Large, true);
} else if (getString(R.string.pref_value_font_size_small).equals(fontSizePref)) {
getTheme().applyStyle(R.style.FontSize_Small, true);
}
}
protected Runnable actionAfterPermissionGrant;
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case AppPermissions.FOR_BOOK_EXPORT: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if (actionAfterPermissionGrant != null) {
actionAfterPermissionGrant.run();
actionAfterPermissionGrant = null;
}
}
}
}
}
@Override
protected void onResume() {
super.onResume();
if (BuildConfig.LOG_DEBUG) LogUtils.d(TAG, "");
}
public void popBackStackAndCloseKeyboard() {
getSupportFragmentManager().popBackStack();
ActivityUtils.closeSoftKeyboard(this);
}
}