Skip to content

Commit

Permalink
save state in ChannelFragment
Browse files Browse the repository at this point in the history
  • Loading branch information
brussee committed Oct 20, 2016
1 parent a99f548 commit d3553b2
Show file tree
Hide file tree
Showing 14 changed files with 282 additions and 163 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,19 @@

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.SearchView;
import android.text.TextUtils;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;

import com.jakewharton.rxbinding.support.v7.widget.RxSearchView;
import com.jakewharton.rxbinding.support.v7.widget.SearchViewQueryTextEvent;
import org.tribler.android.restapi.json.SubscribedAck;
import org.tribler.android.restapi.json.UnsubscribedAck;

import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;

public class ChannelActivity extends BaseActivity {

public static final String ACTION_TOGGLE_SUBSCRIBED = "org.tribler.android.channel.TOGGLE_SUBSCRIBED";
public static final String ACTION_SUBSCRIBE = "org.tribler.android.channel.SUBSCRIBE";
public static final String ACTION_UNSUBSCRIBE = "org.tribler.android.channel.UNSUBSCRIBE";

public static final String EXTRA_DISPERSY_CID = "org.tribler.android.channel.dispersy.CID";
public static final String EXTRA_NAME = "org.tribler.android.channel.NAME";
Expand Down Expand Up @@ -49,114 +46,87 @@ protected void onDestroy() {
_fragment = null;
}

/**
* {@inheritDoc}
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
// Add items to the action bar (if it is present)
getMenuInflater().inflate(R.menu.activity_channel_menu, menu);

// Search button
MenuItem btnFilter = menu.findItem(R.id.btn_filter_channel);
SearchView searchView = (SearchView) btnFilter.getActionView();

// Set search hint
searchView.setQueryHint(getText(R.string.action_search_in_channel));

// Filter on query text change
rxMenuSubs.add(RxSearchView.queryTextChangeEvents(searchView)
.subscribe(new Observer<SearchViewQueryTextEvent>() {

public void onNext(SearchViewQueryTextEvent event) {
_fragment.getAdapter().getFilter().filter(event.queryText());
}

public void onCompleted() {
}

public void onError(Throwable e) {
Log.e("onCreateOptionsMenu", "queryTextChangeEvents", e);
}
}));

return true;
}

/**
* {@inheritDoc}
*/
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);

Intent intent = getIntent();
String name = intent.getStringExtra(EXTRA_NAME);
boolean subscribed = intent.getBooleanExtra(ChannelActivity.EXTRA_SUBSCRIBED, false);

// Toggle subscribed icon
MenuItem item = menu.findItem(R.id.btn_channel_toggle_subscribed);
if (subscribed) {
item.setIcon(R.drawable.ic_action_star);
item.setTitle(R.string.action_unsubscribe);
} else {
item.setIcon(R.drawable.ic_action_star_outline);
item.setTitle(R.string.action_subscribe);
}

// Set title
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
if (!subscribed) {
name = getString(R.string.title_channel_preview) + ": " + name;
}
actionBar.setTitle(name);
}

return true;
}

protected void handleIntent(Intent intent) {
String action = intent.getAction();
if (TextUtils.isEmpty(action)) {
return;
}
String dispersyCid = intent.getStringExtra(EXTRA_DISPERSY_CID);
String name = intent.getStringExtra(EXTRA_NAME);
boolean subscribed = intent.getBooleanExtra(EXTRA_SUBSCRIBED, false);
final String dispersyCid = intent.getStringExtra(EXTRA_DISPERSY_CID);

switch (action) {

case Intent.ACTION_GET_CONTENT:
// ChannelFragment loads onCreate
_fragment.loadTorrents();
return;

case ACTION_TOGGLE_SUBSCRIBED:
if (subscribed) {
_fragment.unsubscribe(dispersyCid, subscribed, name);
} else {
_fragment.subscribe(dispersyCid, subscribed, name);
}
// Update view
intent.putExtra(EXTRA_SUBSCRIBED, !subscribed);
invalidateOptionsMenu();

// Flag modification
setResult(RESULT_FIRST_USER, intent);
case ACTION_SUBSCRIBE:
rxSubs.add(_fragment.subscribe()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<SubscribedAck>() {

public void onNext(SubscribedAck subscribedAck) {
/** @see DefaultInteractionListFragment
*/
}

public void onCompleted() {
Intent result = new Intent();
result.putExtra(EXTRA_DISPERSY_CID, dispersyCid);
result.putExtra(EXTRA_SUBSCRIBED, true);

// Flag modification
setResult(RESULT_FIRST_USER, result);

// Original intent was to subscribe only?
if (ACTION_SUBSCRIBE.equals(getIntent().getAction())) {
finish();
} else {
// Update view
invalidateOptionsMenu();
}
}

public void onError(Throwable e) {
}
}));
return;

case ACTION_SUBSCRIBE:
_fragment.showLoading(R.string.status_subscribing);
_fragment.subscribe(dispersyCid, false, getString(R.string.info_received_channel));
case ACTION_UNSUBSCRIBE:
rxSubs.add(_fragment.unsubscribe()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<UnsubscribedAck>() {

public void onNext(UnsubscribedAck unsubscribedAck) {
/** @see DefaultInteractionListFragment
*/
}

public void onCompleted() {
Intent result = new Intent();
result.putExtra(EXTRA_DISPERSY_CID, dispersyCid);
result.putExtra(EXTRA_SUBSCRIBED, false);

// Flag modification
setResult(RESULT_FIRST_USER, result);

// Original intent was to un-subscribe only?
if (ACTION_UNSUBSCRIBE.equals(getIntent().getAction())) {
finish();
} else {
// Update view
invalidateOptionsMenu();
}
}

public void onError(Throwable e) {
}
}));
return;
}
}

