diff --git a/app/build.gradle b/app/build.gradle
index 2930c8de..8ee31f17 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -14,8 +14,8 @@ android {
applicationId "io.lbry.browser"
minSdkVersion 21
targetSdkVersion 29
- versionCode 1611
- versionName "0.16.11"
+ versionCode 1612
+ versionName "0.16.12"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
@@ -118,7 +118,7 @@ dependencies {
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
- __32bitImplementation 'io.lbry:lbrysdk32:0.86.1'
-// __64bitImplementation 'io.lbry:lbrysdk64:0.86.1'
+ __32bitImplementation 'io.lbry:lbrysdk32:0.87.0'
+// __64bitImplementation 'io.lbry:lbrysdk64:0.87.0'
}
diff --git a/app/src/main/java/io/lbry/browser/MainActivity.java b/app/src/main/java/io/lbry/browser/MainActivity.java
index 03ec288d..1630f183 100644
--- a/app/src/main/java/io/lbry/browser/MainActivity.java
+++ b/app/src/main/java/io/lbry/browser/MainActivity.java
@@ -40,6 +40,7 @@ import android.view.KeyEvent;
import android.view.MenuItem;
import android.view.View;
import android.view.Menu;
+import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
@@ -2661,6 +2662,23 @@ public class MainActivity extends AppCompatActivity implements SdkStatusListener
StartupStageAdapter adapter = new StartupStageAdapter(this, startupStages);
listView.setAdapter(adapter);
+ // Add 1 pixel to listview height
+ int listHeight = Math.round(getResources().getDisplayMetrics().density);
+
+ for (int i = 0; i < startupStages.size(); i++) {
+ View item = adapter.getView(i, null, listView);
+ item.measure(0, 0);
+ listHeight += item.getMeasuredHeight();
+ }
+
+ // Properly set listview height by adding all seven items and the divider heights
+ // and the additional 1 pixel so no vertical scroll bar is shown
+ ViewGroup.LayoutParams params = listView.getLayoutParams();
+ params.height = listHeight + (listView.getCount() + 1) * listView.getDividerHeight();
+ listView.setLayoutParams(params);
+ listView.invalidate();
+ listView.requestLayout();
+
findViewById(R.id.splash_view_loading_container).setVisibility(View.GONE);
findViewById(R.id.splash_view_error_container).setVisibility(View.VISIBLE);
}
@@ -3007,6 +3025,17 @@ public class MainActivity extends AppCompatActivity implements SdkStatusListener
String action = intent.getAction();
if (LbrynetService.ACTION_STOP_SERVICE.equals(action)) {
MainActivity.this.receivedStopService = true;
+
+ // STOP is meant to close everything,
+ // So destroy the player at this point (even with background play enabled)
+ if (appPlayer != null) {
+ playerNotificationManager.setPlayer(null);
+ stopExoplayer();
+ nowPlayingClaim = null;
+ nowPlayingClaimUrl = null;
+ nowPlayingClaimBitmap = null;
+ }
+
MainActivity.this.finish();
} else if (LbrynetService.LBRY_SDK_SERVICE_STARTED.equals(action)) {
// Rebuild the service notification
diff --git a/app/src/main/java/io/lbry/browser/ui/channel/ChannelCommentsFragment.java b/app/src/main/java/io/lbry/browser/ui/channel/ChannelCommentsFragment.java
index ce6dc6c3..c32d0f05 100644
--- a/app/src/main/java/io/lbry/browser/ui/channel/ChannelCommentsFragment.java
+++ b/app/src/main/java/io/lbry/browser/ui/channel/ChannelCommentsFragment.java
@@ -441,21 +441,7 @@ public class ChannelCommentsFragment extends Fragment implements SdkStatusListen
return;
}
- Context context = getContext();
- if (context != null) {
- String titleText = getResources().getString(R.string.comment_confirm_post);
- String confirmText = getResources().getString(R.string.confirm_post_comment);
- AlertDialog.Builder builder = new AlertDialog.Builder(context).
- setTitle(titleText).
- setMessage(confirmText)
- .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialogInterface, int i) {
- postComment();
- }
- }).setNegativeButton(R.string.no, null);
- builder.show();
- }
+ postComment();
}
private void updatePostAsChannel(Claim channel) {
diff --git a/app/src/main/java/io/lbry/browser/ui/channel/ChannelFragment.java b/app/src/main/java/io/lbry/browser/ui/channel/ChannelFragment.java
index 75750775..f7bb34e3 100644
--- a/app/src/main/java/io/lbry/browser/ui/channel/ChannelFragment.java
+++ b/app/src/main/java/io/lbry/browser/ui/channel/ChannelFragment.java
@@ -252,37 +252,22 @@ public class ChannelFragment extends BaseFragment implements FetchChannelsListen
return;
}
- subscribing = true;
boolean isFollowing = Lbryio.isFollowing(claim);
- Subscription subscription = Subscription.fromClaim(claim);
- view.setEnabled(false);
- new ChannelSubscribeTask(getContext(), claim.getClaimId(), subscription, isFollowing, new ChannelSubscribeTask.ChannelSubscribeHandler() {
- @Override
- public void onSuccess() {
- if (isFollowing) {
- Lbryio.removeSubscription(subscription);
- Lbryio.removeCachedResolvedSubscription(claim);
- } else {
- Lbryio.addSubscription(subscription);
- Lbryio.addCachedResolvedSubscription(claim);
- }
- buttonFollowUnfollow.setEnabled(true);
- subscribing = false;
- checkIsFollowing();
- FollowingFragment.resetClaimSearchContent = true;
-
- Context context = getContext();
- if (context != null) {
- context.sendBroadcast(new Intent(MainActivity.ACTION_SAVE_SHARED_USER_STATE));
- }
- }
-
- @Override
- public void onError(Exception exception) {
- buttonFollowUnfollow.setEnabled(true);
- subscribing = false;
- }
- }).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ if (isFollowing) {
+ Context context = getContext();
+ AlertDialog.Builder builder = new AlertDialog.Builder(context).
+ setTitle(R.string.confirm_unfollow).
+ setMessage(R.string.confirm_unfollow_message)
+ .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialogInterface, int i) {
+ doFollowUnfollow(isFollowing, view);
+ }
+ }).setNegativeButton(R.string.no, null);
+ builder.show();
+ } else {
+ doFollowUnfollow(isFollowing, view);
+ }
}
}
});
@@ -290,6 +275,39 @@ public class ChannelFragment extends BaseFragment implements FetchChannelsListen
return root;
}
+ private void doFollowUnfollow(boolean isFollowing, View view) {
+ subscribing = true;
+ Subscription subscription = Subscription.fromClaim(claim);
+ view.setEnabled(false);
+ new ChannelSubscribeTask(getContext(), claim.getClaimId(), subscription, isFollowing, new ChannelSubscribeTask.ChannelSubscribeHandler() {
+ @Override
+ public void onSuccess() {
+ if (isFollowing) {
+ Lbryio.removeSubscription(subscription);
+ Lbryio.removeCachedResolvedSubscription(claim);
+ } else {
+ Lbryio.addSubscription(subscription);
+ Lbryio.addCachedResolvedSubscription(claim);
+ }
+ buttonFollowUnfollow.setEnabled(true);
+ subscribing = false;
+ checkIsFollowing();
+ FollowingFragment.resetClaimSearchContent = true;
+
+ Context context = getContext();
+ if (context != null) {
+ context.sendBroadcast(new Intent(MainActivity.ACTION_SAVE_SHARED_USER_STATE));
+ }
+ }
+
+ @Override
+ public void onError(Exception exception) {
+ buttonFollowUnfollow.setEnabled(true);
+ subscribing = false;
+ }
+ }).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ }
+
private void deleteCurrentClaim() {
if (claim != null) {
Helper.setViewVisibility(layoutDisplayArea, View.GONE);
diff --git a/app/src/main/java/io/lbry/browser/ui/findcontent/FileViewFragment.java b/app/src/main/java/io/lbry/browser/ui/findcontent/FileViewFragment.java
index 2d6c04ab..547228b5 100644
--- a/app/src/main/java/io/lbry/browser/ui/findcontent/FileViewFragment.java
+++ b/app/src/main/java/io/lbry/browser/ui/findcontent/FileViewFragment.java
@@ -823,42 +823,64 @@ public class FileViewFragment extends BaseFragment implements
private View.OnClickListener followUnfollowListener = new View.OnClickListener() {
@Override
- public void onClick(View view) {
+ public void onClick(final View view) {
if (claim != null && claim.getSigningChannel() != null) {
Claim publisher = claim.getSigningChannel();
boolean isFollowing = Lbryio.isFollowing(publisher);
- Subscription subscription = Subscription.fromClaim(publisher);
- view.setEnabled(false);
- Context context = getContext();
- new ChannelSubscribeTask(context, publisher.getClaimId(), subscription, isFollowing, new ChannelSubscribeTask.ChannelSubscribeHandler() {
- @Override
- public void onSuccess() {
- if (isFollowing) {
- Lbryio.removeSubscription(subscription);
- Lbryio.removeCachedResolvedSubscription(publisher);
- } else {
- Lbryio.addSubscription(subscription);
- Lbryio.addCachedResolvedSubscription(publisher);
- }
- view.setEnabled(true);
- checkIsFollowing();
- FollowingFragment.resetClaimSearchContent = true;
-
- // Save shared user state
- if (context != null) {
- context.sendBroadcast(new Intent(MainActivity.ACTION_SAVE_SHARED_USER_STATE));
- }
- }
-
- @Override
- public void onError(Exception exception) {
- view.setEnabled(true);
- }
- }).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ if (isFollowing) {
+ // show unfollow confirmation
+ Context context = getContext();
+ AlertDialog.Builder builder = new AlertDialog.Builder(context).
+ setTitle(R.string.confirm_unfollow).
+ setMessage(R.string.confirm_unfollow_message)
+ .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialogInterface, int i) {
+ doFollowUnfollow(isFollowing, view);
+ }
+ }).setNegativeButton(R.string.no, null);
+ builder.show();
+ } else {
+ doFollowUnfollow(isFollowing, view);
+ }
}
}
};
+ private void doFollowUnfollow(boolean isFollowing, View view) {
+ if (claim != null && claim.getSigningChannel() != null) {
+ Claim publisher = claim.getSigningChannel();
+ Subscription subscription = Subscription.fromClaim(publisher);
+ view.setEnabled(false);
+ Context context = getContext();
+ new ChannelSubscribeTask(context, publisher.getClaimId(), subscription, isFollowing, new ChannelSubscribeTask.ChannelSubscribeHandler() {
+ @Override
+ public void onSuccess() {
+ if (isFollowing) {
+ Lbryio.removeSubscription(subscription);
+ Lbryio.removeCachedResolvedSubscription(publisher);
+ } else {
+ Lbryio.addSubscription(subscription);
+ Lbryio.addCachedResolvedSubscription(publisher);
+ }
+ view.setEnabled(true);
+ checkIsFollowing();
+ FollowingFragment.resetClaimSearchContent = true;
+
+ // Save shared user state
+ if (context != null) {
+ context.sendBroadcast(new Intent(MainActivity.ACTION_SAVE_SHARED_USER_STATE));
+ }
+ }
+
+ @Override
+ public void onError(Exception exception) {
+ view.setEnabled(true);
+ }
+ }).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ }
+ }
+
private void resolveUrl(String url) {
resolving = true;
Helper.setViewVisibility(layoutDisplayArea, View.INVISIBLE);
@@ -3033,21 +3055,7 @@ public class FileViewFragment extends BaseFragment implements
return;
}
- Context context = getContext();
- if (context != null) {
- String titleText = getResources().getString(R.string.comment_confirm_post);
- String confirmText = getResources().getString(R.string.confirm_post_comment);
- AlertDialog.Builder builder = new AlertDialog.Builder(context).
- setTitle(titleText).
- setMessage(confirmText)
- .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialogInterface, int i) {
- postComment();
- }
- }).setNegativeButton(R.string.no, null);
- builder.show();
- }
+ postComment();
}
private void updatePostAsChannel(Claim channel) {
diff --git a/app/src/main/java/io/lbry/browser/ui/wallet/WalletFragment.java b/app/src/main/java/io/lbry/browser/ui/wallet/WalletFragment.java
index c22a4109..69ff7690 100644
--- a/app/src/main/java/io/lbry/browser/ui/wallet/WalletFragment.java
+++ b/app/src/main/java/io/lbry/browser/ui/wallet/WalletFragment.java
@@ -463,7 +463,7 @@ public class WalletFragment extends BaseFragment implements SdkStatusListener, W
double sentAmount = actualSendAmount;
String message = getResources().getQuantityString(
R.plurals.you_sent_credits, sentAmount == 1.0 ? 1 : 2,
- new DecimalFormat("#,###.##").format(sentAmount));
+ new DecimalFormat("#,###.####").format(sentAmount));
Helper.setViewText(inputSendAddress, null);
Helper.setViewText(inputSendAmount, null);
if (view != null) {
diff --git a/app/src/main/res/layout/app_bar_main.xml b/app/src/main/res/layout/app_bar_main.xml
index a5c63065..3b46df68 100644
--- a/app/src/main/res/layout/app_bar_main.xml
+++ b/app/src/main/res/layout/app_bar_main.xml
@@ -159,10 +159,11 @@
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index b5e22db8..53ae3a40 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -88,8 +88,6 @@
Please enter a comment to post.
Please select a channel to post your comment as.
Post
- Confirm your comment
- This will post your comment
Your comment was successfully posted.
Please select a channel to repost on.
Reply
@@ -103,6 +101,18 @@
- This will purchase "%1$s" for %2$s credit
- This will purchase "%1$s" for %2$s credits
+
+ - Post and tip %1$s credit?
+ - Post and tip %1$s credits?
+
+
+ - Post for %1$s credit
+ - Post for %1$s credits
+
+
+ - This will post your comment with a tip of %1$s credit for %2$s
+ - This will post your comment with a tip of %1$s credits for %2$s
+
There\'s nothing here yet.\nPlease check back later.
@@ -111,6 +121,8 @@
reposted
You will receive all notifications
You will not receive notifications for this channel
+ Stop following channel?
+ Are you sure you want to stop following this channel?
- %1$s follower
- %1$s followers