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