package com.marverenic.music.activity; import android.media.AudioManager; import android.os.Bundle; import android.support.annotation.IdRes; import android.support.annotation.LayoutRes; import android.support.design.widget.Snackbar; import android.support.v7.app.AlertDialog; import android.support.v7.widget.Toolbar; import android.text.Html; import android.text.method.LinkMovementMethod; import android.view.MenuItem; import android.view.View; import android.widget.CheckBox; import android.widget.TextView; import com.marverenic.music.JockeyApplication; import com.marverenic.music.R; import com.marverenic.music.data.annotations.AccentTheme; import com.marverenic.music.data.annotations.PrimaryTheme; import com.marverenic.music.data.store.PreferenceStore; import com.marverenic.music.data.store.ThemeStore; import com.marverenic.music.player.PlayerController; import com.trello.rxlifecycle.components.support.RxAppCompatActivity; import javax.inject.Inject; import timber.log.Timber; public abstract class BaseActivity extends RxAppCompatActivity { // Used when resuming the Activity to respond to a potential theme change @PrimaryTheme private int mPrimaryColor; @AccentTheme private int mAccentColor; @Inject PreferenceStore _mPreferenceStore; @Inject ThemeStore _mThemeStore; @Inject PlayerController _mPlayerController; /** * @inheritDoc */ @Override public void onCreate(Bundle savedInstanceState) { JockeyApplication.getComponent(this).injectBaseActivity(this); _mThemeStore.setTheme(this); mPrimaryColor = _mPreferenceStore.getPrimaryColor(); mAccentColor = _mPreferenceStore.getAccentColor(); super.onCreate(savedInstanceState); setVolumeControlStream(AudioManager.STREAM_MUSIC); if (_mPreferenceStore.showFirstStart()) { showFirstRunDialog(); } _mPlayerController.getInfo() .compose(bindToLifecycle()) .subscribe(this::showSnackbar, throwable -> { Timber.e(throwable, "Failed to show info message"); }); _mPlayerController.getError() .compose(bindToLifecycle()) .subscribe(this::showSnackbar, throwable -> { Timber.e(throwable, "Failed to show error message"); }); } private void showFirstRunDialog() { View messageView = getLayoutInflater().inflate(R.layout.alert_pref, null); TextView message = (TextView) messageView.findViewById(R.id.pref_alert_content); CheckBox pref = (CheckBox) messageView.findViewById(R.id.pref_alert_option); message.setText(Html.fromHtml(getString(R.string.first_launch_detail))); message.setMovementMethod(LinkMovementMethod.getInstance()); pref.setChecked(true); pref.setText(R.string.enable_additional_logging_detailed); new AlertDialog.Builder(this) .setTitle(R.string.first_launch_title) .setView(messageView) .setPositiveButton(R.string.action_agree, (dialog, which) -> { _mPreferenceStore.setAllowLogging(pref.isChecked()); _mPreferenceStore.setShowFirstStart(false); }) .setCancelable(false) .show(); } /** * @inheritDoc */ @Override public void setContentView(@LayoutRes int layoutResId) { super.setContentView(layoutResId); setupToolbar(); } protected void setupToolbar() { Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); if (toolbar != null) { setSupportActionBar(toolbar); if (getSupportActionBar() != null) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); } } } /** * @inheritDoc */ @Override public void onResume() { super.onResume(); // If the theme was changed since this Activity was created, or the automatic day/night // theme has changed state, recreate this activity _mThemeStore.setTheme(this); boolean primaryDiff = mPrimaryColor != _mPreferenceStore.getPrimaryColor(); boolean accentDiff = mAccentColor != _mPreferenceStore.getAccentColor(); if (primaryDiff || accentDiff) { recreate(); } } /** * @inheritDoc */ @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { finish(); return true; } return super.onOptionsItemSelected(item); } /** * @inheritDoc */ @Override public void onBackPressed() { Timber.v("onBackPressed"); super.onBackPressed(); finish(); } @IdRes protected int getSnackbarContainerViewId() { return R.id.list; } protected void showSnackbar(String message) { View content = findViewById(getSnackbarContainerViewId()); if (content == null) { content = findViewById(android.R.id.content); } Snackbar.make(content, message, Snackbar.LENGTH_LONG).show(); } }