From d3553b29781c9c7551559e0fb92346ec650c0564 Mon Sep 17 00:00:00 2001 From: Paul Brussee Date: Wed, 19 Oct 2016 22:33:53 +0200 Subject: [PATCH] save state in ChannelFragment --- .../org/tribler/android/ChannelActivity.java | 164 +++++++----------- .../org/tribler/android/ChannelFragment.java | 110 +++++++++++- .../DefaultInteractionListFragment.java | 55 ++++-- .../tribler/android/EditChannelActivity.java | 3 +- .../FilterableRecyclerViewAdapter.java | 4 + .../tribler/android/MyChannelFragment.java | 31 +++- .../java/org/tribler/android/MyUtils.java | 6 +- .../org/tribler/android/PopularFragment.java | 18 +- .../tribler/android/SubscribedFragment.java | 18 +- .../main/res/layout/action_view_loading.xml | 11 ++ ...nel_menu.xml => fragment_channel_menu.xml} | 0 .../res/menu/fragment_my_channel_menu.xml | 20 +-- .../app/src/main/res/values/strings.xml | 1 + android/TriblerApp/app/version.properties | 4 +- 14 files changed, 282 insertions(+), 163 deletions(-) create mode 100644 android/TriblerApp/app/src/main/res/layout/action_view_loading.xml rename android/TriblerApp/app/src/main/res/menu/{activity_channel_menu.xml => fragment_channel_menu.xml} (100%) diff --git a/android/TriblerApp/app/src/main/java/org/tribler/android/ChannelActivity.java b/android/TriblerApp/app/src/main/java/org/tribler/android/ChannelActivity.java index 28ba5563e62..e6b2fd3d640 100644 --- a/android/TriblerApp/app/src/main/java/org/tribler/android/ChannelActivity.java +++ b/android/TriblerApp/app/src/main/java/org/tribler/android/ChannelActivity.java @@ -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"; @@ -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() { - - 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() { + + 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() { + + 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()); } } diff --git a/android/TriblerApp/app/src/main/java/org/tribler/android/ChannelFragment.java b/android/TriblerApp/app/src/main/java/org/tribler/android/ChannelFragment.java index 32bb0cbf917..e513b691ba6 100644 --- a/android/TriblerApp/app/src/main/java/org/tribler/android/ChannelFragment.java +++ b/android/TriblerApp/app/src/main/java/org/tribler/android/ChannelFragment.java @@ -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; @@ -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); @@ -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() { + + 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} */ @@ -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 -> { @@ -73,7 +163,7 @@ protected void reload() { loadTorrents(); } - private void loadTorrents() { + void loadTorrents() { showLoading(true); rxSubs.add(service.getTorrents(_dispersyCid) @@ -96,4 +186,14 @@ public void onError(Throwable e) { } })); } + + Observable subscribe() { + _btnFav.setActionView(R.layout.action_view_loading); + return super.subscribe(_dispersyCid, _name).doOnCompleted(() -> _subscribed = true); + } + + Observable unsubscribe() { + _btnFav.setActionView(R.layout.action_view_loading); + return super.unsubscribe(_dispersyCid, _name).doOnCompleted(() -> _subscribed = false); + } } diff --git a/android/TriblerApp/app/src/main/java/org/tribler/android/DefaultInteractionListFragment.java b/android/TriblerApp/app/src/main/java/org/tribler/android/DefaultInteractionListFragment.java index 4804d4ff822..9144b029bce 100644 --- a/android/TriblerApp/app/src/main/java/org/tribler/android/DefaultInteractionListFragment.java +++ b/android/TriblerApp/app/src/main/java/org/tribler/android/DefaultInteractionListFragment.java @@ -11,6 +11,7 @@ import org.tribler.android.restapi.json.UnsubscribedAck; import retrofit2.adapter.rxjava.HttpException; +import rx.Observable; import rx.Observer; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; @@ -70,23 +71,32 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { @Override public void onSwipedRight(final TriblerChannel channel) { adapter.removeObject(channel); - subscribe(channel.getDispersyCid(), channel.isSubscribed(), channel.getName()); + // Is already subscribed? + if (channel.isSubscribed()) { + Toast.makeText(context, String.format(context.getString(R.string.info_subscribe_already), channel.getName()), Toast.LENGTH_SHORT).show(); + } else { + subscribe(channel.getDispersyCid(), channel.getName()); + } } - void subscribe(final String dispersyCid, final boolean subscribed, final String name) { - if (subscribed) { - Toast.makeText(context, String.format(context.getString(R.string.info_subscribe_already), name), Toast.LENGTH_SHORT).show(); - return; - } + Observable subscribe(final String dispersyCid, final String name) { - rxSubs.add(service.subscribe(dispersyCid) + Observable observable = service.subscribe(dispersyCid) .subscribeOn(Schedulers.io()) .retryWhen(MyUtils::twoSecondsDelay) + .share(); + + rxSubs.add(observable .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer() { public void onNext(SubscribedAck response) { - Toast.makeText(context, String.format(context.getString(R.string.info_subscribe_success), name), Toast.LENGTH_SHORT).show(); + // Subscribed? + if (response.isSubscribed()) { + Toast.makeText(context, String.format(context.getString(R.string.info_subscribe_success), name), Toast.LENGTH_SHORT).show(); + } else { + throw new Error(String.format("Not subscribed to channel: %s \"%s\"", dispersyCid, name)); + } } public void onCompleted() { @@ -101,6 +111,8 @@ public void onError(Throwable e) { } } })); + + return observable; } /** @@ -109,23 +121,32 @@ public void onError(Throwable e) { @Override public void onSwipedLeft(final TriblerChannel channel) { adapter.removeObject(channel); - unsubscribe(channel.getDispersyCid(), channel.isSubscribed(), channel.getName()); + // Is already un-subscribed? + if (!channel.isSubscribed()) { + Toast.makeText(context, String.format(context.getString(R.string.info_unsubscribe_already), channel.getName()), Toast.LENGTH_SHORT).show(); + } else { + unsubscribe(channel.getDispersyCid(), channel.getName()); + } } - void unsubscribe(final String dispersyCid, final boolean subscribed, final String name) { - if (!subscribed) { - Toast.makeText(context, String.format(context.getString(R.string.info_unsubscribe_already), name), Toast.LENGTH_SHORT).show(); - return; - } + Observable unsubscribe(final String dispersyCid, final String name) { - rxSubs.add(service.unsubscribe(dispersyCid) + Observable observable = service.unsubscribe(dispersyCid) .subscribeOn(Schedulers.io()) .retryWhen(MyUtils::twoSecondsDelay) + .share(); + + rxSubs.add(observable .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer() { public void onNext(UnsubscribedAck response) { - Toast.makeText(context, String.format(context.getString(R.string.info_unsubscribe_success), name), Toast.LENGTH_SHORT).show(); + // Un-subscribed? + if (response.isUnsubscribed()) { + Toast.makeText(context, String.format(context.getString(R.string.info_unsubscribe_success), name), Toast.LENGTH_SHORT).show(); + } else { + throw new Error(String.format("Not unsubscribed form channel: %s \"%s\"", dispersyCid, name)); + } } public void onCompleted() { @@ -140,6 +161,8 @@ public void onError(Throwable e) { } } })); + + return observable; } /** diff --git a/android/TriblerApp/app/src/main/java/org/tribler/android/EditChannelActivity.java b/android/TriblerApp/app/src/main/java/org/tribler/android/EditChannelActivity.java index 458ceabad2b..afc8342598a 100644 --- a/android/TriblerApp/app/src/main/java/org/tribler/android/EditChannelActivity.java +++ b/android/TriblerApp/app/src/main/java/org/tribler/android/EditChannelActivity.java @@ -1,6 +1,5 @@ package org.tribler.android; -import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; @@ -128,7 +127,7 @@ public void btnChannelSaveClicked(View view) { result.putExtra(ChannelActivity.EXTRA_DESCRIPTION, description); // Flag modification - setResult(Activity.RESULT_FIRST_USER, result); + setResult(RESULT_FIRST_USER, result); finish(); } diff --git a/android/TriblerApp/app/src/main/java/org/tribler/android/FilterableRecyclerViewAdapter.java b/android/TriblerApp/app/src/main/java/org/tribler/android/FilterableRecyclerViewAdapter.java index ce79bd81805..8ea1e7e954d 100644 --- a/android/TriblerApp/app/src/main/java/org/tribler/android/FilterableRecyclerViewAdapter.java +++ b/android/TriblerApp/app/src/main/java/org/tribler/android/FilterableRecyclerViewAdapter.java @@ -30,6 +30,10 @@ public int getItemCount() { return _filteredDataList.size(); } + public boolean isEmpty() { + return _dataSet.isEmpty(); + } + /** * Replace filtered data list with results * diff --git a/android/TriblerApp/app/src/main/java/org/tribler/android/MyChannelFragment.java b/android/TriblerApp/app/src/main/java/org/tribler/android/MyChannelFragment.java index d59926f92de..89f79d2f75b 100644 --- a/android/TriblerApp/app/src/main/java/org/tribler/android/MyChannelFragment.java +++ b/android/TriblerApp/app/src/main/java/org/tribler/android/MyChannelFragment.java @@ -73,8 +73,12 @@ public void onCreate(Bundle savedInstanceState) { @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_my_channel_menu, menu); + // Hide main search button + menu.findItem(R.id.btn_search).setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_NEVER); + // Search button MenuItem btnFilter = menu.findItem(R.id.btn_filter_my_channel); SearchView searchView = (SearchView) btnFilter.getActionView(); @@ -105,8 +109,6 @@ public void onError(Throwable e) { @Override public void onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); - // Hide main search button - menu.findItem(R.id.btn_search).setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_NEVER); // Is my channel created? boolean created = (_dispersyCid != null); @@ -264,7 +266,7 @@ public void onError(Throwable e) { private void createTorrent(final File file, final boolean delete) { // Workaround endpoint array parsing: - String[] list = {"[\"" + file.getAbsolutePath() + "\"]"}; + String[] list = {String.format("[\"%s\"]", file.getAbsolutePath())}; rxSubs.add(service.createTorrent(list) .subscribeOn(Schedulers.io()) .retryWhen(MyUtils::twoSecondsDelay) @@ -281,8 +283,6 @@ public void onCompleted() { if (delete) { AssetExtract.recursiveDelete(new File(file.getParent())); } - // Update view - reload(); } public void onError(Throwable e) { @@ -308,7 +308,12 @@ private void addTorrent(final String torrent_b64) { .subscribe(new Observer() { public void onNext(AddedAck response) { - Toast.makeText(context, String.format(context.getString(R.string.info_added_success), "Torrent"), Toast.LENGTH_SHORT).show(); + // Added? + if (response.isAdded()) { + Toast.makeText(context, String.format(context.getString(R.string.info_added_success), "Torrent"), Toast.LENGTH_SHORT).show(); + } else { + throw new Error("Torrent not added"); + } } public void onCompleted() { @@ -339,7 +344,12 @@ private void addTorrent(final Uri url) { .subscribe(new Observer() { public void onNext(AddedUrlAck response) { - Toast.makeText(context, String.format(context.getString(R.string.info_added_success), "Torrent"), Toast.LENGTH_SHORT).show(); + // Added? + if (url.equals(response.getAdded())) { + Toast.makeText(context, String.format(context.getString(R.string.info_added_success), "Torrent"), Toast.LENGTH_SHORT).show(); + } else { + throw new Error(String.format("Torrent url not added: %s != %s", url.toString(), response.getAdded())); + } } public void onCompleted() { @@ -367,7 +377,12 @@ private void deleteTorrent(final String infohash, final String name) { .subscribe(new Observer() { public void onNext(RemovedAck response) { - Toast.makeText(context, String.format(context.getString(R.string.info_removed_success), name), Toast.LENGTH_SHORT).show(); + // Removed? + if (response.isRemoved()) { + Toast.makeText(context, String.format(context.getString(R.string.info_removed_success), name), Toast.LENGTH_SHORT).show(); + } else { + throw new Error(String.format("Torrent not removed: %s \"%s\"", infohash, name)); + } } public void onCompleted() { diff --git a/android/TriblerApp/app/src/main/java/org/tribler/android/MyUtils.java b/android/TriblerApp/app/src/main/java/org/tribler/android/MyUtils.java index e37d65c53e5..71030c2d69b 100644 --- a/android/TriblerApp/app/src/main/java/org/tribler/android/MyUtils.java +++ b/android/TriblerApp/app/src/main/java/org/tribler/android/MyUtils.java @@ -170,7 +170,7 @@ public static File getOutputVideoFile(Context context) throws IOException { } // Create a media file name String timeStamp = new SimpleDateFormat("yyyy-MM-dd_HH_mm_ss").format(new Date()); - return new File(videoDir, "VID_" + timeStamp + ".mp4"); + return new File(videoDir, String.format("VID_%s.mp4", timeStamp)); } public static void copy(InputStream input, OutputStream output) throws IOException { @@ -324,9 +324,9 @@ public static Observable twoSecondsDelay(Observable erro return Observable.error(e); } if (e instanceof ConnectException) { - Log.v("twoSecDelay", e.getClass().getSimpleName() + ". " + e.getMessage()); + Log.v("twoSecDelay", String.format("%s. %s", e.getClass().getSimpleName(), e.getMessage())); } else { - Log.e("twoSecDelay", e.getClass().getSimpleName() + ". " + e.getMessage(), e); + Log.e("twoSecDelay", String.format("%s. %s", e.getClass().getSimpleName(), e.getMessage()), e); } // Retry return Observable.timer(2, TimeUnit.SECONDS); diff --git a/android/TriblerApp/app/src/main/java/org/tribler/android/PopularFragment.java b/android/TriblerApp/app/src/main/java/org/tribler/android/PopularFragment.java index 9c6957a6866..8df0276fe6d 100644 --- a/android/TriblerApp/app/src/main/java/org/tribler/android/PopularFragment.java +++ b/android/TriblerApp/app/src/main/java/org/tribler/android/PopularFragment.java @@ -16,6 +16,15 @@ public class PopularFragment extends DefaultInteractionListFragment { private int _limit = 50000; + /** + * {@inheritDoc} + */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + loadPopularChannels(); + } + /** * {@inheritDoc} */ @@ -32,15 +41,6 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) { } } - /** - * {@inheritDoc} - */ - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - loadPopularChannels(); - } - /** * {@inheritDoc} */ diff --git a/android/TriblerApp/app/src/main/java/org/tribler/android/SubscribedFragment.java b/android/TriblerApp/app/src/main/java/org/tribler/android/SubscribedFragment.java index 8480a9b3e1a..c0a266d0f88 100644 --- a/android/TriblerApp/app/src/main/java/org/tribler/android/SubscribedFragment.java +++ b/android/TriblerApp/app/src/main/java/org/tribler/android/SubscribedFragment.java @@ -14,6 +14,15 @@ public class SubscribedFragment extends DefaultInteractionListFragment { + /** + * {@inheritDoc} + */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + loadSubscribedChannels(); + } + /** * {@inheritDoc} */ @@ -30,15 +39,6 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) { } } - /** - * {@inheritDoc} - */ - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - loadSubscribedChannels(); - } - /** * {@inheritDoc} */ diff --git a/android/TriblerApp/app/src/main/res/layout/action_view_loading.xml b/android/TriblerApp/app/src/main/res/layout/action_view_loading.xml new file mode 100644 index 00000000000..c170c6dd2fb --- /dev/null +++ b/android/TriblerApp/app/src/main/res/layout/action_view_loading.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/android/TriblerApp/app/src/main/res/menu/activity_channel_menu.xml b/android/TriblerApp/app/src/main/res/menu/fragment_channel_menu.xml similarity index 100% rename from android/TriblerApp/app/src/main/res/menu/activity_channel_menu.xml rename to android/TriblerApp/app/src/main/res/menu/fragment_channel_menu.xml diff --git a/android/TriblerApp/app/src/main/res/menu/fragment_my_channel_menu.xml b/android/TriblerApp/app/src/main/res/menu/fragment_my_channel_menu.xml index 6a9b4ac2226..043552518b4 100644 --- a/android/TriblerApp/app/src/main/res/menu/fragment_my_channel_menu.xml +++ b/android/TriblerApp/app/src/main/res/menu/fragment_my_channel_menu.xml @@ -8,7 +8,6 @@ android:icon="@drawable/ic_action_plus" android:onClick="btnMyChannelAddClicked" android:title="@string/action_mychannel_add" - android:visible="false" app:showAsAction="ifRoom|withText" /> + + - - - + \ No newline at end of file diff --git a/android/TriblerApp/app/src/main/res/values/strings.xml b/android/TriblerApp/app/src/main/res/values/strings.xml index 13df8d0232d..e2fe219748c 100644 --- a/android/TriblerApp/app/src/main/res/values/strings.xml +++ b/android/TriblerApp/app/src/main/res/values/strings.xml @@ -35,6 +35,7 @@ Search videos and channels Search in this channel + Filter list Record a new video Create a new torrent diff --git a/android/TriblerApp/app/version.properties b/android/TriblerApp/app/version.properties index 32478015977..4dc398c3e7c 100644 --- a/android/TriblerApp/app/version.properties +++ b/android/TriblerApp/app/version.properties @@ -1,2 +1,2 @@ -#Tue Oct 18 21:48:01 CEST 2016 -VERSION_CODE=1494 +#Wed Oct 19 22:29:58 CEST 2016 +VERSION_CODE=1519