Skip to content

Commit

Permalink
Fix crashes when no list is available
Browse files Browse the repository at this point in the history
  • Loading branch information
woefe committed Apr 3, 2018
1 parent a978c33 commit a172ebb
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -173,8 +173,13 @@ public boolean onCreateOptionsMenu(Menu menu) {
}

private void doShare() {
ShoppingList list = getBinder().getList(currentListName);
String text;
ShoppingList list = getBinder().getList(currentListName);

if (list == null) {
Toast.makeText(this, R.string.err_share_list, Toast.LENGTH_LONG).show();
return;
}

try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
ShoppingListMarshaller.marshall(outputStream, list);
Expand Down Expand Up @@ -209,7 +214,11 @@ public boolean onOptionsItemSelected(MenuItem item) {
return true;
case R.id.action_delete_list:
message = getString(R.string.confirm_delete_list, getTitle());
ConfirmationDialog.show(this, message, R.id.action_delete_list);
if (getBinder().hasList(currentListName)) {
ConfirmationDialog.show(this, message, R.id.action_delete_list);
} else {
Toast.makeText(this, R.string.err_cannot_delete_list, Toast.LENGTH_LONG).show();
}
return true;
case R.id.action_new_list:
NewListDialog.Builder builder = new TextInputDialog.Builder(this, NewListDialog.class);
Expand Down Expand Up @@ -243,6 +252,9 @@ public boolean onOptionsItemSelected(MenuItem item) {

private void sort(final boolean ascending) {
ShoppingList list = getBinder().getList(currentListName);
if (list == null) {
return;
}
list.sort(new Comparator<ListItem>() {
@Override
public int compare(ListItem o1, ListItem o2) {
Expand All @@ -254,6 +266,9 @@ public int compare(ListItem o1, ListItem o2) {

private void sortByChecked(final boolean checkedFirst) {
ShoppingList list = getBinder().getList(currentListName);
if (list == null) {
return;
}
list.sort(new Comparator<ListItem>() {
@Override
public int compare(ListItem o1, ListItem o2) {
Expand All @@ -278,9 +293,13 @@ public void onPositiveButtonClicked(int action) {
}
break;
case R.id.action_delete_list:
getBinder().removeList(getTitle().toString());
updateDrawer();
selectList(0);
boolean success = getBinder().removeList(getTitle().toString());
if (!success) {
Toast.makeText(this, R.string.err_cannot_delete_list, Toast.LENGTH_LONG).show();
} else {
updateDrawer();
selectList(0);
}
break;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,15 @@

package com.woefe.shoppinglist.shoppinglist;

import android.support.annotation.NonNull;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;

public class ShoppingListMarshaller {
public static void marshall(OutputStream stream, ShoppingList list) throws IOException {
public static void marshall(@NonNull OutputStream stream, @NonNull ShoppingList list) throws IOException {

try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stream))) {
writer.write("[ ");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,10 +88,11 @@ public void addList(String listName) throws ShoppingListException {
manager.addList(listName);
}

public void removeList(String listName) {
manager.removeList(listName);
public boolean removeList(String listName) {
return manager.removeList(listName);
}

@Nullable
public ShoppingList getList(String listName) {
return manager.getList(listName);
}
Expand All @@ -101,7 +102,7 @@ public boolean hasList(String listName) {
}

public String[] getListNames() {
String[] names = manager.getListNames().toArray(new String[0]);
String[] names = manager.getListNames().toArray(new String[manager.size()]);
Arrays.sort(names, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
*/
class ShoppingListsManager {
private static final String TAG = ShoppingListsManager.class.getSimpleName();
public static final String FILE_ENDING = ".lst";
private static final String FILE_ENDING = ".lst";

private final Map<String, ShoppingListMetadata> trashcan = new HashMap<>();
private final MetadataContainer shoppingListsMetadata = new MetadataContainer();
Expand Down Expand Up @@ -144,7 +144,7 @@ private void loadFromDirectory(String directory) {
}
}

private void addShoppingList(ShoppingList list, String filename) {
private ShoppingListMetadata addShoppingList(ShoppingList list, String filename) {
final ShoppingListMetadata metadata = new ShoppingListMetadata(list, filename);
list.addListener(new ShoppingList.ShoppingListListener() {
@Override
Expand All @@ -154,6 +154,7 @@ public void onShoppingListUpdate(ShoppingList list) {
});
setupObserver(metadata);
shoppingListsMetadata.add(metadata);
return metadata;
}

private void setupObserver(final ShoppingListMetadata metadata) {
Expand Down Expand Up @@ -203,17 +204,26 @@ void addList(String name) throws ShoppingListException {
}

String filename = new File(this.directory, name + FILE_ENDING).getPath();
addShoppingList(new ShoppingList(name), filename);
shoppingListsMetadata.getByName(name).isDirty = true;
ShoppingListMetadata metadata = addShoppingList(new ShoppingList(name), filename);
metadata.isDirty = true;
}

void removeList(String name) {
ShoppingListMetadata toRemove = shoppingListsMetadata.removeByName(name);
trashcan.put(toRemove.shoppingList.getName(), toRemove);
boolean removeList(String name) {
if (hasList(name)) {
ShoppingListMetadata toRemove = shoppingListsMetadata.removeByName(name);
trashcan.put(toRemove.shoppingList.getName(), toRemove);
return true;
}
return false;
}

@Nullable
ShoppingList getList(String name) {
return shoppingListsMetadata.getByName(name).shoppingList;
ShoppingListMetadata metadata = shoppingListsMetadata.getByName(name);
if (metadata != null) {
return metadata.shoppingList;
}
return null;
}

Set<String> getListNames() {
Expand Down Expand Up @@ -279,6 +289,7 @@ private ShoppingListMetadata removeByFile(String filename) {
return toRemove;
}

@Nullable
private ShoppingListMetadata getByName(String name) {
return byName.get(name);
}
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,6 @@
<string name="duplicate_warning">\'%s\' is already on the list</string>
<string name="checked_first">Checked first</string>
<string name="unchecked_first">Unchecked first</string>
<string name="err_cannot_delete_list">Cannot delete list</string>
<string name="err_share_list">Cannot share list</string>
</resources>

0 comments on commit a172ebb

Please sign in to comment.