sync notificationsDisabled states for followed channels
This commit is contained in:
parent
983bc68af2
commit
6221de2d3c
4 changed files with 68 additions and 9 deletions
|
@ -18,6 +18,7 @@ import io.lbry.browser.exceptions.ApiCallException;
|
||||||
import io.lbry.browser.exceptions.LbryUriException;
|
import io.lbry.browser.exceptions.LbryUriException;
|
||||||
import io.lbry.browser.model.Tag;
|
import io.lbry.browser.model.Tag;
|
||||||
import io.lbry.browser.model.lbryinc.Subscription;
|
import io.lbry.browser.model.lbryinc.Subscription;
|
||||||
|
import io.lbry.browser.utils.Helper;
|
||||||
import io.lbry.browser.utils.Lbry;
|
import io.lbry.browser.utils.Lbry;
|
||||||
import io.lbry.browser.utils.LbryUri;
|
import io.lbry.browser.utils.LbryUri;
|
||||||
|
|
||||||
|
@ -69,6 +70,8 @@ public class LoadSharedUserStateTask extends AsyncTask<Void, Void, Boolean> {
|
||||||
value.has("subscriptions") && !value.isNull("subscriptions") ? value.getJSONArray("subscriptions") : null;
|
value.has("subscriptions") && !value.isNull("subscriptions") ? value.getJSONArray("subscriptions") : null;
|
||||||
JSONArray tags =
|
JSONArray tags =
|
||||||
value.has("tags") && !value.isNull("tags") ? value.getJSONArray("tags") : null;
|
value.has("tags") && !value.isNull("tags") ? value.getJSONArray("tags") : null;
|
||||||
|
JSONArray following =
|
||||||
|
value.has("following") && !value.isNull("following") ? value.getJSONArray("following") : null;
|
||||||
|
|
||||||
if (subscriptionUrls != null) {
|
if (subscriptionUrls != null) {
|
||||||
subscriptions = new ArrayList<>();
|
subscriptions = new ArrayList<>();
|
||||||
|
@ -78,7 +81,8 @@ public class LoadSharedUserStateTask extends AsyncTask<Void, Void, Boolean> {
|
||||||
LbryUri uri = LbryUri.parse(LbryUri.normalize(url));
|
LbryUri uri = LbryUri.parse(LbryUri.normalize(url));
|
||||||
Subscription subscription = new Subscription();
|
Subscription subscription = new Subscription();
|
||||||
subscription.setChannelName(uri.getChannelName());
|
subscription.setChannelName(uri.getChannelName());
|
||||||
subscription.setUrl(url);
|
subscription.setUrl(uri.toString());
|
||||||
|
subscription.setNotificationsDisabled(isNotificationsDisabledForSubUrl(uri.toString(), following));
|
||||||
subscriptions.add(subscription);
|
subscriptions.add(subscription);
|
||||||
if (db != null) {
|
if (db != null) {
|
||||||
DatabaseHelper.createOrUpdateSubscription(subscription, db);
|
DatabaseHelper.createOrUpdateSubscription(subscription, db);
|
||||||
|
@ -125,6 +129,24 @@ public class LoadSharedUserStateTask extends AsyncTask<Void, Void, Boolean> {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected boolean isNotificationsDisabledForSubUrl(String url, JSONArray following) {
|
||||||
|
try {
|
||||||
|
for (int i = 0; i < following.length(); i++) {
|
||||||
|
JSONObject item = following.getJSONObject(i);
|
||||||
|
String itemUrl = Helper.getJSONString("url", null, item);
|
||||||
|
boolean notificationsDisabled = Helper.getJSONBoolean("notificationsDisabled", true, item);
|
||||||
|
if (url.equalsIgnoreCase(itemUrl)) {
|
||||||
|
return notificationsDisabled;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (JSONException ex) {
|
||||||
|
// pass
|
||||||
|
}
|
||||||
|
|
||||||
|
// always default notifications disabled to true
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
protected void onPostExecute(Boolean result) {
|
protected void onPostExecute(Boolean result) {
|
||||||
if (handler != null) {
|
if (handler != null) {
|
||||||
if (result) {
|
if (result) {
|
||||||
|
|
|
@ -2,6 +2,7 @@ package io.lbry.browser.tasks.wallet;
|
||||||
|
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
|
|
||||||
|
import org.json.JSONArray;
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
@ -11,9 +12,11 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import io.lbry.browser.exceptions.ApiCallException;
|
import io.lbry.browser.exceptions.ApiCallException;
|
||||||
|
import io.lbry.browser.exceptions.LbryUriException;
|
||||||
import io.lbry.browser.model.lbryinc.Subscription;
|
import io.lbry.browser.model.lbryinc.Subscription;
|
||||||
import io.lbry.browser.utils.Helper;
|
import io.lbry.browser.utils.Helper;
|
||||||
import io.lbry.browser.utils.Lbry;
|
import io.lbry.browser.utils.Lbry;
|
||||||
|
import io.lbry.browser.utils.LbryUri;
|
||||||
import io.lbry.browser.utils.Lbryio;
|
import io.lbry.browser.utils.Lbryio;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -40,9 +43,16 @@ public class SaveSharedUserStateTask extends AsyncTask<Void, Void, Boolean> {
|
||||||
protected Boolean doInBackground(Void... params) {
|
protected Boolean doInBackground(Void... params) {
|
||||||
// data to save
|
// data to save
|
||||||
// current subscriptions
|
// current subscriptions
|
||||||
|
List<Subscription> subs = new ArrayList<>(Lbryio.subscriptions);
|
||||||
List<String> subscriptionUrls = new ArrayList<>();
|
List<String> subscriptionUrls = new ArrayList<>();
|
||||||
for (Subscription subscription : Lbryio.subscriptions) {
|
try {
|
||||||
subscriptionUrls.add(subscription.getUrl());
|
for (Subscription subscription : subs) {
|
||||||
|
LbryUri uri = LbryUri.parse(LbryUri.normalize(subscription.getUrl()));
|
||||||
|
subscriptionUrls.add(uri.toString());
|
||||||
|
}
|
||||||
|
} catch (LbryUriException ex) {
|
||||||
|
error = ex;
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// followed tags
|
// followed tags
|
||||||
|
@ -62,6 +72,7 @@ public class SaveSharedUserStateTask extends AsyncTask<Void, Void, Boolean> {
|
||||||
JSONObject value = shared.getJSONObject("value");
|
JSONObject value = shared.getJSONObject("value");
|
||||||
value.put("subscriptions", Helper.jsonArrayFromList(subscriptionUrls));
|
value.put("subscriptions", Helper.jsonArrayFromList(subscriptionUrls));
|
||||||
value.put("tags", Helper.jsonArrayFromList(followedTags));
|
value.put("tags", Helper.jsonArrayFromList(followedTags));
|
||||||
|
value.put("following", buildUpdatedNotificationsDisabledStates(subs));
|
||||||
sharedObject = shared;
|
sharedObject = shared;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -71,6 +82,7 @@ public class SaveSharedUserStateTask extends AsyncTask<Void, Void, Boolean> {
|
||||||
JSONObject value = new JSONObject();
|
JSONObject value = new JSONObject();
|
||||||
value.put("subscriptions", Helper.jsonArrayFromList(subscriptionUrls));
|
value.put("subscriptions", Helper.jsonArrayFromList(subscriptionUrls));
|
||||||
value.put("tags", Helper.jsonArrayFromList(followedTags));
|
value.put("tags", Helper.jsonArrayFromList(followedTags));
|
||||||
|
value.put("following", buildUpdatedNotificationsDisabledStates(subs));
|
||||||
|
|
||||||
sharedObject = new JSONObject();
|
sharedObject = new JSONObject();
|
||||||
sharedObject.put("type", "object");
|
sharedObject.put("type", "object");
|
||||||
|
@ -91,6 +103,26 @@ public class SaveSharedUserStateTask extends AsyncTask<Void, Void, Boolean> {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static JSONArray buildUpdatedNotificationsDisabledStates(List<Subscription> subscriptions) {
|
||||||
|
JSONArray states = new JSONArray();
|
||||||
|
for (Subscription subscription : subscriptions) {
|
||||||
|
if (!Helper.isNullOrEmpty(subscription.getUrl())) {
|
||||||
|
try {
|
||||||
|
JSONObject item = new JSONObject();
|
||||||
|
LbryUri uri = LbryUri.parse(LbryUri.normalize(subscription.getUrl()));
|
||||||
|
item.put("uri", uri.toString());
|
||||||
|
item.put("notificationsDisabled", subscription.isNotificationsDisabled());
|
||||||
|
states.put(item);
|
||||||
|
} catch (JSONException | LbryUriException ex) {
|
||||||
|
// pass
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return states;
|
||||||
|
}
|
||||||
|
|
||||||
protected void onPostExecute(Boolean result) {
|
protected void onPostExecute(Boolean result) {
|
||||||
if (handler != null) {
|
if (handler != null) {
|
||||||
if (result) {
|
if (result) {
|
||||||
|
|
|
@ -228,8 +228,11 @@ public class ChannelFragment extends BaseFragment implements FetchChannelsListen
|
||||||
((MainActivity) context).showMessage(subscription.isNotificationsDisabled() ?
|
((MainActivity) context).showMessage(subscription.isNotificationsDisabled() ?
|
||||||
R.string.receive_no_notifications : R.string.receive_all_notifications);
|
R.string.receive_no_notifications : R.string.receive_all_notifications);
|
||||||
}
|
}
|
||||||
|
|
||||||
checkIsFollowing();
|
checkIsFollowing();
|
||||||
|
|
||||||
|
if (context != null) {
|
||||||
|
context.sendBroadcast(new Intent(MainActivity.ACTION_SAVE_SHARED_USER_STATE));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -268,11 +271,9 @@ public class ChannelFragment extends BaseFragment implements FetchChannelsListen
|
||||||
checkIsFollowing();
|
checkIsFollowing();
|
||||||
FollowingFragment.resetClaimSearchContent = true;
|
FollowingFragment.resetClaimSearchContent = true;
|
||||||
|
|
||||||
if (Lbry.SDK_READY) {
|
|
||||||
Context context = getContext();
|
Context context = getContext();
|
||||||
if (context instanceof MainActivity) {
|
if (context != null) {
|
||||||
((MainActivity) context).saveSharedUserState();
|
context.sendBroadcast(new Intent(MainActivity.ACTION_SAVE_SHARED_USER_STATE));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -807,6 +807,10 @@ public class FileViewFragment extends BaseFragment implements
|
||||||
R.string.receive_no_notifications : R.string.receive_all_notifications);
|
R.string.receive_no_notifications : R.string.receive_all_notifications);
|
||||||
}
|
}
|
||||||
checkIsFollowing();
|
checkIsFollowing();
|
||||||
|
|
||||||
|
if (context != null) {
|
||||||
|
context.sendBroadcast(new Intent(MainActivity.ACTION_SAVE_SHARED_USER_STATE));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in a new issue