public void btnFavoriteClicked(MenuItem item) {
Intent intent = getIntent();
intent.setAction(ACTION_TOGGLE_SUBSCRIBED);
handleIntent(intent);
handleIntent(item.getIntent());
}

}
Original file line number Diff line number Diff line change
@@ -1,13 +1,26 @@
package org.tribler.android;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.SearchView;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;

import com.jakewharton.rxbinding.support.v7.widget.RxSearchView;
import com.jakewharton.rxbinding.support.v7.widget.SearchViewQueryTextEvent;

import org.tribler.android.restapi.EventStream;
import org.tribler.android.restapi.json.SubscribedAck;
import org.tribler.android.restapi.json.TorrentDiscoveredEvent;
import org.tribler.android.restapi.json.TriblerTorrent;
import org.tribler.android.restapi.json.UnsubscribedAck;

import rx.Observable;
import rx.Observer;
Expand All @@ -16,17 +29,25 @@

public class ChannelFragment extends DefaultInteractionListFragment implements Handler.Callback {

private String _dispersyCid;
private MenuItem _btnFav;
private Handler _eventHandler;

private String _dispersyCid;
private String _name;
private boolean _subscribed;

/**
* {@inheritDoc}
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
_dispersyCid = getActivity().getIntent().getStringExtra(ChannelActivity.EXTRA_DISPERSY_CID);
loadTorrents();
setHasOptionsMenu(true);

Intent intent = getActivity().getIntent();
_dispersyCid = intent.getStringExtra(ChannelActivity.EXTRA_DISPERSY_CID);
_name = intent.getStringExtra(ChannelActivity.EXTRA_NAME);
_subscribed = intent.getBooleanExtra(ChannelActivity.EXTRA_SUBSCRIBED, false);

// Start listening to events on the main thread so the gui can be updated
_eventHandler = new Handler(Looper.getMainLooper(), this);
Expand All @@ -43,6 +64,75 @@ public void onDestroy() {
_eventHandler = null;
}

/**
* {@inheritDoc}
*/
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
// Add items to the action bar (if it is present)
inflater.inflate(R.menu.fragment_channel_menu, menu);

// Search button
MenuItem btnFilter = menu.findItem(R.id.btn_filter_channel);
SearchView searchView = (SearchView) btnFilter.getActionView();

// Set search hint
searchView.setQueryHint(getText(R.string.action_search_in_channel));

// Filter on query text change
rxMenuSubs.add(RxSearchView.queryTextChangeEvents(searchView)
.subscribe(new Observer<SearchViewQueryTextEvent>() {

public void onNext(SearchViewQueryTextEvent event) {
adapter.getFilter().filter(event.queryText());
}

public void onCompleted() {
}

public void onError(Throwable e) {
Log.e("onCreateOptionsMenu", "queryTextChangeEvents", e);
}
}));
}

/**
* {@inheritDoc}
*/
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);

// Toggle subscribed icon
_btnFav = menu.findItem(R.id.btn_channel_toggle_subscribed);
_btnFav.setActionView(null);
Intent toggleIntent = new Intent();
if (_subscribed) {
_btnFav.setIcon(R.drawable.ic_action_star);
_btnFav.setTitle(R.string.action_unsubscribe);
toggleIntent.setAction(ChannelActivity.ACTION_UNSUBSCRIBE);
} else {
_btnFav.setIcon(R.drawable.ic_action_star_outline);
_btnFav.setTitle(R.string.action_subscribe);
toggleIntent.setAction(ChannelActivity.ACTION_SUBSCRIBE);
}
toggleIntent.putExtra(ChannelActivity.EXTRA_DISPERSY_CID, _dispersyCid);
_btnFav.setIntent(toggleIntent);

// Set title
if (context instanceof AppCompatActivity) {
ActionBar actionBar = ((AppCompatActivity) context).getSupportActionBar();
if (actionBar != null) {
if (_subscribed) {
actionBar.setTitle(_name);
} else {
actionBar.setTitle(String.format("%s: %s", getString(R.string.title_channel_preview), _name));
}
}
}
}

/**
* {@inheritDoc}
*/
Expand All @@ -52,7 +142,7 @@ public boolean handleMessage(Message message) {
TorrentDiscoveredEvent torrent = (TorrentDiscoveredEvent) message.obj;

// Check if torrent belongs to this channel
if (_dispersyCid.equalsIgnoreCase(torrent.getDispersyCid())) {
if (_dispersyCid != null && _dispersyCid.equalsIgnoreCase(torrent.getDispersyCid())) {

String question = String.format(getString(R.string.info_content_discovered), torrent.getName());
askUser(question, R.string.action_REFRESH, view -> {
Expand All @@ -73,7 +163,7 @@ protected void reload() {
loadTorrents();
}

private void loadTorrents() {
void loadTorrents() {
showLoading(true);

rxSubs.add(service.getTorrents(_dispersyCid)
Expand All @@ -96,4 +186,14 @@ public void onError(Throwable e) {
}
}));
}

Observable<SubscribedAck> subscribe() {
_btnFav.setActionView(R.layout.action_view_loading);
return super.subscribe(_dispersyCid, _name).doOnCompleted(() -> _subscribed = true);
}

Observable<UnsubscribedAck> unsubscribe() {
_btnFav.setActionView(R.layout.action_view_loading);
return super.unsubscribe(_dispersyCid, _name).doOnCompleted(() -> _subscribed = false);
}
}
Loading

0 comments on commit d3553b2

Please sign in to comment.