mirror of
https://codeberg.org/anoncontributorxmr/mysu.git
synced 2024-12-22 21:17:47 +00:00
Convert adapters to Kotlin
This commit is contained in:
parent
19b5a55932
commit
68dfd3797c
5 changed files with 371 additions and 422 deletions
|
@ -13,176 +13,170 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package net.mynero.wallet.adapter
|
||||
|
||||
package net.mynero.wallet.adapter;
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.View.OnLongClickListener
|
||||
import android.view.ViewGroup
|
||||
import android.widget.TextView
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import net.mynero.wallet.R
|
||||
import net.mynero.wallet.model.CoinsInfo
|
||||
import net.mynero.wallet.model.Wallet
|
||||
import net.mynero.wallet.service.PrefService
|
||||
import net.mynero.wallet.service.UTXOService
|
||||
import net.mynero.wallet.util.Constants
|
||||
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import net.mynero.wallet.R;
|
||||
import net.mynero.wallet.model.CoinsInfo;
|
||||
import net.mynero.wallet.model.Wallet;
|
||||
import net.mynero.wallet.service.PrefService;
|
||||
import net.mynero.wallet.service.UTXOService;
|
||||
import net.mynero.wallet.util.Constants;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public class CoinsInfoAdapter extends RecyclerView.Adapter<CoinsInfoAdapter.ViewHolder> {
|
||||
|
||||
private List<CoinsInfo> localDataSet; // <public-key, coinsinfo>
|
||||
private final HashMap<String, CoinsInfo> selectedUtxos; // <public-key, coinsinfo>
|
||||
private CoinsInfoAdapterListener listener = null;
|
||||
private boolean editing = false;
|
||||
class CoinsInfoAdapter(val listener: CoinsInfoAdapterListener?) :
|
||||
RecyclerView.Adapter<CoinsInfoAdapter.ViewHolder>() {
|
||||
private var localDataSet // <public-key, coinsinfo>
|
||||
: List<CoinsInfo>
|
||||
@JvmField
|
||||
val selectedUtxos // <public-key, coinsinfo>
|
||||
: HashMap<String?, CoinsInfo>
|
||||
private var editing = false
|
||||
|
||||
/**
|
||||
* Initialize the dataset of the Adapter.
|
||||
*/
|
||||
public CoinsInfoAdapter(CoinsInfoAdapterListener listener) {
|
||||
this.listener = listener;
|
||||
this.localDataSet = new ArrayList<>();
|
||||
this.selectedUtxos = new HashMap<>();
|
||||
init {
|
||||
localDataSet = ArrayList()
|
||||
selectedUtxos = HashMap()
|
||||
}
|
||||
|
||||
public void submitList(HashMap<String, CoinsInfo> dataSet) {
|
||||
this.localDataSet = new ArrayList<>(dataSet.values());
|
||||
notifyDataSetChanged();
|
||||
fun submitList(dataSet: HashMap<String?, CoinsInfo>) {
|
||||
localDataSet = ArrayList(dataSet.values)
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
public void deselectUtxo(CoinsInfo coinsInfo) {
|
||||
this.selectedUtxos.remove(coinsInfo.pubKey);
|
||||
|
||||
if(this.selectedUtxos.size() == 0) {
|
||||
editing = false;
|
||||
fun deselectUtxo(coinsInfo: CoinsInfo) {
|
||||
selectedUtxos.remove(coinsInfo.pubKey)
|
||||
if (selectedUtxos.size == 0) {
|
||||
editing = false
|
||||
}
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
notifyDataSetChanged();
|
||||
fun selectUtxo(coinsInfo: CoinsInfo) {
|
||||
editing = true
|
||||
selectedUtxos[coinsInfo.pubKey] = coinsInfo
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
public void selectUtxo(CoinsInfo coinsInfo) {
|
||||
editing = true;
|
||||
this.selectedUtxos.put(coinsInfo.pubKey, coinsInfo);
|
||||
notifyDataSetChanged();
|
||||
operator fun contains(coinsInfo: CoinsInfo): Boolean {
|
||||
return selectedUtxos.containsKey(coinsInfo.pubKey)
|
||||
}
|
||||
|
||||
public boolean contains(CoinsInfo coinsInfo) {
|
||||
return selectedUtxos.containsKey(coinsInfo.pubKey);
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
this.selectedUtxos.clear();
|
||||
editing = false;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public HashMap<String, CoinsInfo> getSelectedUtxos() {
|
||||
return selectedUtxos;
|
||||
fun clear() {
|
||||
selectedUtxos.clear()
|
||||
editing = false
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
// Create new views (invoked by the layout manager)
|
||||
@Override
|
||||
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
|
||||
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
|
||||
// Create a new view, which defines the UI of the list item
|
||||
View view = LayoutInflater.from(viewGroup.getContext())
|
||||
.inflate(R.layout.utxo_selection_item, viewGroup, false);
|
||||
|
||||
return new ViewHolder(listener, view);
|
||||
val view = LayoutInflater.from(viewGroup.context)
|
||||
.inflate(R.layout.utxo_selection_item, viewGroup, false)
|
||||
return ViewHolder(listener, view)
|
||||
}
|
||||
|
||||
// Replace the contents of a view (invoked by the layout manager)
|
||||
@Override
|
||||
public void onBindViewHolder(ViewHolder viewHolder, final int position) {
|
||||
CoinsInfo tx = localDataSet.get(position);
|
||||
viewHolder.bind(editing, tx, selectedUtxos);
|
||||
override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {
|
||||
val tx = localDataSet[position]
|
||||
viewHolder.bind(editing, tx, selectedUtxos)
|
||||
}
|
||||
|
||||
// Return the size of your dataset (invoked by the layout manager)
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return localDataSet.size();
|
||||
override fun getItemCount(): Int {
|
||||
return localDataSet.size
|
||||
}
|
||||
|
||||
public interface CoinsInfoAdapterListener {
|
||||
void onUtxoSelected(CoinsInfo coinsInfo);
|
||||
interface CoinsInfoAdapterListener {
|
||||
fun onUtxoSelected(coinsInfo: CoinsInfo?)
|
||||
}
|
||||
|
||||
/**
|
||||
* Provide a reference to the type of views that you are using
|
||||
* (custom ViewHolder).
|
||||
*/
|
||||
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
|
||||
private CoinsInfo coinsInfo;
|
||||
private boolean editing = false;
|
||||
private final CoinsInfoAdapterListener listener;
|
||||
class ViewHolder(private val listener: CoinsInfoAdapterListener?, view: View) :
|
||||
RecyclerView.ViewHolder(view), View.OnClickListener, OnLongClickListener {
|
||||
private var coinsInfo: CoinsInfo? = null
|
||||
private var editing = false
|
||||
|
||||
public ViewHolder(CoinsInfoAdapterListener listener, View view) {
|
||||
super(view);
|
||||
this.listener = listener;
|
||||
view.setOnClickListener(this);
|
||||
view.setOnLongClickListener(this);
|
||||
init {
|
||||
view.setOnClickListener(this)
|
||||
view.setOnLongClickListener(this)
|
||||
}
|
||||
|
||||
public void bind(boolean editing, CoinsInfo coinsInfo, HashMap<String, CoinsInfo> selectedUtxos) {
|
||||
this.editing = editing;
|
||||
this.coinsInfo = coinsInfo;
|
||||
boolean selected = selectedUtxos.containsKey(coinsInfo.pubKey);
|
||||
|
||||
TextView pubKeyTextView = itemView.findViewById(R.id.utxo_pub_key_textview);
|
||||
TextView amountTextView = itemView.findViewById(R.id.utxo_amount_textview);
|
||||
TextView addressTextView = itemView.findViewById(R.id.utxo_address_textview);
|
||||
TextView globalIdxTextView = itemView.findViewById(R.id.utxo_global_index_textview);
|
||||
TextView outpointTextView = itemView.findViewById(R.id.utxo_outpoint_textview);
|
||||
boolean streetModeEnabled = PrefService.getInstance().getBoolean(Constants.PREF_STREET_MODE, false);
|
||||
String balanceString = streetModeEnabled ? Constants.STREET_MODE_BALANCE : Wallet.getDisplayAmount(coinsInfo.amount);
|
||||
amountTextView.setText(itemView.getResources().getString(R.string.tx_amount_no_prefix, balanceString));
|
||||
pubKeyTextView.setText(coinsInfo.pubKey);
|
||||
addressTextView.setText(coinsInfo.address);
|
||||
globalIdxTextView.setText(itemView.getResources().getString(R.string.global_index_text, coinsInfo.globalOutputIndex));
|
||||
outpointTextView.setText(itemView.getResources().getString(R.string.outpoint_text, coinsInfo.hash + ":" + coinsInfo.localOutputIndex));
|
||||
fun bind(
|
||||
editing: Boolean,
|
||||
coinsInfo: CoinsInfo,
|
||||
selectedUtxos: HashMap<String?, CoinsInfo>
|
||||
) {
|
||||
this.editing = editing
|
||||
this.coinsInfo = coinsInfo
|
||||
val selected = selectedUtxos.containsKey(coinsInfo.pubKey)
|
||||
val pubKeyTextView = itemView.findViewById<TextView>(R.id.utxo_pub_key_textview)
|
||||
val amountTextView = itemView.findViewById<TextView>(R.id.utxo_amount_textview)
|
||||
val addressTextView = itemView.findViewById<TextView>(R.id.utxo_address_textview)
|
||||
val globalIdxTextView = itemView.findViewById<TextView>(R.id.utxo_global_index_textview)
|
||||
val outpointTextView = itemView.findViewById<TextView>(R.id.utxo_outpoint_textview)
|
||||
val streetModeEnabled =
|
||||
PrefService.getInstance().getBoolean(Constants.PREF_STREET_MODE, false)
|
||||
val balanceString =
|
||||
if (streetModeEnabled) Constants.STREET_MODE_BALANCE else Wallet.getDisplayAmount(
|
||||
coinsInfo.amount
|
||||
)
|
||||
amountTextView.text =
|
||||
itemView.resources.getString(R.string.tx_amount_no_prefix, balanceString)
|
||||
pubKeyTextView.text = coinsInfo.pubKey
|
||||
addressTextView.text = coinsInfo.address
|
||||
globalIdxTextView.text =
|
||||
itemView.resources.getString(
|
||||
R.string.global_index_text,
|
||||
coinsInfo.globalOutputIndex
|
||||
)
|
||||
outpointTextView.text = itemView.resources.getString(
|
||||
R.string.outpoint_text,
|
||||
coinsInfo.hash + ":" + coinsInfo.localOutputIndex
|
||||
)
|
||||
if (selected) {
|
||||
itemView.setBackgroundTintList(ContextCompat.getColorStateList(itemView.getContext(), R.color.oled_colorSecondary));
|
||||
} else if(coinsInfo.isFrozen() || UTXOService.instance.isCoinFrozen(coinsInfo)) {
|
||||
itemView.setBackgroundTintList(ContextCompat.getColorStateList(itemView.getContext(), R.color.oled_frozen_utxo));
|
||||
} else if (!coinsInfo.isUnlocked()) {
|
||||
itemView.setBackgroundTintList(ContextCompat.getColorStateList(itemView.getContext(), R.color.oled_locked_utxo));
|
||||
itemView.backgroundTintList =
|
||||
ContextCompat.getColorStateList(itemView.context, R.color.oled_colorSecondary)
|
||||
} else if (coinsInfo.isFrozen || UTXOService.instance.isCoinFrozen(coinsInfo)) {
|
||||
itemView.backgroundTintList =
|
||||
ContextCompat.getColorStateList(itemView.context, R.color.oled_frozen_utxo)
|
||||
} else if (!coinsInfo.isUnlocked) {
|
||||
itemView.backgroundTintList =
|
||||
ContextCompat.getColorStateList(itemView.context, R.color.oled_locked_utxo)
|
||||
} else {
|
||||
itemView.setBackgroundTintList(ContextCompat.getColorStateList(itemView.getContext(), R.color.oled_dialogBackgroundColor));
|
||||
itemView.backgroundTintList =
|
||||
ContextCompat.getColorStateList(
|
||||
itemView.context,
|
||||
R.color.oled_dialogBackgroundColor
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if(!editing) return;
|
||||
boolean unlocked = coinsInfo.isUnlocked();
|
||||
override fun onClick(view: View) {
|
||||
if (!editing) return
|
||||
val unlocked = coinsInfo?.isUnlocked == true
|
||||
if (unlocked) {
|
||||
listener.onUtxoSelected(coinsInfo);
|
||||
listener?.onUtxoSelected(coinsInfo)
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onLongClick(View view) {
|
||||
if(editing) return false;
|
||||
boolean unlocked = coinsInfo.isUnlocked();
|
||||
override fun onLongClick(view: View): Boolean {
|
||||
if (editing) return false
|
||||
val unlocked = coinsInfo?.isUnlocked == true
|
||||
if (unlocked) {
|
||||
listener.onUtxoSelected(coinsInfo);
|
||||
listener?.onUtxoSelected(coinsInfo)
|
||||
}
|
||||
return unlocked;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onLongClickUseDefaultHapticFeedback(@NonNull View v) {
|
||||
return View.OnLongClickListener.super.onLongClickUseDefaultHapticFeedback(v);
|
||||
return unlocked
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -13,140 +13,127 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package net.mynero.wallet.adapter
|
||||
|
||||
package net.mynero.wallet.adapter;
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import android.widget.Toast
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import net.mynero.wallet.R
|
||||
import net.mynero.wallet.data.DefaultNodes
|
||||
import net.mynero.wallet.data.Node
|
||||
import net.mynero.wallet.service.PrefService
|
||||
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import net.mynero.wallet.R;
|
||||
import net.mynero.wallet.data.DefaultNodes;
|
||||
import net.mynero.wallet.data.Node;
|
||||
import net.mynero.wallet.service.PrefService;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class NodeSelectionAdapter extends RecyclerView.Adapter<NodeSelectionAdapter.ViewHolder> {
|
||||
|
||||
private List<Node> localDataSet;
|
||||
private NodeSelectionAdapterListener listener = null;
|
||||
class NodeSelectionAdapter(val listener: NodeSelectionAdapterListener?) :
|
||||
RecyclerView.Adapter<NodeSelectionAdapter.ViewHolder>() {
|
||||
private var localDataSet: List<Node>
|
||||
|
||||
/**
|
||||
* Initialize the dataset of the Adapter.
|
||||
*/
|
||||
public NodeSelectionAdapter(NodeSelectionAdapterListener listener) {
|
||||
this.listener = listener;
|
||||
this.localDataSet = new ArrayList<>();
|
||||
init {
|
||||
localDataSet = ArrayList()
|
||||
}
|
||||
|
||||
public void submitList(List<Node> dataSet) {
|
||||
this.localDataSet = dataSet;
|
||||
notifyDataSetChanged();
|
||||
fun submitList(dataSet: List<Node>) {
|
||||
localDataSet = dataSet
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
public void updateSelectedNode() {
|
||||
notifyDataSetChanged();
|
||||
fun updateSelectedNode() {
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
// Create new views (invoked by the layout manager)
|
||||
@Override
|
||||
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
|
||||
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
|
||||
// Create a new view, which defines the UI of the list item
|
||||
View view = LayoutInflater.from(viewGroup.getContext())
|
||||
.inflate(R.layout.node_selection_item, viewGroup, false);
|
||||
|
||||
return new ViewHolder(listener, view);
|
||||
val view = LayoutInflater.from(viewGroup.context)
|
||||
.inflate(R.layout.node_selection_item, viewGroup, false)
|
||||
return ViewHolder(listener, view)
|
||||
}
|
||||
|
||||
// Replace the contents of a view (invoked by the layout manager)
|
||||
@Override
|
||||
public void onBindViewHolder(ViewHolder viewHolder, final int position) {
|
||||
Node node = localDataSet.get(position);
|
||||
viewHolder.bind(node);
|
||||
override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {
|
||||
val node = localDataSet[position]
|
||||
viewHolder.bind(node)
|
||||
}
|
||||
|
||||
// Return the size of your dataset (invoked by the layout manager)
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return localDataSet.size();
|
||||
override fun getItemCount(): Int {
|
||||
return localDataSet.size
|
||||
}
|
||||
|
||||
public interface NodeSelectionAdapterListener {
|
||||
void onSelectNode(Node node);
|
||||
boolean onSelectEditNode(Node node);
|
||||
interface NodeSelectionAdapterListener {
|
||||
fun onSelectNode(node: Node?)
|
||||
fun onSelectEditNode(node: Node?): Boolean
|
||||
}
|
||||
|
||||
/**
|
||||
* Provide a reference to the type of views that you are using
|
||||
* (custom ViewHolder).
|
||||
*/
|
||||
public static class ViewHolder extends RecyclerView.ViewHolder {
|
||||
private final NodeSelectionAdapterListener listener;
|
||||
|
||||
public ViewHolder(NodeSelectionAdapterListener listener, View view) {
|
||||
super(view);
|
||||
this.listener = listener;
|
||||
}
|
||||
|
||||
public void bind(Node node) {
|
||||
Node currentNode = PrefService.getInstance().getNode();
|
||||
boolean match = node.equals(currentNode);
|
||||
class ViewHolder(private val listener: NodeSelectionAdapterListener?, view: View) :
|
||||
RecyclerView.ViewHolder(
|
||||
view
|
||||
) {
|
||||
fun bind(node: Node) {
|
||||
val currentNode = PrefService.getInstance().node
|
||||
val match = node == currentNode
|
||||
if (match) {
|
||||
itemView.setBackgroundColor(itemView.getResources().getColor(R.color.oled_colorSecondary));
|
||||
itemView.setBackgroundColor(itemView.resources.getColor(R.color.oled_colorSecondary))
|
||||
} else {
|
||||
itemView.setBackgroundColor(itemView.getResources().getColor(android.R.color.transparent));
|
||||
|
||||
itemView.setBackgroundColor(itemView.resources.getColor(android.R.color.transparent))
|
||||
}
|
||||
TextView nodeNameTextView = itemView.findViewById(R.id.node_name_textview);
|
||||
TextView nodeAddressTextView = itemView.findViewById(R.id.node_uri_textview);
|
||||
TextView authTextView = itemView.findViewById(R.id.authenticated_textview);
|
||||
nodeNameTextView.setText(node.getName());
|
||||
nodeAddressTextView.setText(node.getAddress());
|
||||
if(!node.getPassword().isEmpty()) {
|
||||
authTextView.setVisibility(View.VISIBLE);
|
||||
val nodeNameTextView = itemView.findViewById<TextView>(R.id.node_name_textview)
|
||||
val nodeAddressTextView = itemView.findViewById<TextView>(R.id.node_uri_textview)
|
||||
val authTextView = itemView.findViewById<TextView>(R.id.authenticated_textview)
|
||||
nodeNameTextView.text = node.name
|
||||
nodeAddressTextView.text = node.address
|
||||
if (node.password.isNotEmpty()) {
|
||||
authTextView.visibility = View.VISIBLE
|
||||
}
|
||||
ImageView nodeAnonymityNetworkImageView = itemView.findViewById(R.id.anonymity_network_imageview);
|
||||
|
||||
if(node.isOnion()) {
|
||||
nodeAnonymityNetworkImageView.setVisibility(View.VISIBLE);
|
||||
nodeAnonymityNetworkImageView.setImageResource(R.drawable.tor);
|
||||
} else if(node.isI2P()) {
|
||||
nodeAnonymityNetworkImageView.setVisibility(View.VISIBLE);
|
||||
nodeAnonymityNetworkImageView.setImageResource(R.drawable.i2p);
|
||||
val nodeAnonymityNetworkImageView =
|
||||
itemView.findViewById<ImageView>(R.id.anonymity_network_imageview)
|
||||
if (node.isOnion) {
|
||||
nodeAnonymityNetworkImageView.visibility = View.VISIBLE
|
||||
nodeAnonymityNetworkImageView.setImageResource(R.drawable.tor)
|
||||
} else if (node.isI2P) {
|
||||
nodeAnonymityNetworkImageView.visibility = View.VISIBLE
|
||||
nodeAnonymityNetworkImageView.setImageResource(R.drawable.i2p)
|
||||
} else {
|
||||
nodeAnonymityNetworkImageView.setVisibility(View.GONE);
|
||||
nodeAnonymityNetworkImageView.visibility = View.GONE
|
||||
}
|
||||
|
||||
itemView.setOnLongClickListener(view -> {
|
||||
if(match) {
|
||||
Toast.makeText(itemView.getContext(), itemView.getResources().getString(R.string.cant_edit_current_node), Toast.LENGTH_SHORT).show();
|
||||
return true;
|
||||
} else if(isDefaultNode(node)) {
|
||||
Toast.makeText(itemView.getContext(), itemView.getResources().getString(R.string.cant_edit_default_nodes), Toast.LENGTH_SHORT).show();
|
||||
return true;
|
||||
itemView.setOnLongClickListener {
|
||||
if (match) {
|
||||
Toast.makeText(
|
||||
itemView.context,
|
||||
itemView.resources.getString(R.string.cant_edit_current_node),
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
return@setOnLongClickListener true
|
||||
} else if (isDefaultNode(node)) {
|
||||
Toast.makeText(
|
||||
itemView.context,
|
||||
itemView.resources.getString(R.string.cant_edit_default_nodes),
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
return@setOnLongClickListener true
|
||||
} else {
|
||||
return listener.onSelectEditNode(node);
|
||||
return@setOnLongClickListener listener?.onSelectEditNode(node) == true
|
||||
}
|
||||
});
|
||||
itemView.setOnClickListener(view -> listener.onSelectNode(node));
|
||||
}
|
||||
itemView.setOnClickListener { listener?.onSelectNode(node) }
|
||||
}
|
||||
|
||||
private boolean isDefaultNode(Node currentNode) {
|
||||
boolean isDefault = false;
|
||||
for(DefaultNodes defaultNode : DefaultNodes.values()) {
|
||||
if(currentNode.toNodeString().equals(defaultNode.getNodeString()))
|
||||
isDefault = true;
|
||||
private fun isDefaultNode(currentNode: Node): Boolean {
|
||||
var isDefault = false
|
||||
for (defaultNode in DefaultNodes.values()) {
|
||||
if (currentNode.toNodeString() == defaultNode.nodeString) isDefault = true
|
||||
}
|
||||
|
||||
return isDefault;
|
||||
return isDefault
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -13,119 +13,102 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package net.mynero.wallet.adapter
|
||||
|
||||
package net.mynero.wallet.adapter;
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.TextView
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import net.mynero.wallet.R
|
||||
import net.mynero.wallet.data.Subaddress
|
||||
import net.mynero.wallet.service.PrefService
|
||||
import net.mynero.wallet.util.Constants
|
||||
import net.mynero.wallet.util.Helper
|
||||
import net.mynero.wallet.util.Helper.getDisplayAmount
|
||||
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import net.mynero.wallet.R;
|
||||
import net.mynero.wallet.data.Subaddress;
|
||||
import net.mynero.wallet.model.CoinsInfo;
|
||||
import net.mynero.wallet.model.Wallet;
|
||||
import net.mynero.wallet.service.PrefService;
|
||||
import net.mynero.wallet.util.Constants;
|
||||
import net.mynero.wallet.util.Helper;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class SubaddressAdapter extends RecyclerView.Adapter<SubaddressAdapter.ViewHolder> {
|
||||
|
||||
private List<Subaddress> localDataSet;
|
||||
private SubaddressAdapterListener listener = null;
|
||||
class SubaddressAdapter(val listener: SubaddressAdapterListener?) :
|
||||
RecyclerView.Adapter<SubaddressAdapter.ViewHolder>() {
|
||||
private var localDataSet: List<Subaddress>
|
||||
|
||||
/**
|
||||
* Initialize the dataset of the Adapter.
|
||||
*/
|
||||
public SubaddressAdapter(SubaddressAdapterListener listener) {
|
||||
this.localDataSet = new ArrayList<>();
|
||||
this.listener = listener;
|
||||
init {
|
||||
localDataSet = ArrayList()
|
||||
}
|
||||
|
||||
public void submitList(List<Subaddress> dataSet) {
|
||||
this.localDataSet = dataSet;
|
||||
notifyDataSetChanged();
|
||||
fun submitList(dataSet: List<Subaddress>) {
|
||||
localDataSet = dataSet
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
// Create new views (invoked by the layout manager)
|
||||
@Override
|
||||
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
|
||||
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
|
||||
// Create a new view, which defines the UI of the list item
|
||||
View view = LayoutInflater.from(viewGroup.getContext())
|
||||
.inflate(R.layout.address_item, viewGroup, false);
|
||||
|
||||
return new ViewHolder(view, listener);
|
||||
val view = LayoutInflater.from(viewGroup.context)
|
||||
.inflate(R.layout.address_item, viewGroup, false)
|
||||
return ViewHolder(view, listener)
|
||||
}
|
||||
|
||||
// Replace the contents of a view (invoked by the layout manager)
|
||||
@Override
|
||||
public void onBindViewHolder(ViewHolder viewHolder, final int position) {
|
||||
Subaddress subaddress = localDataSet.get(position);
|
||||
viewHolder.bind(subaddress);
|
||||
override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {
|
||||
val subaddress = localDataSet[position]
|
||||
viewHolder.bind(subaddress)
|
||||
}
|
||||
|
||||
// Return the size of your dataset (invoked by the layout manager)
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return localDataSet.size();
|
||||
override fun getItemCount(): Int {
|
||||
return localDataSet.size
|
||||
}
|
||||
|
||||
public interface SubaddressAdapterListener {
|
||||
void onSubaddressSelected(Subaddress subaddress);
|
||||
|
||||
void onSubaddressEditLabel(Subaddress subaddress);
|
||||
interface SubaddressAdapterListener {
|
||||
fun onSubaddressSelected(subaddress: Subaddress?)
|
||||
fun onSubaddressEditLabel(subaddress: Subaddress?)
|
||||
}
|
||||
|
||||
/**
|
||||
* Provide a reference to the type of views that you are using
|
||||
* (custom ViewHolder).
|
||||
*/
|
||||
public static class ViewHolder extends RecyclerView.ViewHolder {
|
||||
private SubaddressAdapterListener listener = null;
|
||||
class ViewHolder(view: View, val listener: SubaddressAdapterListener?) : RecyclerView.ViewHolder(
|
||||
view
|
||||
) {
|
||||
|
||||
public ViewHolder(View view, SubaddressAdapterListener listener) {
|
||||
super(view);
|
||||
this.listener = listener;
|
||||
}
|
||||
|
||||
public void bind(Subaddress subaddress) {
|
||||
TextView addressTextView = itemView.findViewById(R.id.address_item_address_textview);
|
||||
TextView addressLabelTextView = itemView.findViewById(R.id.address_label_textview);
|
||||
TextView addressAmountTextView = itemView.findViewById(R.id.address_amount_textview);
|
||||
|
||||
addressTextView.setText(subaddress.address);
|
||||
|
||||
final String label = subaddress.getDisplayLabel();
|
||||
final String address = itemView.getContext().getString(R.string.subbaddress_info_subtitle,
|
||||
subaddress.addressIndex, subaddress.getSquashedAddress());
|
||||
addressLabelTextView.setText(label.isEmpty() ? address : label);
|
||||
|
||||
final long amount = subaddress.amount;
|
||||
fun bind(subaddress: Subaddress) {
|
||||
val addressTextView =
|
||||
itemView.findViewById<TextView>(R.id.address_item_address_textview)
|
||||
val addressLabelTextView = itemView.findViewById<TextView>(R.id.address_label_textview)
|
||||
val addressAmountTextView =
|
||||
itemView.findViewById<TextView>(R.id.address_amount_textview)
|
||||
addressTextView.text = subaddress.address
|
||||
val label = subaddress.displayLabel
|
||||
val address = itemView.context.getString(
|
||||
R.string.subbaddress_info_subtitle,
|
||||
subaddress.addressIndex, subaddress.squashedAddress
|
||||
)
|
||||
addressLabelTextView.text = label.ifEmpty { address }
|
||||
val amount = subaddress.amount
|
||||
if (amount > 0) {
|
||||
boolean streetMode = PrefService.getInstance().getBoolean(Constants.PREF_STREET_MODE, false);
|
||||
if(streetMode) {
|
||||
addressAmountTextView.setText(itemView.getContext().getString(R.string.tx_list_amount_positive,
|
||||
Constants.STREET_MODE_BALANCE));
|
||||
val streetMode =
|
||||
PrefService.getInstance().getBoolean(Constants.PREF_STREET_MODE, false)
|
||||
if (streetMode) {
|
||||
addressAmountTextView.text = itemView.context.getString(
|
||||
R.string.tx_list_amount_positive,
|
||||
Constants.STREET_MODE_BALANCE
|
||||
)
|
||||
} else {
|
||||
addressAmountTextView.setText(itemView.getContext().getString(R.string.tx_list_amount_positive,
|
||||
Helper.getDisplayAmount(amount, Helper.DISPLAY_DIGITS_INFO)));
|
||||
addressAmountTextView.text = itemView.context.getString(
|
||||
R.string.tx_list_amount_positive,
|
||||
getDisplayAmount(amount, Helper.DISPLAY_DIGITS_INFO)
|
||||
)
|
||||
}
|
||||
} else addressAmountTextView.text = ""
|
||||
itemView.setOnClickListener { listener?.onSubaddressSelected(subaddress) }
|
||||
itemView.setOnLongClickListener { _: View? ->
|
||||
listener?.onSubaddressEditLabel(subaddress)
|
||||
true
|
||||
}
|
||||
else
|
||||
addressAmountTextView.setText("");
|
||||
|
||||
itemView.setOnClickListener(view -> listener.onSubaddressSelected(subaddress));
|
||||
itemView.setOnLongClickListener(v -> {
|
||||
listener.onSubaddressEditLabel(subaddress);
|
||||
return true;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -13,164 +13,149 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package net.mynero.wallet.adapter
|
||||
|
||||
package net.mynero.wallet.adapter;
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.TextView
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.google.android.material.progressindicator.CircularProgressIndicator
|
||||
import net.mynero.wallet.R
|
||||
import net.mynero.wallet.model.TransactionInfo
|
||||
import net.mynero.wallet.service.PrefService
|
||||
import net.mynero.wallet.util.Constants
|
||||
import net.mynero.wallet.util.DateHelper.DATETIME_FORMATTER
|
||||
import net.mynero.wallet.util.Helper
|
||||
import net.mynero.wallet.util.Helper.getDisplayAmount
|
||||
import net.mynero.wallet.util.ThemeHelper.getThemedColor
|
||||
import java.util.Calendar
|
||||
import java.util.Date
|
||||
|
||||
import static net.mynero.wallet.util.DateHelper.DATETIME_FORMATTER;
|
||||
|
||||
import android.text.Html;
|
||||
import android.text.Spanned;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.google.android.material.progressindicator.CircularProgressIndicator;
|
||||
|
||||
import net.mynero.wallet.R;
|
||||
import net.mynero.wallet.model.TransactionInfo;
|
||||
import net.mynero.wallet.service.PrefService;
|
||||
import net.mynero.wallet.util.Constants;
|
||||
import net.mynero.wallet.util.Helper;
|
||||
import net.mynero.wallet.util.ThemeHelper;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.TimeZone;
|
||||
|
||||
public class TransactionInfoAdapter extends RecyclerView.Adapter<TransactionInfoAdapter.ViewHolder> {
|
||||
|
||||
private List<TransactionInfo> localDataSet;
|
||||
private TxInfoAdapterListener listener = null;
|
||||
class TransactionInfoAdapter(val listener: TxInfoAdapterListener?) :
|
||||
RecyclerView.Adapter<TransactionInfoAdapter.ViewHolder>() {
|
||||
private var localDataSet: List<TransactionInfo>
|
||||
|
||||
/**
|
||||
* Initialize the dataset of the Adapter.
|
||||
*/
|
||||
public TransactionInfoAdapter(TxInfoAdapterListener listener) {
|
||||
this.listener = listener;
|
||||
this.localDataSet = new ArrayList<>();
|
||||
init {
|
||||
localDataSet = ArrayList()
|
||||
}
|
||||
|
||||
public void submitList(List<TransactionInfo> dataSet) {
|
||||
this.localDataSet = dataSet;
|
||||
notifyDataSetChanged();
|
||||
fun submitList(dataSet: List<TransactionInfo>) {
|
||||
localDataSet = dataSet
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
// Create new views (invoked by the layout manager)
|
||||
@Override
|
||||
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
|
||||
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
|
||||
// Create a new view, which defines the UI of the list item
|
||||
View view = LayoutInflater.from(viewGroup.getContext())
|
||||
.inflate(R.layout.transaction_history_item, viewGroup, false);
|
||||
|
||||
return new ViewHolder(listener, view);
|
||||
val view = LayoutInflater.from(viewGroup.context)
|
||||
.inflate(R.layout.transaction_history_item, viewGroup, false)
|
||||
return ViewHolder(listener, view)
|
||||
}
|
||||
|
||||
// Replace the contents of a view (invoked by the layout manager)
|
||||
@Override
|
||||
public void onBindViewHolder(ViewHolder viewHolder, final int position) {
|
||||
TransactionInfo tx = localDataSet.get(position);
|
||||
viewHolder.bind(tx);
|
||||
override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {
|
||||
val tx = localDataSet[position]
|
||||
viewHolder.bind(tx)
|
||||
}
|
||||
|
||||
// Return the size of your dataset (invoked by the layout manager)
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return localDataSet.size();
|
||||
override fun getItemCount(): Int {
|
||||
return localDataSet.size
|
||||
}
|
||||
|
||||
public interface TxInfoAdapterListener {
|
||||
void onClickTransaction(TransactionInfo txInfo);
|
||||
interface TxInfoAdapterListener {
|
||||
fun onClickTransaction(txInfo: TransactionInfo?)
|
||||
}
|
||||
|
||||
/**
|
||||
* Provide a reference to the type of views that you are using
|
||||
* (custom ViewHolder).
|
||||
*/
|
||||
public static class ViewHolder extends RecyclerView.ViewHolder {
|
||||
private final int outboundColour;
|
||||
private final int inboundColour;
|
||||
private final int pendingColour;
|
||||
private final int failedColour;
|
||||
private TxInfoAdapterListener listener = null;
|
||||
private TextView amountTextView = null;
|
||||
class ViewHolder(val listener: TxInfoAdapterListener?, view: View) : RecyclerView.ViewHolder(view) {
|
||||
private val outboundColour: Int
|
||||
private val inboundColour: Int
|
||||
private val pendingColour: Int
|
||||
private val failedColour: Int
|
||||
private var amountTextView: TextView? = null
|
||||
|
||||
public ViewHolder(TxInfoAdapterListener listener, View view) {
|
||||
super(view);
|
||||
inboundColour = ThemeHelper.getThemedColor(view.getContext(), R.attr.positiveColor);
|
||||
outboundColour = ThemeHelper.getThemedColor(view.getContext(), R.attr.negativeColor);
|
||||
pendingColour = ThemeHelper.getThemedColor(view.getContext(), R.attr.neutralColor);
|
||||
failedColour = ThemeHelper.getThemedColor(view.getContext(), R.attr.neutralColor);
|
||||
this.listener = listener;
|
||||
Calendar cal = Calendar.getInstance();
|
||||
TimeZone tz = cal.getTimeZone(); //get the local time zone.
|
||||
DATETIME_FORMATTER.setTimeZone(tz);
|
||||
init {
|
||||
inboundColour = getThemedColor(view.context, R.attr.positiveColor)
|
||||
outboundColour = getThemedColor(view.context, R.attr.negativeColor)
|
||||
pendingColour = getThemedColor(view.context, R.attr.neutralColor)
|
||||
failedColour = getThemedColor(view.context, R.attr.neutralColor)
|
||||
val cal = Calendar.getInstance()
|
||||
val tz = cal.timeZone //get the local time zone.
|
||||
DATETIME_FORMATTER.timeZone = tz
|
||||
}
|
||||
|
||||
public void bind(TransactionInfo txInfo) {
|
||||
boolean streetModeEnabled = PrefService.getInstance().getBoolean(Constants.PREF_STREET_MODE, false);
|
||||
String displayAmount = streetModeEnabled ? Constants.STREET_MODE_BALANCE : Helper.getDisplayAmount(txInfo.amount, Helper.DISPLAY_DIGITS_INFO);
|
||||
TextView confirmationsTextView = itemView.findViewById(R.id.tvConfirmations);
|
||||
CircularProgressIndicator confirmationsProgressBar = itemView.findViewById(R.id.pbConfirmations);
|
||||
confirmationsProgressBar.setMax(TransactionInfo.CONFIRMATION);
|
||||
this.amountTextView = itemView.findViewById(R.id.tx_amount);
|
||||
itemView.findViewById(R.id.tx_failed).setVisibility(View.GONE);
|
||||
fun bind(txInfo: TransactionInfo) {
|
||||
val streetModeEnabled =
|
||||
PrefService.getInstance().getBoolean(Constants.PREF_STREET_MODE, false)
|
||||
val displayAmount =
|
||||
if (streetModeEnabled) Constants.STREET_MODE_BALANCE else getDisplayAmount(
|
||||
txInfo.amount,
|
||||
Helper.DISPLAY_DIGITS_INFO
|
||||
)
|
||||
val confirmationsTextView = itemView.findViewById<TextView>(R.id.tvConfirmations)
|
||||
val confirmationsProgressBar =
|
||||
itemView.findViewById<CircularProgressIndicator>(R.id.pbConfirmations)
|
||||
confirmationsProgressBar.max = TransactionInfo.CONFIRMATION
|
||||
amountTextView = itemView.findViewById(R.id.tx_amount)
|
||||
itemView.findViewById<View>(R.id.tx_failed).visibility = View.GONE
|
||||
if (txInfo.isFailed) {
|
||||
((TextView) itemView.findViewById(R.id.tx_amount)).setText(itemView.getContext().getString(R.string.tx_list_amount_negative, displayAmount));
|
||||
itemView.findViewById(R.id.tx_failed).setVisibility(View.VISIBLE);
|
||||
setTxColour(failedColour);
|
||||
confirmationsTextView.setVisibility(View.GONE);
|
||||
confirmationsProgressBar.setVisibility(View.GONE);
|
||||
(itemView.findViewById<View>(R.id.tx_amount) as TextView).text =
|
||||
itemView.context.getString(R.string.tx_list_amount_negative, displayAmount)
|
||||
itemView.findViewById<View>(R.id.tx_failed).visibility = View.VISIBLE
|
||||
setTxColour(failedColour)
|
||||
confirmationsTextView.visibility = View.GONE
|
||||
confirmationsProgressBar.visibility = View.GONE
|
||||
} else if (txInfo.isPending) {
|
||||
setTxColour(pendingColour);
|
||||
confirmationsProgressBar.setIndeterminate(true);
|
||||
confirmationsProgressBar.setVisibility(View.VISIBLE);
|
||||
confirmationsTextView.setVisibility(View.GONE);
|
||||
setTxColour(pendingColour)
|
||||
confirmationsProgressBar.isIndeterminate = true
|
||||
confirmationsProgressBar.visibility = View.VISIBLE
|
||||
confirmationsTextView.visibility = View.GONE
|
||||
} else if (txInfo.direction == TransactionInfo.Direction.Direction_In) {
|
||||
setTxColour(inboundColour);
|
||||
if (!txInfo.isConfirmed()) {
|
||||
confirmationsProgressBar.setVisibility(View.VISIBLE);
|
||||
final int confirmations = (int) txInfo.confirmations;
|
||||
confirmationsProgressBar.setProgressCompat(confirmations, true);
|
||||
final String confCount = Integer.toString(confirmations);
|
||||
confirmationsTextView.setText(confCount);
|
||||
if (confCount.length() == 1) // we only have space for character in the progress circle
|
||||
confirmationsTextView.setVisibility(View.VISIBLE);
|
||||
else
|
||||
confirmationsTextView.setVisibility(View.GONE);
|
||||
setTxColour(inboundColour)
|
||||
if (!txInfo.isConfirmed) {
|
||||
confirmationsProgressBar.visibility = View.VISIBLE
|
||||
val confirmations = txInfo.confirmations.toInt()
|
||||
confirmationsProgressBar.setProgressCompat(confirmations, true)
|
||||
val confCount = confirmations.toString()
|
||||
confirmationsTextView.text = confCount
|
||||
if (confCount.length == 1) // we only have space for character in the progress circle
|
||||
confirmationsTextView.visibility =
|
||||
View.VISIBLE else confirmationsTextView.visibility = View.GONE
|
||||
} else {
|
||||
confirmationsProgressBar.setVisibility(View.GONE);
|
||||
confirmationsTextView.setVisibility(View.GONE);
|
||||
confirmationsProgressBar.visibility = View.GONE
|
||||
confirmationsTextView.visibility = View.GONE
|
||||
}
|
||||
} else {
|
||||
setTxColour(outboundColour);
|
||||
confirmationsProgressBar.setVisibility(View.GONE);
|
||||
confirmationsTextView.setVisibility(View.GONE);
|
||||
setTxColour(outboundColour)
|
||||
confirmationsProgressBar.visibility = View.GONE
|
||||
confirmationsTextView.visibility = View.GONE
|
||||
}
|
||||
|
||||
if (txInfo.direction == TransactionInfo.Direction.Direction_Out) {
|
||||
((TextView) itemView.findViewById(R.id.tx_amount)).setText(itemView.getContext().getString(R.string.tx_list_amount_negative, displayAmount));
|
||||
(itemView.findViewById<View>(R.id.tx_amount) as TextView).text =
|
||||
itemView.context.getString(R.string.tx_list_amount_negative, displayAmount)
|
||||
} else {
|
||||
((TextView) itemView.findViewById(R.id.tx_amount)).setText(itemView.getContext().getString(R.string.tx_list_amount_positive, displayAmount));
|
||||
(itemView.findViewById<View>(R.id.tx_amount) as TextView).text =
|
||||
itemView.context.getString(R.string.tx_list_amount_positive, displayAmount)
|
||||
}
|
||||
(itemView.findViewById<View>(R.id.tx_datetime) as TextView).text =
|
||||
getDateTime(txInfo.timestamp)
|
||||
itemView.setOnClickListener { _: View? -> listener?.onClickTransaction(txInfo) }
|
||||
}
|
||||
|
||||
((TextView) itemView.findViewById(R.id.tx_datetime)).setText(getDateTime(txInfo.timestamp));
|
||||
itemView.setOnClickListener(view -> {
|
||||
listener.onClickTransaction(txInfo);
|
||||
});
|
||||
private fun setTxColour(clr: Int) {
|
||||
amountTextView?.setTextColor(clr)
|
||||
}
|
||||
|
||||
private void setTxColour(int clr) {
|
||||
amountTextView.setTextColor(clr);
|
||||
}
|
||||
|
||||
private String getDateTime(long time) {
|
||||
return DATETIME_FORMATTER.format(new Date(time * 1000));
|
||||
private fun getDateTime(time: Long): String {
|
||||
return DATETIME_FORMATTER.format(Date(time * 1000))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -60,7 +60,7 @@ public class UtxosFragment extends Fragment implements CoinsInfoAdapter.CoinsInf
|
|||
freezeUtxosButton.setOnClickListener(view1 -> {
|
||||
Toast.makeText(getContext(), "Toggling freeze status, please wait.", Toast.LENGTH_SHORT).show();
|
||||
MoneroThreadPoolExecutor.MONERO_THREAD_POOL_EXECUTOR.execute(() -> {
|
||||
UTXOService.getInstance().toggleFrozen(adapter.getSelectedUtxos());
|
||||
UTXOService.getInstance().toggleFrozen(adapter.selectedUtxos);
|
||||
getActivity().runOnUiThread(() -> {
|
||||
adapter.clear();
|
||||
sendUtxosButton.setVisibility(View.GONE);
|
||||
|
@ -71,7 +71,7 @@ public class UtxosFragment extends Fragment implements CoinsInfoAdapter.CoinsInf
|
|||
});
|
||||
sendUtxosButton.setOnClickListener(view1 -> {
|
||||
ArrayList<String> selectedKeyImages = new ArrayList<>();
|
||||
for(CoinsInfo coinsInfo : adapter.getSelectedUtxos().values()) {
|
||||
for(CoinsInfo coinsInfo : adapter.selectedUtxos.values()) {
|
||||
selectedKeyImages.add(coinsInfo.keyImage);
|
||||
}
|
||||
SendBottomSheetDialog sendDialog = new SendBottomSheetDialog();
|
||||
|
@ -81,7 +81,7 @@ public class UtxosFragment extends Fragment implements CoinsInfoAdapter.CoinsInf
|
|||
});
|
||||
churnUtxosButton.setOnClickListener(view1 -> {
|
||||
ArrayList<String> selectedKeyImages = new ArrayList<>();
|
||||
for(CoinsInfo coinsInfo : adapter.getSelectedUtxos().values()) {
|
||||
for(CoinsInfo coinsInfo : adapter.selectedUtxos.values()) {
|
||||
selectedKeyImages.add(coinsInfo.keyImage);
|
||||
}
|
||||
SendBottomSheetDialog sendDialog = new SendBottomSheetDialog();
|
||||
|
@ -126,7 +126,7 @@ public class UtxosFragment extends Fragment implements CoinsInfoAdapter.CoinsInf
|
|||
}
|
||||
|
||||
boolean frozenExists = false, unfrozenExists = false, bothExist = false;
|
||||
for(CoinsInfo selectedUtxo : adapter.getSelectedUtxos().values()) {
|
||||
for(CoinsInfo selectedUtxo : adapter.selectedUtxos.values()) {
|
||||
if(selectedUtxo.isFrozen() || UTXOService.getInstance().isCoinFrozen(selectedUtxo))
|
||||
frozenExists = true;
|
||||
else {
|
||||
|
@ -135,7 +135,7 @@ public class UtxosFragment extends Fragment implements CoinsInfoAdapter.CoinsInf
|
|||
}
|
||||
bothExist = frozenExists && unfrozenExists;
|
||||
|
||||
if (adapter.getSelectedUtxos().isEmpty()) {
|
||||
if (adapter.selectedUtxos.isEmpty()) {
|
||||
sendUtxosButton.setVisibility(View.GONE);
|
||||
churnUtxosButton.setVisibility(View.GONE);
|
||||
freezeUtxosButton.setVisibility(View.GONE);
|
||||
|
|
Loading…
Reference in a new issue