Merge upstream lbryio/lbry-android

This commit is contained in:
Javi Rueda 2020-12-29 08:59:43 +01:00
commit 2393248b3d
8 changed files with 151 additions and 97 deletions

View file

@ -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'
}

View file

@ -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

View file

@ -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) {

View file

@ -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);

View file

@ -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) {

View file

@ -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) {

View file

@ -159,10 +159,11 @@
<ListView
android:id="@+id/startup_stage_error_listview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_height="0dp"
android:layout_marginTop="12dp"
android:divider="@android:color/transparent"
android:dividerHeight="8dp"
android:scrollbars="none"
tools:listitem="@layout/list_item_startupstage">
</ListView>

View file

@ -88,8 +88,6 @@
<string name="please_enter_comment">Please enter a comment to post.</string>
<string name="please_select_channel">Please select a channel to post your comment as.</string>
<string name="comment_form_post">Post</string>
<string name="comment_confirm_post">Confirm your comment</string>
<string name="confirm_post_comment">This will post your comment</string>
<string name="comment_posted">Your comment was successfully posted.</string>
<string name="please_select_repost_channel">Please select a channel to repost on.</string>
<string name="reply">Reply</string>
@ -103,6 +101,18 @@
<item quantity="one">This will purchase "%1$s" for %2$s credit</item>
<item quantity="other">This will purchase "%1$s" for %2$s credits</item>
</plurals>
<plurals name="post_and_tip">
<item quantity="one">Post and tip %1$s credit?</item>
<item quantity="other">Post and tip %1$s credits?</item>
</plurals>
<plurals name="post_for_credits">
<item quantity="one">Post for %1$s credit</item>
<item quantity="other">Post for %1$s credits</item>
</plurals>
<plurals name="confirm_post_comment">
<item quantity="one">This will post your comment with a tip of %1$s credit for %2$s</item>
<item quantity="other">This will post your comment with a tip of %1$s credits for %2$s</item>
</plurals>
<!-- Channel view -->
<string name="no_channel_info">There\'s nothing here yet.\nPlease check back later.</string>
@ -111,6 +121,8 @@
<string name="reposted">reposted</string>
<string name="receive_all_notifications">You will receive all notifications</string>
<string name="receive_no_notifications">You will not receive notifications for this channel</string>
<string name="confirm_unfollow">Stop following channel?</string>
<string name="confirm_unfollow_message">Are you sure you want to stop following this channel?</string>
<plurals name="follower_count">
<item quantity="one">%1$s follower</item>
<item quantity="other">%1$s followers</item>