From dec245e12bc1418c1cc428ce74b14c63d7c72913 Mon Sep 17 00:00:00 2001 From: danijoo Date: Sat, 2 Jan 2016 14:05:41 +0100 Subject: [PATCH] mvp for logger warning --- .../notificationlogger/MainActivity.java | 74 +++++++++++++++++-- .../presenter/LoggerWarningPresenter.java | 23 ++++++ app/src/main/res/layout/main_activity.xml | 1 + app/src/main/res/values/strings.xml | 3 + 4 files changed, 94 insertions(+), 7 deletions(-) create mode 100644 app/src/main/java/net/headlezz/notificationlogger/presenter/LoggerWarningPresenter.java diff --git a/app/src/main/java/net/headlezz/notificationlogger/MainActivity.java b/app/src/main/java/net/headlezz/notificationlogger/MainActivity.java index 169eff9..a95025d 100644 --- a/app/src/main/java/net/headlezz/notificationlogger/MainActivity.java +++ b/app/src/main/java/net/headlezz/notificationlogger/MainActivity.java @@ -1,22 +1,25 @@ package net.headlezz.notificationlogger; import android.content.Intent; +import android.content.SharedPreferences; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.design.widget.FloatingActionButton; +import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; +import android.support.v7.preference.PreferenceManager; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; import net.headlezz.notificationlogger.createnotification.NotificationCreationFragment; +import net.headlezz.notificationlogger.presenter.LoggerWarningPresenter; import butterknife.Bind; import butterknife.ButterKnife; -import timber.log.Timber; -public class MainActivity extends AppCompatActivity { +public class MainActivity extends AppCompatActivity implements SharedPreferences.OnSharedPreferenceChangeListener, LoggerWarningPresenter.LoggerWarningView { @Bind(R.id.toolbar) Toolbar mToolbar; @@ -24,14 +27,21 @@ public class MainActivity extends AppCompatActivity { @Bind(R.id.main_menu_fab_add_notification) FloatingActionButton mFAB; + SharedPreferences mSharedPrefs; + + LoggerWarningPresenter mLoggerWarningPresenter; + Snackbar mLoggerWarningView; + @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); ButterKnife.bind(this); - setSupportActionBar(mToolbar); + mSharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); + mLoggerWarningPresenter = new LoggerWarningPresenter(this); + mFAB.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -39,7 +49,7 @@ public class MainActivity extends AppCompatActivity { } }); - if(getSupportFragmentManager().findFragmentById(R.id.main_menu_fragment_container) == null) { + if (getSupportFragmentManager().findFragmentById(R.id.main_menu_fragment_container) == null) { getSupportFragmentManager().beginTransaction() .add(R.id.main_menu_fragment_container, new NotificationListFragment()) .commit(); @@ -53,6 +63,19 @@ public class MainActivity extends AppCompatActivity { mFAB.setVisibility(View.GONE); } + @Override + protected void onStart() { + super.onStart(); + mSharedPrefs.registerOnSharedPreferenceChangeListener(this); + mLoggerWarningPresenter.setCurrentLoggerPreference(mSharedPrefs.getBoolean("pref_logging_enabled", true)); + } + + @Override + protected void onStop() { + super.onStop(); + mSharedPrefs.unregisterOnSharedPreferenceChangeListener(this); + } + @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main_activity, menu); @@ -61,11 +84,11 @@ public class MainActivity extends AppCompatActivity { @Override public boolean onOptionsItemSelected(MenuItem item) { - if(item.getItemId() == R.id.menu_settings) { + if (item.getItemId() == R.id.menu_settings) { Intent intent = new Intent(this, PreferenceActivity.class); startActivity(intent); return true; - } else if(item.getItemId() == android.R.id.home) { + } else if (item.getItemId() == android.R.id.home) { onBackPressed(); } return super.onOptionsItemSelected(item); @@ -87,11 +110,48 @@ public class MainActivity extends AppCompatActivity { @Override public void onBackPressed() { // make fab visible and change title if we come back to first fragment - if(getSupportFragmentManager().getBackStackEntryCount() == 1) { + if (getSupportFragmentManager().getBackStackEntryCount() == 1) { mFAB.setVisibility(View.VISIBLE); getSupportActionBar().setTitle(getString(R.string.app_name)); getSupportActionBar().setDisplayHomeAsUpEnabled(false); } super.onBackPressed(); } + + @Override + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { + if (key.equals("pref_logging_enabled")) + mLoggerWarningPresenter.setCurrentLoggerPreference(sharedPreferences.getBoolean("pref_logging_enabled", true)); + } + + @Override + public void showLoggerWarning() { + if (mLoggerWarningView == null) { + mLoggerWarningView = Snackbar.make(findViewById(R.id.viewholder), R.string.main_snack_logging_disabled_warning, Snackbar.LENGTH_INDEFINITE); + mLoggerWarningView.setAction(R.string.main_snack_logging_disabled_warning_action, new View.OnClickListener() { + @Override + public void onClick(View v) { + mSharedPrefs.edit().putBoolean("pref_logging_enabled", true).apply(); + } + }); + // fix for FAB not moving down after dismiss + mLoggerWarningView.getView().addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { + @Override + public void onViewAttachedToWindow(View v) { + } + + @Override + public void onViewDetachedFromWindow(View v) { + mFAB.setTranslationY(0); + } + }); + } + mLoggerWarningView.show(); + } + + @Override + public void hideLoggerWarning() { + if (mLoggerWarningView != null && mLoggerWarningView.isShownOrQueued()) + mLoggerWarningView.dismiss(); + } } diff --git a/app/src/main/java/net/headlezz/notificationlogger/presenter/LoggerWarningPresenter.java b/app/src/main/java/net/headlezz/notificationlogger/presenter/LoggerWarningPresenter.java new file mode 100644 index 0000000..3cfdd17 --- /dev/null +++ b/app/src/main/java/net/headlezz/notificationlogger/presenter/LoggerWarningPresenter.java @@ -0,0 +1,23 @@ +package net.headlezz.notificationlogger.presenter; + +public class LoggerWarningPresenter { + + public interface LoggerWarningView { + void showLoggerWarning(); + void hideLoggerWarning(); + } + + LoggerWarningView mView; + + public LoggerWarningPresenter(LoggerWarningView lwv) { + mView = lwv; + } + + public void setCurrentLoggerPreference(boolean loggingEnabled) { + if(loggingEnabled) + mView.hideLoggerWarning(); + else + mView.showLoggerWarning(); + } + +} diff --git a/app/src/main/res/layout/main_activity.xml b/app/src/main/res/layout/main_activity.xml index 12ae9a6..82e5d94 100644 --- a/app/src/main/res/layout/main_activity.xml +++ b/app/src/main/res/layout/main_activity.xml @@ -1,5 +1,6 @@ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1c84b09..50b4e71 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3,6 +3,9 @@ Settings Settings + Logging is disabled. + Enable + Notification Settings Support Notification Logging