Fix #140. Delete feed now works and confirmation dialog has been added.

This commit is contained in:
Mark Anderson 2013-04-09 22:45:27 +01:00
parent be73ccb81e
commit d5b33f68fe
6 changed files with 148 additions and 20 deletions

View file

@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="newsblur">NewsBlur</string>
@ -147,4 +146,5 @@
<string name="friends_comments_count">%d COMMENTS</string>
<string name="toast_marked_all_stories_as_read">All stories marked as read</string>
<string name="unknown_user">Unknown User</string>
<string name="delete_feed_message">Delete feed \&quot;%s\&quot;?</string>
</resources>

View file

@ -5,6 +5,7 @@ import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentTransaction;
import android.widget.Toast;
@ -15,6 +16,7 @@ import com.newsblur.R;
import com.newsblur.database.DatabaseConstants;
import com.newsblur.database.FeedProvider;
import com.newsblur.domain.Feed;
import com.newsblur.fragment.DeleteFeedFragment;
import com.newsblur.fragment.FeedItemListFragment;
import com.newsblur.fragment.SyncUpdateFragment;
import com.newsblur.network.APIManager;
@ -24,7 +26,11 @@ import com.newsblur.service.SyncService;
public class FeedItemsList extends ItemsList {
public static final String EXTRA_FEED = "feedId";
public static final String EXTRA_FEED_TITLE = "feedTitle";
public static final String EXTRA_FOLDER_NAME = "folderName";
private String feedId;
private String feedTitle;
private String folderName;
private APIManager apiManager;
private boolean stopLoading = false;
@ -33,7 +39,9 @@ public class FeedItemsList extends ItemsList {
super.onCreate(bundle);
apiManager = new APIManager(this);
feedId = getIntent().getStringExtra(EXTRA_FEED);
feedTitle = getIntent().getStringExtra(EXTRA_FEED_TITLE);
folderName = getIntent().getStringExtra(EXTRA_FOLDER_NAME);
final Uri feedUri = FeedProvider.FEEDS_URI.buildUpon().appendPath(feedId).build();
Cursor cursor = getContentResolver().query(feedUri, null, FeedProvider.getStorySelectionFromState(currentState), null, null);
cursor.moveToFirst();
@ -58,12 +66,8 @@ public class FeedItemsList extends ItemsList {
}
public void deleteFeed() {
setSupportProgressBarIndeterminateVisibility(true);
final Intent intent = new Intent(Intent.ACTION_SYNC, null, this, SyncService.class);
intent.putExtra(SyncService.EXTRA_STATUS_RECEIVER, syncFragment.receiver);
intent.putExtra(SyncService.SYNCSERVICE_TASK, SyncService.EXTRA_TASK_DELETE_FEED);
intent.putExtra(SyncService.EXTRA_TASK_FEED_ID, Long.parseLong(feedId));
startService(intent);
DialogFragment deleteFeedFragment = DeleteFeedFragment.newInstance(Long.parseLong(feedId), feedTitle, folderName);
deleteFeedFragment.show(fragmentManager, "dialog");
}
@Override

View file

@ -115,15 +115,6 @@ public class Main extends NbFragmentActivity implements StateChangedListener, Sy
return super.onOptionsItemSelected(item);
}
public void deleteFeed(long id, String foldername) {
setSupportProgressBarIndeterminateVisibility(true);
final Intent intent = new Intent(Intent.ACTION_SYNC, null, this, SyncService.class);
intent.putExtra(SyncService.EXTRA_STATUS_RECEIVER, syncFragment.receiver);
intent.putExtra(SyncService.SYNCSERVICE_TASK, SyncService.EXTRA_TASK_DELETE_FEED);
intent.putExtra(SyncService.EXTRA_TASK_FEED_ID, id);
startService(intent);
}
@Override
public void changedState(int state) {
folderFeedList.changeState(state);

View file

@ -0,0 +1,121 @@
package com.newsblur.fragment;
import com.newsblur.R;
import com.newsblur.activity.Main;
import com.newsblur.database.FeedProvider;
import com.newsblur.network.APIManager;
import android.app.Activity;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentManager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class DeleteFeedFragment extends DialogFragment {
private static final String FEED_ID = "feed_url";
private static final String FEED_NAME = "feed_name";
private static final String FOLDER_NAME = "folder_name";
private APIManager apiManager;
public static DeleteFeedFragment newInstance(final long feedId, final String feedName, final String folderName) {
DeleteFeedFragment frag = new DeleteFeedFragment();
Bundle args = new Bundle();
args.putLong(FEED_ID, feedId);
args.putString(FEED_NAME, feedName);
args.putString(FOLDER_NAME, folderName);
frag.setArguments(args);
return frag;
}
private FragmentManager fragmentManager;
private SyncUpdateFragment syncFragment;
@Override
public void onCreate(Bundle savedInstanceState) {
setStyle(DialogFragment.STYLE_NO_TITLE, R.style.dialog);
super.onCreate(savedInstanceState);
fragmentManager = super.getFragmentManager();
syncFragment = (SyncUpdateFragment) fragmentManager.findFragmentByTag(SyncUpdateFragment.TAG);
if (syncFragment == null) {
syncFragment = new SyncUpdateFragment();
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final String deleteFeedString = getResources().getString(R.string.delete_feed_message);
apiManager = new APIManager(getActivity());
View v = inflater.inflate(R.layout.fragment_confirm_dialog, null);
TextView messageView = (TextView) v.findViewById(R.id.dialog_message);
messageView.setText(String.format(deleteFeedString, getArguments().getString(FEED_NAME)));
Button okayButton = (Button) v.findViewById(R.id.dialog_button_okay);
okayButton.setOnClickListener(new OnClickListener() {
public void onClick(final View v) {
v.setEnabled(false);
new AsyncTask<Void, Void, Boolean>() {
@Override
protected Boolean doInBackground(Void... arg) {
long feedId = getArguments().getLong(FEED_ID);
String folderName = getArguments().getString(FOLDER_NAME);
Log.w("mark", "feedID = " + feedId);
if (apiManager.deleteFeed(feedId, folderName)) {
Uri feedUri = FeedProvider.FEEDS_URI.buildUpon().appendPath(Long.toString(feedId)).build();
DeleteFeedFragment.this.getActivity().getContentResolver().delete(feedUri, null, null);
return true;
}
else {
return false;
}
}
@Override
protected void onPostExecute(Boolean result) {
Activity activity = DeleteFeedFragment.this.getActivity();
if (result) {
Toast.makeText(activity, "Deleted feed", Toast.LENGTH_SHORT).show();
DeleteFeedFragment.this.dismiss();
// if called from main view then refresh otherwise it was
// called from the feed view so finish
if (activity instanceof Main) {
((Main)activity).updateAfterSync();
}
else {
activity.finish();
}
} else {
Toast.makeText(activity, getResources().getString(R.string.error_deleting_feed), Toast.LENGTH_LONG).show();
DeleteFeedFragment.this.dismiss();
}
};
}.execute();
}
});
Button cancelButton = (Button) v.findViewById(R.id.dialog_button_cancel);
cancelButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
DeleteFeedFragment.this.dismiss();
}
});
return v;
}
}

