Native rewrite #878
13 changed files with 285 additions and 39 deletions
|
@ -14,8 +14,8 @@ android {
|
||||||
applicationId "io.lbry.browser"
|
applicationId "io.lbry.browser"
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion 29
|
targetSdkVersion 29
|
||||||
versionCode 1502
|
versionCode 1503
|
||||||
versionName "0.15.2"
|
versionName "0.15.3"
|
||||||
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,16 @@ public class InlineChannelSpinnerAdapter extends ArrayAdapter<Claim> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getItemPosition(Claim item) {
|
||||||
|
for (int i = 0; i < channels.size(); i++) {
|
||||||
|
Claim channel = channels.get(i);
|
||||||
|
if (item.getClaimId().equalsIgnoreCase(channel.getClaimId())) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View getDropDownView(int position, View view, ViewGroup parent) {
|
public View getDropDownView(int position, View view, ViewGroup parent) {
|
||||||
return createView(position, view, parent);
|
return createView(position, view, parent);
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
package io.lbry.browser.adapter;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
|
import io.lbry.browser.R;
|
||||||
|
import io.lbry.browser.model.Language;
|
||||||
|
import io.lbry.browser.utils.Predefined;
|
||||||
|
|
||||||
|
public class LanguageSpinnerAdapter extends ArrayAdapter<Language> {
|
||||||
|
private int layoutResourceId;
|
||||||
|
private LayoutInflater inflater;
|
||||||
|
|
||||||
|
public LanguageSpinnerAdapter(Context context, int resource) {
|
||||||
|
super(context, resource, 0, Predefined.PUBLISH_LANGUAGES);
|
||||||
|
inflater = LayoutInflater.from(context);
|
||||||
|
layoutResourceId = resource;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View getDropDownView(int position, View view, @NonNull ViewGroup parent) {
|
||||||
|
return createView(position, view, parent);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public View getView(int position, View view, @NonNull ViewGroup parent) {
|
||||||
|
return createView(position, view, parent);
|
||||||
|
}
|
||||||
|
private View createView(int position, View convertView, ViewGroup parent) {
|
||||||
|
Language item = getItem(position);
|
||||||
|
View view = inflater.inflate(layoutResourceId, parent, false);
|
||||||
|
TextView label = view.findViewById(R.id.item_display_name);
|
||||||
|
label.setText(item != null ? item.getStringResourceId() : 0);
|
||||||
|
|
||||||
|
return view;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,42 @@
|
||||||
|
package io.lbry.browser.adapter;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
|
import io.lbry.browser.R;
|
||||||
|
import io.lbry.browser.model.License;
|
||||||
|
import io.lbry.browser.utils.Predefined;
|
||||||
|
|
||||||
|
public class LicenseSpinnerAdapter extends ArrayAdapter<License> {
|
||||||
|
private int layoutResourceId;
|
||||||
|
private LayoutInflater inflater;
|
||||||
|
|
||||||
|
public LicenseSpinnerAdapter(Context context, int resource) {
|
||||||
|
super(context, resource, 0, Predefined.LICENSES);
|
||||||
|
inflater = LayoutInflater.from(context);
|
||||||
|
layoutResourceId = resource;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View getDropDownView(int position, View view, @NonNull ViewGroup parent) {
|
||||||
|
return createView(position, view, parent);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public View getView(int position, View view, @NonNull ViewGroup parent) {
|
||||||
|
return createView(position, view, parent);
|
||||||
|
}
|
||||||
|
private View createView(int position, View convertView, ViewGroup parent) {
|
||||||
|
License item = getItem(position);
|
||||||
|
View view = inflater.inflate(layoutResourceId, parent, false);
|
||||||
|
TextView label = view.findViewById(R.id.item_display_name);
|
||||||
|
label.setText(item != null ? item.getStringResourceId() : 0);
|
||||||
|
|
||||||
|
return view;
|
||||||
|
}
|
||||||
|
}
|
|
@ -21,14 +21,12 @@ import io.lbry.browser.utils.Lbry;
|
||||||
public class PublishClaimTask extends AsyncTask<Void, Void, Claim> {
|
public class PublishClaimTask extends AsyncTask<Void, Void, Claim> {
|
||||||
private Claim claim;
|
private Claim claim;
|
||||||
private String filePath;
|
private String filePath;
|
||||||
private boolean update;
|
|
||||||
private View progressView;
|
private View progressView;
|
||||||
private ClaimResultHandler handler;
|
private ClaimResultHandler handler;
|
||||||
private Exception error;
|
private Exception error;
|
||||||
public PublishClaimTask(Claim claim, String filePath, boolean update, View progressView, ClaimResultHandler handler) {
|
public PublishClaimTask(Claim claim, String filePath, View progressView, ClaimResultHandler handler) {
|
||||||
this.claim = claim;
|
this.claim = claim;
|
||||||
this.filePath = filePath;
|
this.filePath = filePath;
|
||||||
this.update = update;
|
|
||||||
this.progressView = progressView;
|
this.progressView = progressView;
|
||||||
this.handler = handler;
|
this.handler = handler;
|
||||||
}
|
}
|
||||||
|
@ -63,8 +61,15 @@ public class PublishClaimTask extends AsyncTask<Void, Void, Claim> {
|
||||||
if (claim.getSigningChannel() != null) {
|
if (claim.getSigningChannel() != null) {
|
||||||
options.put("channel_id", claim.getSigningChannel().getClaimId());
|
options.put("channel_id", claim.getSigningChannel().getClaimId());
|
||||||
}
|
}
|
||||||
|
if (metadata.getLanguages() != null && metadata.getLanguages().size() > 0) {
|
||||||
// TODO: license, license_url, languages
|
options.put("languages", metadata.getLanguages());
|
||||||
|
}
|
||||||
|
if (!Helper.isNullOrEmpty(metadata.getLicense())) {
|
||||||
|
options.put("license", metadata.getLicense());
|
||||||
|
}
|
||||||
|
if (!Helper.isNullOrEmpty(metadata.getLicenseUrl())) {
|
||||||
|
options.put("license_url", metadata.getLicenseUrl());
|
||||||
|
}
|
||||||
|
|
||||||
Claim claimResult = null;
|
Claim claimResult = null;
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -377,11 +377,12 @@ public class ChannelFragment extends BaseFragment implements FetchChannelsListen
|
||||||
String coverUrl = claim.getCoverUrl();
|
String coverUrl = claim.getCoverUrl();
|
||||||
textTitle.setText(Helper.isNullOrEmpty(claim.getTitle()) ? claim.getName() : claim.getTitle());
|
textTitle.setText(Helper.isNullOrEmpty(claim.getTitle()) ? claim.getName() : claim.getTitle());
|
||||||
|
|
||||||
if (!Helper.isNullOrEmpty(coverUrl)) {
|
Context context = getContext();
|
||||||
Glide.with(getContext().getApplicationContext()).load(coverUrl).centerCrop().into(imageCover);
|
if (context != null && !Helper.isNullOrEmpty(coverUrl)) {
|
||||||
|
Glide.with(context.getApplicationContext()).load(coverUrl).centerCrop().into(imageCover);
|
||||||
}
|
}
|
||||||
if (!Helper.isNullOrEmpty(thumbnailUrl)) {
|
if (context != null && !Helper.isNullOrEmpty(thumbnailUrl)) {
|
||||||
Glide.with(getContext().getApplicationContext()).load(thumbnailUrl).apply(RequestOptions.circleCropTransform()).into(imageThumbnail);
|
Glide.with(context.getApplicationContext()).load(thumbnailUrl).apply(RequestOptions.circleCropTransform()).into(imageThumbnail);
|
||||||
noThumbnailView.setVisibility(View.GONE);
|
noThumbnailView.setVisibility(View.GONE);
|
||||||
} else {
|
} else {
|
||||||
imageThumbnail.setVisibility(View.GONE);
|
imageThumbnail.setVisibility(View.GONE);
|
||||||
|
|
|
@ -574,8 +574,14 @@ public class FileViewFragment extends BaseFragment implements
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
ImageView descIndicator = root.findViewById(R.id.file_view_desc_toggle_arrow);
|
ImageView descIndicator = root.findViewById(R.id.file_view_desc_toggle_arrow);
|
||||||
View descriptionArea = root.findViewById(R.id.file_view_description_area);
|
View descriptionArea = root.findViewById(R.id.file_view_description_area);
|
||||||
|
|
||||||
|
boolean hasDescription = claim != null && !Helper.isNullOrEmpty(claim.getDescription());
|
||||||
|
boolean hasTags = claim != null && claim.getTags() != null && claim.getTags().size() > 0;
|
||||||
|
|
||||||
if (descriptionArea.getVisibility() != View.VISIBLE) {
|
if (descriptionArea.getVisibility() != View.VISIBLE) {
|
||||||
|
if (hasDescription || hasTags) {
|
||||||
descriptionArea.setVisibility(View.VISIBLE);
|
descriptionArea.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
descIndicator.setImageResource(R.drawable.ic_arrow_dropup);
|
descIndicator.setImageResource(R.drawable.ic_arrow_dropup);
|
||||||
} else {
|
} else {
|
||||||
descriptionArea.setVisibility(View.GONE);
|
descriptionArea.setVisibility(View.GONE);
|
||||||
|
|
|
@ -44,6 +44,7 @@ import com.google.android.material.button.MaterialButton;
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
import com.google.android.material.switchmaterial.SwitchMaterial;
|
import com.google.android.material.switchmaterial.SwitchMaterial;
|
||||||
import com.google.android.material.textfield.TextInputEditText;
|
import com.google.android.material.textfield.TextInputEditText;
|
||||||
|
import com.google.android.material.textfield.TextInputLayout;
|
||||||
|
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
|
@ -53,6 +54,7 @@ import java.io.File;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -60,6 +62,8 @@ import io.lbry.browser.BuildConfig;
|
||||||
import io.lbry.browser.MainActivity;
|
import io.lbry.browser.MainActivity;
|
||||||
import io.lbry.browser.R;
|
import io.lbry.browser.R;
|
||||||
import io.lbry.browser.adapter.InlineChannelSpinnerAdapter;
|
import io.lbry.browser.adapter.InlineChannelSpinnerAdapter;
|
||||||
|
import io.lbry.browser.adapter.LanguageSpinnerAdapter;
|
||||||
|
import io.lbry.browser.adapter.LicenseSpinnerAdapter;
|
||||||
import io.lbry.browser.adapter.TagListAdapter;
|
import io.lbry.browser.adapter.TagListAdapter;
|
||||||
import io.lbry.browser.listener.FilePickerListener;
|
import io.lbry.browser.listener.FilePickerListener;
|
||||||
import io.lbry.browser.listener.SdkStatusListener;
|
import io.lbry.browser.listener.SdkStatusListener;
|
||||||
|
@ -68,6 +72,8 @@ import io.lbry.browser.listener.WalletBalanceListener;
|
||||||
import io.lbry.browser.model.Claim;
|
import io.lbry.browser.model.Claim;
|
||||||
import io.lbry.browser.model.Fee;
|
import io.lbry.browser.model.Fee;
|
||||||
import io.lbry.browser.model.GalleryItem;
|
import io.lbry.browser.model.GalleryItem;
|
||||||
|
import io.lbry.browser.model.Language;
|
||||||
|
import io.lbry.browser.model.License;
|
||||||
import io.lbry.browser.model.NavMenuItem;
|
import io.lbry.browser.model.NavMenuItem;
|
||||||
import io.lbry.browser.model.Tag;
|
import io.lbry.browser.model.Tag;
|
||||||
import io.lbry.browser.model.WalletBalance;
|
import io.lbry.browser.model.WalletBalance;
|
||||||
|
@ -142,6 +148,8 @@ public class PublishFormFragment extends BaseFragment implements
|
||||||
private TextInputEditText inputPrice;
|
private TextInputEditText inputPrice;
|
||||||
private TextInputEditText inputAddress;
|
private TextInputEditText inputAddress;
|
||||||
private TextInputEditText inputDeposit;
|
private TextInputEditText inputDeposit;
|
||||||
|
private TextInputEditText inputOtherLicenseDescription;
|
||||||
|
private TextInputLayout layoutOtherLicenseDescription;
|
||||||
private View inlineDepositBalanceContainer;
|
private View inlineDepositBalanceContainer;
|
||||||
private TextView inlineDepositBalanceValue;
|
private TextView inlineDepositBalanceValue;
|
||||||
|
|
||||||
|
@ -161,11 +169,11 @@ public class PublishFormFragment extends BaseFragment implements
|
||||||
private String lastSelectedThumbnailFile;
|
private String lastSelectedThumbnailFile;
|
||||||
private String uploadedThumbnailUrl;
|
private String uploadedThumbnailUrl;
|
||||||
private boolean editFieldsLoaded;
|
private boolean editFieldsLoaded;
|
||||||
|
private boolean editChannelSpinnerLoaded;
|
||||||
private Claim currentClaim;
|
private Claim currentClaim;
|
||||||
private GalleryItem currentGalleryItem;
|
private GalleryItem currentGalleryItem;
|
||||||
private String currentFilePath;
|
private String currentFilePath;
|
||||||
private String transcodedFilePath;
|
private String transcodedFilePath;
|
||||||
private boolean fileLoaded;
|
|
||||||
|
|
||||||
private View mediaContainer;
|
private View mediaContainer;
|
||||||
private View uploadProgress;
|
private View uploadProgress;
|
||||||
|
@ -176,7 +184,6 @@ public class PublishFormFragment extends BaseFragment implements
|
||||||
private TextView textOptimizationStatus;
|
private TextView textOptimizationStatus;
|
||||||
private TextView textOptimizationElapsed;
|
private TextView textOptimizationElapsed;
|
||||||
|
|
||||||
|
|
||||||
public View onCreateView(@NonNull LayoutInflater inflater,
|
public View onCreateView(@NonNull LayoutInflater inflater,
|
||||||
ViewGroup container, Bundle savedInstanceState) {
|
ViewGroup container, Bundle savedInstanceState) {
|
||||||
View root = inflater.inflate(R.layout.fragment_publish_form, container, false);
|
View root = inflater.inflate(R.layout.fragment_publish_form, container, false);
|
||||||
|
@ -215,7 +222,11 @@ public class PublishFormFragment extends BaseFragment implements
|
||||||
inputPrice = root.findViewById(R.id.publish_form_input_price);
|
inputPrice = root.findViewById(R.id.publish_form_input_price);
|
||||||
inputAddress = root.findViewById(R.id.publish_form_input_address);
|
inputAddress = root.findViewById(R.id.publish_form_input_address);
|
||||||
inputDeposit = root.findViewById(R.id.publish_form_input_deposit);
|
inputDeposit = root.findViewById(R.id.publish_form_input_deposit);
|
||||||
|
inputOtherLicenseDescription = root.findViewById(R.id.publish_form_input_license_other);
|
||||||
|
layoutOtherLicenseDescription = root.findViewById(R.id.publish_form_license_other_layout);
|
||||||
priceCurrencySpinner = root.findViewById(R.id.publish_form_currency_spinner);
|
priceCurrencySpinner = root.findViewById(R.id.publish_form_currency_spinner);
|
||||||
|
languageSpinner = root.findViewById(R.id.publish_form_language_spinner);
|
||||||
|
licenseSpinner = root.findViewById(R.id.publish_form_license_spinner);
|
||||||
|
|
||||||
linkPublishCancel = root.findViewById(R.id.publish_form_cancel);
|
linkPublishCancel = root.findViewById(R.id.publish_form_cancel);
|
||||||
buttonPublish = root.findViewById(R.id.publish_form_publish_button);
|
buttonPublish = root.findViewById(R.id.publish_form_publish_button);
|
||||||
|
@ -263,12 +274,36 @@ public class PublishFormFragment extends BaseFragment implements
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initUi() {
|
private void initUi() {
|
||||||
|
Context context = getContext();
|
||||||
|
languageSpinner.setAdapter(new LanguageSpinnerAdapter(context, R.layout.spinner_item_generic));
|
||||||
|
licenseSpinner.setAdapter(new LicenseSpinnerAdapter(context, R.layout.spinner_item_generic));
|
||||||
|
|
||||||
|
licenseSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
||||||
|
@Override
|
||||||
|
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
|
||||||
|
License license = (License) adapterView.getAdapter().getItem(position);
|
||||||
|
boolean otherLicense = Arrays.asList(
|
||||||
|
Predefined.LICENSE_COPYRIGHTED.toLowerCase(),
|
||||||
|
Predefined.LICENSE_OTHER.toLowerCase()).contains(license.getName().toLowerCase());
|
||||||
|
Helper.setViewVisibility(layoutOtherLicenseDescription, otherLicense ? View.VISIBLE : View.GONE);
|
||||||
|
if (!otherLicense) {
|
||||||
|
inputOtherLicenseDescription.setText(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onNothingSelected(AdapterView<?> adapterView) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
linkGenerateAddress.setOnClickListener(new View.OnClickListener() {
|
linkGenerateAddress.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
|
if (!editMode) {
|
||||||
inputAddress.setText(Helper.generateUrl());
|
inputAddress.setText(Helper.generateUrl());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
switchPrice.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
switchPrice.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
||||||
|
@ -474,9 +509,7 @@ public class PublishFormFragment extends BaseFragment implements
|
||||||
this.currentClaim = claim;
|
this.currentClaim = claim;
|
||||||
editFieldsLoaded = false;
|
editFieldsLoaded = false;
|
||||||
}
|
}
|
||||||
}
|
} else if (params.containsKey("galleryItem")) {
|
||||||
|
|
||||||
if (params.containsKey("galleryItem")) {
|
|
||||||
currentGalleryItem = (GalleryItem) params.get("galleryItem");
|
currentGalleryItem = (GalleryItem) params.get("galleryItem");
|
||||||
} else if (params.containsKey("directFilePath")) {
|
} else if (params.containsKey("directFilePath")) {
|
||||||
currentFilePath = (String) params.get("directFilePath");
|
currentFilePath = (String) params.get("directFilePath");
|
||||||
|
@ -516,8 +549,33 @@ public class PublishFormFragment extends BaseFragment implements
|
||||||
|
|
||||||
private void updateFieldsFromCurrentClaim() {
|
private void updateFieldsFromCurrentClaim() {
|
||||||
if (currentClaim != null && !editFieldsLoaded) {
|
if (currentClaim != null && !editFieldsLoaded) {
|
||||||
|
Context context = getContext();
|
||||||
|
Claim.StreamMetadata metadata = (Claim.StreamMetadata) currentClaim.getValue();
|
||||||
|
uploadedThumbnailUrl = currentClaim.getThumbnailUrl();
|
||||||
|
if (context != null && !Helper.isNullOrEmpty(uploadedThumbnailUrl)) {
|
||||||
|
Glide.with(context.getApplicationContext()).load(uploadedThumbnailUrl).centerCrop().into(imageThumbnail);
|
||||||
|
}
|
||||||
|
|
||||||
|
inputTitle.setText(currentClaim.getTitle());
|
||||||
|
inputDescription.setText(currentClaim.getDescription());
|
||||||
|
if (addedTagsAdapter != null && currentClaim.getTagObjects() != null) {
|
||||||
|
addedTagsAdapter.addTags(currentClaim.getTagObjects());
|
||||||
|
updateSuggestedTags(currentFilter, SUGGESTED_LIMIT, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (metadata.getFee() != null) {
|
||||||
|
Fee fee = metadata.getFee();
|
||||||
|
switchPrice.setChecked(true);
|
||||||
|
inputPrice.setText(fee.getAmount());
|
||||||
|
priceCurrencySpinner.setSelection("lbc".equalsIgnoreCase(fee.getCurrency()) ? 0 : 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
inputAddress.setText(currentClaim.getName());
|
||||||
|
inputDeposit.setText(currentClaim.getAmount());
|
||||||
|
|
||||||
|
inputAddress.setEnabled(false);
|
||||||
|
editMode = true;
|
||||||
|
editFieldsLoaded = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -858,6 +916,13 @@ public class PublishFormFragment extends BaseFragment implements
|
||||||
}
|
}
|
||||||
|
|
||||||
if (channelSpinnerAdapter != null && channelSpinner != null) {
|
if (channelSpinnerAdapter != null && channelSpinner != null) {
|
||||||
|
if (editMode && currentClaim.getSigningChannel() != null && !editChannelSpinnerLoaded) {
|
||||||
|
int position = channelSpinnerAdapter.getItemPosition(currentClaim.getSigningChannel());
|
||||||
|
if (position > -1) {
|
||||||
|
channelSpinner.setSelection(position);
|
||||||
|
}
|
||||||
|
editChannelSpinnerLoaded = true;
|
||||||
|
} else {
|
||||||
if (channelSpinnerAdapter.getCount() > 2) {
|
if (channelSpinnerAdapter.getCount() > 2) {
|
||||||
// if anonymous displayed, select first channel if available
|
// if anonymous displayed, select first channel if available
|
||||||
channelSpinner.setSelection(2);
|
channelSpinner.setSelection(2);
|
||||||
|
@ -867,6 +932,7 @@ public class PublishFormFragment extends BaseFragment implements
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private Claim buildPublishClaim() {
|
private Claim buildPublishClaim() {
|
||||||
Claim claim = new Claim();
|
Claim claim = new Claim();
|
||||||
|
@ -889,14 +955,26 @@ public class PublishFormFragment extends BaseFragment implements
|
||||||
fee.setAmount(Helper.getValue(inputPrice.getText()));
|
fee.setAmount(Helper.getValue(inputPrice.getText()));
|
||||||
metadata.setFee(fee);
|
metadata.setFee(fee);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Helper.isNullOrEmpty(uploadedThumbnailUrl)) {
|
if (!Helper.isNullOrEmpty(uploadedThumbnailUrl)) {
|
||||||
Claim.Resource thumbnail = new Claim.Resource();
|
Claim.Resource thumbnail = new Claim.Resource();
|
||||||
thumbnail.setUrl(uploadedThumbnailUrl);
|
thumbnail.setUrl(uploadedThumbnailUrl);
|
||||||
metadata.setThumbnail(thumbnail);
|
metadata.setThumbnail(thumbnail);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: License, LicenseDescription, LicenseUrl, Language
|
Language selectedLanguage = (Language) languageSpinner.getSelectedItem();
|
||||||
|
if (selectedLanguage != null) {
|
||||||
|
metadata.setLanguages(Arrays.asList(selectedLanguage.getCode()));
|
||||||
|
}
|
||||||
|
|
||||||
|
License selectedLicense = (License) licenseSpinner.getSelectedItem();
|
||||||
|
if (selectedLicense != null) {
|
||||||
|
boolean otherLicense = Arrays.asList(
|
||||||
|
Predefined.LICENSE_COPYRIGHTED.toLowerCase(),
|
||||||
|
Predefined.LICENSE_OTHER.toLowerCase()).contains(selectedLicense.getName().toLowerCase());
|
||||||
|
metadata.setLicense(otherLicense ? Helper.getValue(inputOtherLicenseDescription.getText()) : selectedLicense.getName());
|
||||||
|
metadata.setLicenseUrl(selectedLicense.getUrl());
|
||||||
|
}
|
||||||
|
|
||||||
claim.setValueType(Claim.TYPE_STREAM);
|
claim.setValueType(Claim.TYPE_STREAM);
|
||||||
claim.setValue(metadata);
|
claim.setValue(metadata);
|
||||||
|
|
||||||
|
@ -916,13 +994,13 @@ public class PublishFormFragment extends BaseFragment implements
|
||||||
showError(getString(R.string.address_invalid_characters));
|
showError(getString(R.string.address_invalid_characters));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (Helper.claimNameExists(claim.getName())) {
|
if (!editMode && Helper.claimNameExists(claim.getName())) {
|
||||||
showError(getString(R.string.address_already_used));
|
showError(getString(R.string.address_already_used));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
String publishFilePath = currentGalleryItem != null ? currentGalleryItem.getFilePath() : currentFilePath;
|
String publishFilePath = currentGalleryItem != null ? currentGalleryItem.getFilePath() : currentFilePath;
|
||||||
if (Helper.isNullOrEmpty(publishFilePath) && Helper.isNullOrEmpty(transcodedFilePath)) {
|
if (!editMode && Helper.isNullOrEmpty(publishFilePath) && Helper.isNullOrEmpty(transcodedFilePath)) {
|
||||||
showError(getString(R.string.no_file_selected));
|
showError(getString(R.string.no_file_selected));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -936,7 +1014,7 @@ public class PublishFormFragment extends BaseFragment implements
|
||||||
finalFilePath = currentGalleryItem != null ? currentGalleryItem.getFilePath() : currentFilePath;
|
finalFilePath = currentGalleryItem != null ? currentGalleryItem.getFilePath() : currentFilePath;
|
||||||
}
|
}
|
||||||
saveInProgress = true;
|
saveInProgress = true;
|
||||||
PublishClaimTask task = new PublishClaimTask(claim, finalFilePath, editMode, progressPublish, new ClaimResultHandler() {
|
PublishClaimTask task = new PublishClaimTask(claim, finalFilePath, progressPublish, new ClaimResultHandler() {
|
||||||
@Override
|
@Override
|
||||||
public void beforeStart() {
|
public void beforeStart() {
|
||||||
preSave();
|
preSave();
|
||||||
|
@ -946,8 +1024,6 @@ public class PublishFormFragment extends BaseFragment implements
|
||||||
public void onSuccess(Claim claimResult) {
|
public void onSuccess(Claim claimResult) {
|
||||||
postSave();
|
postSave();
|
||||||
|
|
||||||
android.util.Log.d("#HELP", claimResult.toString());
|
|
||||||
|
|
||||||
// Run the logPublish task
|
// Run the logPublish task
|
||||||
if (!BuildConfig.DEBUG) {
|
if (!BuildConfig.DEBUG) {
|
||||||
LogPublishTask logPublish = new LogPublishTask(claimResult);
|
LogPublishTask logPublish = new LogPublishTask(claimResult);
|
||||||
|
|
|
@ -34,6 +34,7 @@ import io.lbry.browser.adapter.ClaimListAdapter;
|
||||||
import io.lbry.browser.listener.SdkStatusListener;
|
import io.lbry.browser.listener.SdkStatusListener;
|
||||||
import io.lbry.browser.listener.SelectionModeListener;
|
import io.lbry.browser.listener.SelectionModeListener;
|
||||||
import io.lbry.browser.model.Claim;
|
import io.lbry.browser.model.Claim;
|
||||||
|
import io.lbry.browser.model.NavMenuItem;
|
||||||
import io.lbry.browser.tasks.claim.AbandonHandler;
|
import io.lbry.browser.tasks.claim.AbandonHandler;
|
||||||
import io.lbry.browser.tasks.claim.AbandonStreamTask;
|
import io.lbry.browser.tasks.claim.AbandonStreamTask;
|
||||||
import io.lbry.browser.tasks.claim.ClaimListResultHandler;
|
import io.lbry.browser.tasks.claim.ClaimListResultHandler;
|
||||||
|
@ -82,7 +83,7 @@ public class PublishesFragment extends BaseFragment implements ActionMode.Callba
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
Context context = getContext();
|
Context context = getContext();
|
||||||
if (context instanceof MainActivity) {
|
if (context instanceof MainActivity) {
|
||||||
//((MainActivity) context).openPublishForm(null);
|
((MainActivity) context).openFragment(PublishFragment.class, true, NavMenuItem.ID_ITEM_NEW_PUBLISH);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -245,9 +246,7 @@ public class PublishesFragment extends BaseFragment implements ActionMode.Callba
|
||||||
// start channel editor with the claim
|
// start channel editor with the claim
|
||||||
Context context = getContext();
|
Context context = getContext();
|
||||||
if (context instanceof MainActivity) {
|
if (context instanceof MainActivity) {
|
||||||
Map<String, Object> params = new HashMap<>();
|
((MainActivity) context).openPublishForm(claim);
|
||||||
params.put("claim", claim);
|
|
||||||
/*((MainActivity) context).openFragment(PublishFormFragment.class, true, NavMenuItem.ID_ITEM_NEW_PUBLISH, params);*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
actionMode.finish();
|
actionMode.finish();
|
||||||
|
|
|
@ -2,6 +2,11 @@ package io.lbry.browser.utils;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import io.lbry.browser.R;
|
||||||
|
import io.lbry.browser.model.Language;
|
||||||
|
import io.lbry.browser.model.License;
|
||||||
|
|
||||||
public final class Predefined {
|
public final class Predefined {
|
||||||
public static final List<String> DEFAULT_KNOWN_TAGS = Arrays.asList(
|
public static final List<String> DEFAULT_KNOWN_TAGS = Arrays.asList(
|
||||||
|
@ -1847,4 +1852,47 @@ public final class Predefined {
|
||||||
"Yak",
|
"Yak",
|
||||||
"Zebra"
|
"Zebra"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
public static final List<Language> PUBLISH_LANGUAGES = Arrays.asList(
|
||||||
|
new Language("en", "English", R.string.english),
|
||||||
|
new Language("zh", "Chinese", R.string.chinese),
|
||||||
|
new Language("fr", "French", R.string.french),
|
||||||
|
new Language("de", "German", R.string.german),
|
||||||
|
new Language("jp", "Japanese", R.string.japanese),
|
||||||
|
new Language("ru", "Russian", R.string.russian),
|
||||||
|
new Language("es", "Spanish", R.string.spanish),
|
||||||
|
new Language("id", "Indonesian", R.string.indonesian),
|
||||||
|
new Language("it", "Italian", R.string.italian),
|
||||||
|
new Language("nl", "Dutch", R.string.dutch),
|
||||||
|
new Language("tr", "Turkish", R.string.turkish),
|
||||||
|
new Language("pl", "Polish", R.string.polish),
|
||||||
|
new Language("ms", "Malay", R.string.malay),
|
||||||
|
new Language("pt", "Portuguese", R.string.portuguese),
|
||||||
|
new Language("vi", "Vietnamese", R.string.vietnamese),
|
||||||
|
new Language("th", "Thai", R.string.thai),
|
||||||
|
new Language("ar", "Arabic", R.string.arabic),
|
||||||
|
new Language("cs", "Czech", R.string.czech),
|
||||||
|
new Language("hr", "Croatian", R.string.croatian),
|
||||||
|
new Language("km", "Cambodian", R.string.cambodian),
|
||||||
|
new Language("ko", "Korean", R.string.korean),
|
||||||
|
new Language("no", "Norwegian", R.string.norwegian),
|
||||||
|
new Language("ro", "Romanian", R.string.romanian),
|
||||||
|
new Language("hi", "Hindi", R.string.hindi),
|
||||||
|
new Language("el", "Greek", R.string.greek)
|
||||||
|
);
|
||||||
|
|
||||||
|
public static final String LICENSE_COPYRIGHTED = "Copyrighted";
|
||||||
|
public static final String LICENSE_OTHER = "Other";
|
||||||
|
public static final List<License> LICENSES = Arrays.asList(
|
||||||
|
new License("None", R.string.none),
|
||||||
|
new License("Public Domain", R.string.public_domain),
|
||||||
|
new License("Creative Commons Attribution 4.0 International", "https://creativecommons.org/licenses/by/4.0/legalcode", R.string.cca_4_0_international),
|
||||||
|
new License("Creative Commons Attribution-ShareAlike 4.0 International", "https://creativecommons.org/licenses/by-sa/4.0/legalcode", R.string.cca_sa_4_0_international),
|
||||||
|
new License("Creative Commons Attribution-NoDerivatives 4.0 International", "https://creativecommons.org/licenses/by-nd/4.0/legalcode", R.string.cca_nd_4_0_international),
|
||||||
|
new License("Creative Commons Attribution-NonCommercial 4.0 International", "https://creativecommons.org/licenses/by-nc/4.0/legalcode", R.string.cca_nc_4_0_international),
|
||||||
|
new License("Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International", "https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode", R.string.cca_nc_sa_4_0_international),
|
||||||
|
new License("Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International", "https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode", R.string.cca_nc_nd_4_0_international),
|
||||||
|
new License(LICENSE_COPYRIGHTED, R.string.copyrighted),
|
||||||
|
new License(LICENSE_OTHER, R.string.other)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -121,7 +121,8 @@
|
||||||
android:id="@+id/publish_form_video_opt_card"
|
android:id="@+id/publish_form_video_opt_card"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="16dp">
|
android:layout_marginTop="16dp"
|
||||||
|
android:visibility="gone">
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
@ -492,14 +493,14 @@
|
||||||
android:layout_marginTop="4dp" />
|
android:layout_marginTop="4dp" />
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
android:id="@+id/publish_form_license_desc_input_layout"
|
android:id="@+id/publish_form_license_other_layout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="16dp"
|
android:layout_marginTop="16dp"
|
||||||
android:hint="@string/license_desc"
|
android:hint="@string/license_desc"
|
||||||
android:visibility="gone">
|
android:visibility="gone">
|
||||||
<com.google.android.material.textfield.TextInputEditText
|
<com.google.android.material.textfield.TextInputEditText
|
||||||
android:id="@+id/publish_form_license_desc_input"
|
android:id="@+id/publish_form_input_license_other"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:fontFamily="@font/inter"
|
android:fontFamily="@font/inter"
|
||||||
|
|
16
app/src/main/res/layout/spinner_item_generic.xml
Normal file
16
app/src/main/res/layout/spinner_item_generic.xml
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:padding="12dp">
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/item_display_name"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:fontFamily="@font/inter"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:textFontWeight="300" />
|
||||||
|
</LinearLayout>
|
|
@ -166,7 +166,7 @@
|
||||||
|
|
||||||
<string name="none">None</string>
|
<string name="none">None</string>
|
||||||
<string name="public_domain">Public Domain</string>
|
<string name="public_domain">Public Domain</string>
|
||||||
<string name="copyright">Copyright</string>
|
<string name="copyrighted">Copyrighted</string>
|
||||||
<string name="cca_4_0_international">Creative Commons Attribution 4.0 International</string>
|
<string name="cca_4_0_international">Creative Commons Attribution 4.0 International</string>
|
||||||
<string name="cca_sa_4_0_international">Creative Commons Attribution-ShareAlike 4.0 International</string>
|
<string name="cca_sa_4_0_international">Creative Commons Attribution-ShareAlike 4.0 International</string>
|
||||||
<string name="cca_nd_4_0_international">Creative Commons Attribution-NoDerivatives 4.0 International</string>
|
<string name="cca_nd_4_0_international">Creative Commons Attribution-NoDerivatives 4.0 International</string>
|
||||||
|
|
Loading…
Reference in a new issue