diff --git a/app/src/main/java/org/isoron/uhabits/ui/BaseActivity.java b/app/src/main/java/org/isoron/uhabits/ui/BaseActivity.java index dabaa86fb..0009a82d4 100644 --- a/app/src/main/java/org/isoron/uhabits/ui/BaseActivity.java +++ b/app/src/main/java/org/isoron/uhabits/ui/BaseActivity.java @@ -24,7 +24,6 @@ import android.os.*; import android.support.annotation.*; import android.support.v7.app.*; import android.view.*; -import android.widget.*; import org.isoron.uhabits.utils.*; @@ -52,8 +51,6 @@ abstract public class BaseActivity extends AppCompatActivity @Nullable private BaseScreen screen; - private Toast toast; - @Override public boolean onCreateOptionsMenu(@Nullable Menu menu) { @@ -91,20 +88,6 @@ abstract public class BaseActivity extends AppCompatActivity dialog.show(); } - /** - * Shows a message on the screen. - * - * @param stringId the string resource id for this message. - */ - public void showMessage(@StringRes Integer stringId) - { - if (stringId == null) return; - if (toast == null) - toast = Toast.makeText(this, stringId, Toast.LENGTH_SHORT); - else toast.setText(stringId); - toast.show(); - } - @Override public void uncaughtException(@Nullable Thread thread, @Nullable Throwable ex) diff --git a/app/src/main/java/org/isoron/uhabits/ui/BaseScreen.java b/app/src/main/java/org/isoron/uhabits/ui/BaseScreen.java index 8f9db4821..d16a93cbe 100644 --- a/app/src/main/java/org/isoron/uhabits/ui/BaseScreen.java +++ b/app/src/main/java/org/isoron/uhabits/ui/BaseScreen.java @@ -25,10 +25,12 @@ import android.graphics.drawable.*; import android.net.*; import android.os.*; import android.support.annotation.*; +import android.support.design.widget.*; import android.support.v7.app.*; import android.support.v7.view.ActionMode; -import android.support.v7.widget.*; +import android.support.v7.widget.Toolbar; import android.view.*; +import android.widget.*; import org.isoron.uhabits.*; import org.isoron.uhabits.utils.*; @@ -52,6 +54,8 @@ public abstract class BaseScreen @Nullable private BaseSelectionMenu selectionMenu; + private Snackbar snackbar; + public BaseScreen(@NonNull BaseActivity activity) { this.activity = activity; @@ -90,15 +94,6 @@ public abstract class BaseScreen } } - /** - * Ends the current selection operation. - */ - public void finishSelection() - { - if (selectionMenu == null) return; - selectionMenu.finish(); - } - /** * Notifies the screen that its contents should be updated. */ @@ -165,9 +160,23 @@ public abstract class BaseScreen this.selectionMenu = menu; } - public void showMessage(@StringRes int stringId) + /** + * Shows a message on the screen. + * + * @param stringId the string resource id for this message. + */ + public void showMessage(@StringRes Integer stringId) { - activity.showMessage(stringId); + if (stringId == null || rootView == null) return; + if (snackbar == null) + { + snackbar = Snackbar.make(rootView, stringId, Snackbar.LENGTH_SHORT); + int tvId = android.support.design.R.id.snackbar_text; + TextView tv = (TextView) snackbar.getView().findViewById(tvId); + tv.setTextColor(Color.WHITE); + } + else snackbar.setText(stringId); + snackbar.show(); } public void showSendEmailScreen(@StringRes int toId, diff --git a/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsActivity.java b/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsActivity.java index 84365edfc..6440abe9d 100644 --- a/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsActivity.java +++ b/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsActivity.java @@ -76,6 +76,7 @@ public class ListHabitsActivity extends BaseActivity @Override protected void onPause() { + screen.onDettached(); adapter.cancelRefresh(); super.onPause(); } @@ -84,6 +85,7 @@ public class ListHabitsActivity extends BaseActivity protected void onResume() { adapter.refresh(); + screen.onAttached(); rootView.postInvalidate(); super.onResume(); } diff --git a/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsScreen.java b/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsScreen.java index 807b7bcf9..e34fd89c6 100644 --- a/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsScreen.java +++ b/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsScreen.java @@ -24,6 +24,7 @@ import android.os.*; import android.support.annotation.*; import org.isoron.uhabits.*; +import org.isoron.uhabits.commands.*; import org.isoron.uhabits.intents.*; import org.isoron.uhabits.io.*; import org.isoron.uhabits.models.*; @@ -36,6 +37,7 @@ import org.isoron.uhabits.utils.*; import java.io.*; public class ListHabitsScreen extends BaseScreen + implements CommandRunner.Listener { @Nullable ListHabitsController controller; @@ -49,6 +51,8 @@ public class ListHabitsScreen extends BaseScreen @NonNull private final DirFinder dirFinder; + private final CommandRunner commandRunner; + public ListHabitsScreen(@NonNull BaseActivity activity, @NonNull ListHabitsRootView rootView) { @@ -59,6 +63,24 @@ public class ListHabitsScreen extends BaseScreen dialogFactory = component.getDialogFactory(); intentFactory = component.getIntentFactory(); dirFinder = component.getDirFinder(); + commandRunner = component.getCommandRunner(); + } + + public void onAttached() + { + commandRunner.addListener(this); + } + + @Override + public void onCommandExecuted(@NonNull Command command, + @Nullable Long refreshKey) + { + showMessage(command.getExecuteStringId()); + } + + public void onDettached() + { + commandRunner.removeListener(this); } @Override @@ -151,7 +173,7 @@ public class ListHabitsScreen extends BaseScreen if (dir == null) { - activity.showMessage(R.string.could_not_import); + showMessage(R.string.could_not_import); return; } @@ -185,7 +207,7 @@ public class ListHabitsScreen extends BaseScreen private void refreshTheme() { new Handler().postDelayed(() -> { - Intent intent = new Intent(activity, ListHabitsScreen.class); + Intent intent = new Intent(activity, ListHabitsActivity.class); activity.finish(); activity.overridePendingTransition(android.R.anim.fade_in, diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 52a159689..465f4e396 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -30,15 +30,15 @@ Add habit Change color - Habit created. - Habits deleted. - Habits restored. - Nothing to undo. - Nothing to redo. - Habit changed. - Habit changed back. - Habits archived. - Habits unarchived. + Habit created + Habits deleted + Habits restored + Nothing to undo + Nothing to redo + Habit changed + Habit changed back + Habits archived + Habits unarchived Overview diff --git a/app/src/test/java/org/isoron/uhabits/ui/habits/list/ListHabitsScreenTest.java b/app/src/test/java/org/isoron/uhabits/ui/habits/list/ListHabitsScreenTest.java index ae5d532ac..a3f5f904b 100644 --- a/app/src/test/java/org/isoron/uhabits/ui/habits/list/ListHabitsScreenTest.java +++ b/app/src/test/java/org/isoron/uhabits/ui/habits/list/ListHabitsScreenTest.java @@ -192,7 +192,6 @@ public class ListHabitsScreenTest extends BaseUnitTest { when(dirFinder.findStorageDir(any())).thenReturn(null); screen.showImportScreen(); - verify(activity).showMessage(R.string.could_not_import); } @Test