View file

@ -11,6 +11,7 @@ import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.ContextMenu;
@ -31,7 +32,6 @@ import com.newsblur.R;
import com.newsblur.activity.AllStoriesItemsList;
import com.newsblur.activity.FeedItemsList;
import com.newsblur.activity.ItemsList;
import com.newsblur.activity.Main;
import com.newsblur.activity.NewsBlurApplication;
import com.newsblur.activity.SocialFeedItemsList;
import com.newsblur.database.DatabaseConstants;
@ -183,8 +183,14 @@ public class FolderListFragment extends Fragment implements OnGroupClickListener
}.execute(Long.toString(info.id));
return true;
} else if (item.getItemId() == R.id.menu_delete_feed) {
Toast.makeText(getActivity(), "Deleted feed", Toast.LENGTH_SHORT).show();
((Main) getActivity()).deleteFeed(info.id, null);
int childPosition = ExpandableListView.getPackedPositionChild(info.packedPosition);
int groupPosition = ExpandableListView.getPackedPositionGroup(info.packedPosition);
Cursor childCursor = folderAdapter.getChild(groupPosition, childPosition);
String feedTitle = childCursor.getString(childCursor.getColumnIndex(DatabaseConstants.FEED_TITLE));
Cursor folderCursor = ((MixedExpandableListAdapter) list.getExpandableListAdapter()).getGroup(groupPosition);
String folderName = folderCursor.getString(folderCursor.getColumnIndex(DatabaseConstants.FOLDER_NAME));
DialogFragment deleteFeedFragment = DeleteFeedFragment.newInstance(info.id, feedTitle, folderName);
deleteFeedFragment.show(getFragmentManager(), "dialog");
return true;
} else if (item.getItemId() == R.id.menu_mark_folder_as_read) {
int groupPosition = ExpandableListView.getPackedPositionGroup(info.packedPosition);
@ -329,7 +335,12 @@ public class FolderListFragment extends Fragment implements OnGroupClickListener
final Intent intent = new Intent(getActivity(), FeedItemsList.class);
Cursor childCursor = folderAdapter.getChild(groupPosition, childPosition);
String feedId = childCursor.getString(childCursor.getColumnIndex(DatabaseConstants.FEED_ID));
String feedTitle = childCursor.getString(childCursor.getColumnIndex(DatabaseConstants.FEED_TITLE));
final Cursor folderCursor = ((MixedExpandableListAdapter) list.getExpandableListAdapter()).getGroup(groupPosition);
String folderName = folderCursor.getString(folderCursor.getColumnIndex(DatabaseConstants.FOLDER_NAME));
intent.putExtra(FeedItemsList.EXTRA_FEED, feedId);
intent.putExtra(FeedItemsList.EXTRA_FEED_TITLE, feedTitle);
intent.putExtra(FeedItemsList.EXTRA_FOLDER_NAME, folderName);
intent.putExtra(ItemsList.EXTRA_STATE, currentState);
getActivity().startActivityForResult(intent, FEEDCHECK );
}

View file

@ -173,6 +173,7 @@ public class APIClient {
}
final PrintWriter printWriter = new PrintWriter(connection.getOutputStream());
Log.d(this.getClass().getName(), "parameterString = " + parameterString);
printWriter.print(parameterString);
printWriter.close();