@ -0,0 +1,159 @@
|
||||
/*
|
||||
* Copyright (c) 2017 m2049r
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.m2049r.xmrwallet.layout;
|
||||
|
||||
import android.os.AsyncTask;
|
||||
import android.util.Log;
|
||||
|
||||
import com.m2049r.xmrwallet.util.Helper;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
public class AsyncExchangeRate extends AsyncTask<String, Void, Boolean> {
|
||||
static final String TAG = "AsyncExchangeRate";
|
||||
static final long TIME_REFRESH_INTERVAL = 60000; // refresh exchange rate max every minute
|
||||
|
||||
public interface Listener {
|
||||
void exchangeFailed();
|
||||
|
||||
// callback from AsyncExchangeRate when we have a rate
|
||||
void exchange(String currencyA, String currencyB, double rate);
|
||||
}
|
||||
|
||||
static long RateTime = 0;
|
||||
static double Rate = 0;
|
||||
static String Fiat = null;
|
||||
|
||||
private final WeakReference<Listener> exchangeViewRef;
|
||||
|
||||
public AsyncExchangeRate(Listener exchangeView) {
|
||||
super();
|
||||
exchangeViewRef = new WeakReference<>(exchangeView);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPreExecute() {
|
||||
super.onPreExecute();
|
||||
}
|
||||
|
||||
boolean inverse = false;
|
||||
String currencyA = null;
|
||||
String currencyB = null;
|
||||
|
||||
@Override
|
||||
protected Boolean doInBackground(String... params) {
|
||||
if (params.length != 2) return false;
|
||||
Log.d(TAG, "Getting " + params[0]);
|
||||
currencyA = params[0];
|
||||
currencyB = params[1];
|
||||
|
||||
String fiat = null;
|
||||
if (currencyA.equals("XMR")) {
|
||||
fiat = currencyB;
|
||||
inverse = false;
|
||||
}
|
||||
if (currencyB.equals("XMR")) {
|
||||
fiat = currencyA;
|
||||
inverse = true;
|
||||
}
|
||||
|
||||
if (currencyA.equals(currencyB)) {
|
||||
Fiat = null;
|
||||
Rate = 1;
|
||||
RateTime = System.currentTimeMillis();
|
||||
return true;
|
||||
}
|
||||
|
||||
if (fiat == null) {
|
||||
Fiat = null;
|
||||
Rate = 0;
|
||||
RateTime = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!fiat.equals(Fiat)) { // new currency - reset all
|
||||
Fiat = fiat;
|
||||
Rate = 0;
|
||||
RateTime = 0;
|
||||
}
|
||||
|
||||
if (System.currentTimeMillis() > RateTime + TIME_REFRESH_INTERVAL) {
|
||||
Log.d(TAG, "Fetching " + Fiat);
|
||||
String closePrice = getExchangeRate(Fiat);
|
||||
if (closePrice != null) {
|
||||
try {
|
||||
Rate = Double.parseDouble(closePrice);
|
||||
RateTime = System.currentTimeMillis();
|
||||
return true;
|
||||
} catch (NumberFormatException ex) {
|
||||
Rate = 0;
|
||||
Log.e(TAG, ex.getLocalizedMessage());
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
Rate = 0;
|
||||
Log.e(TAG, "exchange url failed");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true; // no change but still valid
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Boolean result) {
|
||||
super.onPostExecute(result);
|
||||
Listener exchangeView = exchangeViewRef.get();
|
||||
if (result) {
|
||||
Log.d(TAG, "yay! = " + Rate);
|
||||
if (exchangeView != null) {
|
||||
exchangeView.exchange(currencyA, currencyB, inverse ? (1 / Rate) : Rate);
|
||||
}
|
||||
} else {
|
||||
Log.d(TAG, "nay!");
|
||||
if (exchangeView != null) {
|
||||
exchangeView.exchangeFailed();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// "https://api.kraken.com/0/public/Ticker?pair=XMREUR"
|
||||
String getExchangeRate(String fiat) {
|
||||
String jsonResponse =
|
||||
Helper.getUrl("https://api.kraken.com/0/public/Ticker?pair=XMR" + fiat);
|
||||
if (jsonResponse == null) return null;
|
||||
try {
|
||||
JSONObject response = new JSONObject(jsonResponse);
|
||||
JSONArray errors = response.getJSONArray("error");
|
||||
Log.e(TAG, "errors=" + errors.toString());
|
||||
if (errors.length() == 0) {
|
||||
JSONObject result = response.getJSONObject("result");
|
||||
JSONObject pair = result.getJSONObject("XXMRZ" + fiat);
|
||||
JSONArray close = pair.getJSONArray("c");
|
||||
String closePrice = close.getString(0);
|
||||
Log.d(TAG, "closePrice=" + closePrice);
|
||||
return closePrice;
|
||||
}
|
||||
} catch (JSONException ex) {
|
||||
Log.e(TAG, ex.getLocalizedMessage());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright (c) 2017 m2049r
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// based on from https://stackoverflow.com/a/45325876 (which did not work for me)
|
||||
|
||||
package com.m2049r.xmrwallet.layout;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.design.widget.TextInputLayout;
|
||||
import android.util.AttributeSet;
|
||||
import android.widget.EditText;
|
||||
|
||||
public class CTextInputLayout extends TextInputLayout {
|
||||
public CTextInputLayout(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
public CTextInputLayout(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
public CTextInputLayout(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getBaseline() {
|
||||
EditText editText = getEditText();
|
||||
return editText.getBaseline() - (getMeasuredHeight() - editText.getMeasuredHeight());
|
||||
}
|
||||
}
|
@ -0,0 +1,399 @@
|
||||
/*
|
||||
* Copyright (c) 2017 m2049r
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// based on https://code.tutsplus.com/tutorials/creating-compound-views-on-android--cms-22889
|
||||
|
||||
package com.m2049r.xmrwallet.layout;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.design.widget.TextInputLayout;
|
||||
import android.text.Editable;
|
||||
import android.text.TextWatcher;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.inputmethod.EditorInfo;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.m2049r.xmrwallet.R;
|
||||
import com.m2049r.xmrwallet.model.Wallet;
|
||||
import com.m2049r.xmrwallet.util.Helper;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
public class ExchangeView extends LinearLayout implements AsyncExchangeRate.Listener {
|
||||
static final String TAG = "ExchangeView";
|
||||
|
||||
public boolean focus() {
|
||||
return etAmount.requestFocus();
|
||||
}
|
||||
|
||||
public void enable(boolean enable) {
|
||||
etAmount.setEnabled(enable);
|
||||
sCurrencyA.setEnabled(enable);
|
||||
sCurrencyB.setEnabled(enable);
|
||||
}
|
||||
|
||||
String xmrAmount = null;
|
||||
String notXmrAmount = null;
|
||||
|
||||
void setXmr(String xmr) {
|
||||
xmrAmount = xmr;
|
||||
if (onNewAmountListener != null) {
|
||||
onNewAmountListener.onNewAmount(xmr);
|
||||
}
|
||||
}
|
||||
|
||||
public void setAmount(String xmrAmount) {
|
||||
if (xmrAmount != null) {
|
||||
setCurrencyA(0);
|
||||
setXmr(xmrAmount);
|
||||
this.notXmrAmount = null;
|
||||
doExchange();
|
||||
} else {
|
||||
setXmr(null);
|
||||
this.notXmrAmount = null;
|
||||
tvAmountB.setText("--");
|
||||
}
|
||||
}
|
||||
|
||||
public String getAmount() {
|
||||
return xmrAmount;
|
||||
}
|
||||
|
||||
public void setError(String msg) {
|
||||
etAmount.setError(msg);
|
||||
}
|
||||
|
||||
TextInputLayout etAmount;
|
||||
TextView tvAmountB;
|
||||
Spinner sCurrencyA;
|
||||
Spinner sCurrencyB;
|
||||
ImageView evExchange;
|
||||
ProgressBar pbExchange;
|
||||
|
||||
|
||||
public void setCurrencyA(int currency) {
|
||||
if ((currency != 0) && (getCurrencyB() != 0)) {
|
||||
setCurrencyB(0);
|
||||
}
|
||||
sCurrencyA.setSelection(currency, true);
|
||||
doExchange();
|
||||
}
|
||||
|
||||
public void setCurrencyB(int currency) {
|
||||
if ((currency != 0) && (getCurrencyA() != 0)) {
|
||||
setCurrencyA(0);
|
||||
}
|
||||
sCurrencyB.setSelection(currency, true);
|
||||
doExchange();
|
||||
}
|
||||
|
||||
public int getCurrencyA() {
|
||||
return sCurrencyA.getSelectedItemPosition();
|
||||
}
|
||||
|
||||
public int getCurrencyB() {
|
||||
return sCurrencyB.getSelectedItemPosition();
|
||||
}
|
||||
|
||||
public ExchangeView(Context context) {
|
||||
super(context);
|
||||
initializeViews(context);
|
||||
}
|
||||
|
||||
public ExchangeView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
initializeViews(context);
|
||||
}
|
||||
|
||||
public ExchangeView(Context context,
|
||||
AttributeSet attrs,
|
||||
int defStyle) {
|
||||
super(context, attrs, defStyle);
|
||||
initializeViews(context);
|
||||
}
|
||||
|
||||
/**
|
||||
* Inflates the views in the layout.
|
||||
*
|
||||
* @param context the current context for the view.
|
||||
*/
|
||||
private void initializeViews(Context context) {
|
||||
LayoutInflater inflater = (LayoutInflater) context
|
||||
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
inflater.inflate(R.layout.view_exchange, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onFinishInflate() {
|
||||
super.onFinishInflate();
|
||||
etAmount = (TextInputLayout) findViewById(R.id.etAmount);
|
||||
tvAmountB = (TextView) findViewById(R.id.tvAmountB);
|
||||
sCurrencyA = (Spinner) findViewById(R.id.sCurrencyA);
|
||||
sCurrencyB = (Spinner) findViewById(R.id.sCurrencyB);
|
||||
evExchange = (ImageView) findViewById(R.id.evExchange);
|
||||
pbExchange = (ProgressBar) findViewById(R.id.pbExchange);
|
||||
|
||||
// make progress circle gray
|
||||
pbExchange.getIndeterminateDrawable().
|
||||
setColorFilter(getResources().getColor(R.color.trafficGray),
|
||||
android.graphics.PorterDuff.Mode.MULTIPLY);
|
||||
|
||||
|
||||
sCurrencyA.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
||||
@Override
|
||||
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
|
||||
if (position != 0) { // if not XMR, select XMR on other
|
||||
sCurrencyB.setSelection(0, true);
|
||||
}
|
||||
doExchange();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNothingSelected(AdapterView<?> parentView) {
|
||||
// nothing (yet?)
|
||||
}
|
||||
});
|
||||
|
||||
sCurrencyB.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
||||
@Override
|
||||
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
|
||||
if (position != 0) { // if not XMR, select XMR on other
|
||||
sCurrencyA.setSelection(0, true);
|
||||
}
|
||||
doExchange();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNothingSelected(AdapterView<?> parentView) {
|
||||
// nothing (yet?)
|
||||
}
|
||||
});
|
||||
|
||||
etAmount.getEditText().setOnEditorActionListener(new TextView.OnEditorActionListener() {
|
||||
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
|
||||
if ((event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) || (actionId == EditorInfo.IME_ACTION_DONE)) {
|
||||
doExchange();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
etAmount.getEditText().addTextChangedListener(new TextWatcher() {
|
||||
@Override
|
||||
public void afterTextChanged(Editable editable) {
|
||||
etAmount.setError(null);
|
||||
if ((xmrAmount != null) || (notXmrAmount != null)) {
|
||||
tvAmountB.setText("--");
|
||||
setXmr(null);
|
||||
notXmrAmount = null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
final static double MAX_AMOUNT_XMR = 1000;
|
||||
final static double MAX_AMOUNT_NOTXMR = 100000;
|
||||
|
||||
public boolean checkEnteredAmount() {
|
||||
boolean ok = true;
|
||||
Log.d(TAG, "checkEnteredAmount");
|
||||
String amountEntry = etAmount.getEditText().getText().toString();
|
||||
if (!amountEntry.isEmpty()) {
|
||||
try {
|
||||
double a = Double.parseDouble(amountEntry);
|
||||
double maxAmount = (getCurrencyA() == 0) ? MAX_AMOUNT_XMR : MAX_AMOUNT_NOTXMR;
|
||||
if (a > (maxAmount)) {
|
||||
etAmount.setError(getResources().
|
||||
getString(R.string.receive_amount_too_big,
|
||||
String.format(Locale.US, "%,.0f", maxAmount)));
|
||||
ok = false;
|
||||
} else if (a < 0) {
|
||||
etAmount.setError(getResources().getString(R.string.receive_amount_negative));
|
||||
ok = false;
|
||||
}
|
||||
} catch (NumberFormatException ex) {
|
||||
etAmount.setError(getResources().getString(R.string.receive_amount_nan));
|
||||
ok = false;
|
||||
}
|
||||
}
|
||||
if (ok) {
|
||||
etAmount.setError(null);
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
||||
int selectedNotXmrCurrency() {
|
||||
return Math.max(getCurrencyA(), getCurrencyB());
|
||||
}
|
||||
|
||||
public void doExchange() {
|
||||
tvAmountB.setText("--");
|
||||
// TODO cache & use cached exchange rate here
|
||||
startExchange();
|
||||
}
|
||||
|
||||
void startExchange() {
|
||||
showProgress();
|
||||
String currencyA = (String) sCurrencyA.getSelectedItem();
|
||||
String currencyB = (String) sCurrencyB.getSelectedItem();
|
||||
new AsyncExchangeRate(this).execute(currencyA, currencyB);
|
||||
}
|
||||
|
||||
public void exchange(double rate) {
|
||||
if (getCurrencyA() == 0) {
|
||||
if (!xmrAmount.isEmpty() && (rate > 0)) {
|
||||
double amountB = rate * Double.parseDouble(xmrAmount);
|
||||
notXmrAmount = Helper.getFormattedAmount(amountB, getCurrencyB() == 0);
|
||||
} else {
|
||||
notXmrAmount = "";
|
||||
}
|
||||
tvAmountB.setText(notXmrAmount);
|
||||
} else if (getCurrencyB() == 0) {
|
||||
if (!notXmrAmount.isEmpty() && (rate > 0)) {
|
||||
double amountB = rate * Double.parseDouble(notXmrAmount);
|
||||
setXmr(Helper.getFormattedAmount(amountB, true));
|
||||
} else {
|
||||
setXmr("");
|
||||
}
|
||||
tvAmountB.setText(xmrAmount);
|
||||
} else { // no XMR currency - cannot happen!
|
||||
Log.e(TAG, "No XMR currency!");
|
||||
setXmr(null);
|
||||
notXmrAmount = null;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
boolean prepareExchange() {
|
||||
Log.d(TAG, "prepareExchange()");
|
||||
if (checkEnteredAmount()) {
|
||||
String enteredAmount = etAmount.getEditText().getText().toString();
|
||||
if (!enteredAmount.isEmpty()) {
|
||||
String cleanAmount = "";
|
||||
if (getCurrencyA() == 0) {
|
||||
// sanitize the input
|
||||
cleanAmount = Helper.getDisplayAmount(Wallet.getAmountFromString(enteredAmount));
|
||||
setXmr(cleanAmount);
|
||||
notXmrAmount = null;
|
||||
Log.d(TAG, "cleanAmount = " + cleanAmount);
|
||||
} else if (getCurrencyB() == 0) { // we use B & 0 here for the else below ...
|
||||
// sanitize the input
|
||||
double amountA = Double.parseDouble(enteredAmount);
|
||||
cleanAmount = String.format(Locale.US, "%.2f", amountA);
|
||||
setXmr(null);
|
||||
notXmrAmount = cleanAmount;
|
||||
} else { // no XMR currency - cannot happen!
|
||||
Log.e(TAG, "No XMR currency!");
|
||||
setXmr(null);
|
||||
notXmrAmount = null;
|
||||
return false;
|
||||
}
|
||||
Log.d(TAG, "prepareExchange() " + cleanAmount);
|
||||
//etAmount.getEditText().setText(cleanAmount); // display what we use
|
||||
} else {
|
||||
setXmr("");
|
||||
notXmrAmount = "";
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
setXmr(null);
|
||||
notXmrAmount = null;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// callback from AsyncExchangeRate when it failed getting a rate
|
||||
public void exchangeFailed() {
|
||||
hideProgress();
|
||||
exchange(0);
|
||||
// TODO Toast it failed - I think this happens elsewhere already
|
||||
}
|
||||
|
||||
// callback from AsyncExchangeRate when we have a rate
|
||||
public void exchange(String currencyA, String currencyB, double rate) {
|
||||
hideProgress();
|
||||
// first, make sure this is what we want
|
||||
String enteredCurrencyA = (String) sCurrencyA.getSelectedItem();
|
||||
String enteredCurrencyB = (String) sCurrencyB.getSelectedItem();
|
||||
if (!currencyA.equals(enteredCurrencyA) || !currencyB.equals(enteredCurrencyB)) {
|
||||
// something's wrong
|
||||
Log.e(TAG, "Currencies don't match!");
|
||||
return;
|
||||
}
|
||||
if (prepareExchange()) {
|
||||
exchange(rate);
|
||||
}
|
||||
}
|
||||
|
||||
private void showProgress() {
|
||||
pbExchange.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
private void hideProgress() {
|
||||
pbExchange.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
|
||||
// Hooks
|
||||
public interface OnNewAmountListener {
|
||||
void onNewAmount(String xmr);
|
||||
}
|
||||
|
||||
OnNewAmountListener onNewAmountListener;
|
||||
|
||||
public void setOnNewAmountListener(OnNewAmountListener listener) {
|
||||
onNewAmountListener = listener;
|
||||
}
|
||||
|
||||
public interface OnAmountInvalidatedListener {
|
||||
void onAmountInvalidated();
|
||||
}
|
||||
|
||||
OnAmountInvalidatedListener onAmountInvalidatedListener;
|
||||
|
||||
public void setOnAmountInvalidatedListener(OnAmountInvalidatedListener listener) {
|
||||
onAmountInvalidatedListener = listener;
|
||||
}
|
||||
|
||||
public interface OnFailedExchangeListener {
|
||||
void onFailedExchange();
|
||||
}
|
||||
|
||||
OnFailedExchangeListener onFailedExchangeListener;
|
||||
|
||||
public void setOnFailedExchangeListener(OnFailedExchangeListener listener) {
|
||||
onFailedExchangeListener = listener;
|
||||
}
|
||||
}
|
@ -0,0 +1,155 @@
|
||||
/*
|
||||
* Copyright (c) 2017 m2049r
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// based on https://code.tutsplus.com/tutorials/creating-compound-views-on-android--cms-22889
|
||||
|
||||
package com.m2049r.xmrwallet.layout;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.m2049r.xmrwallet.R;
|
||||
|
||||
public class Toolbar extends android.support.v7.widget.Toolbar {
|
||||
static final String TAG = "Toolbar";
|
||||
|
||||
public interface OnButtonListener {
|
||||
void onButton(int type);
|
||||
}
|
||||
|
||||
OnButtonListener onButtonListener;
|
||||
|
||||
public void setOnButtonListener(OnButtonListener listener) {
|
||||
onButtonListener = listener;
|
||||
}
|
||||
|
||||
ImageView toolbarImage;
|
||||
TextView toolbarTitle;
|
||||
TextView toolbarSubtitle;
|
||||
Button bDonate;
|
||||
|
||||
public Toolbar(Context context) {
|
||||
super(context);
|
||||
initializeViews(context);
|
||||
}
|
||||
|
||||
public Toolbar(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
initializeViews(context);
|
||||
}
|
||||
|
||||
public Toolbar(Context context,
|
||||
AttributeSet attrs,
|
||||
int defStyle) {
|
||||
super(context, attrs, defStyle);
|
||||
initializeViews(context);
|
||||
}
|
||||
|
||||
/**
|
||||
* Inflates the views in the layout.
|
||||
*
|
||||
* @param context the current context for the view.
|
||||
*/
|
||||
private void initializeViews(Context context) {
|
||||
LayoutInflater inflater = (LayoutInflater) context
|
||||
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
inflater.inflate(R.layout.view_toolbar, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onFinishInflate() {
|
||||
super.onFinishInflate();
|
||||
toolbarImage = (ImageView) findViewById(R.id.toolbarImage);
|
||||
toolbarTitle = (TextView) findViewById(R.id.toolbarTitle);
|
||||
toolbarSubtitle = (TextView) findViewById(R.id.toolbarSubtitle);
|
||||
bDonate = (Button) findViewById(R.id.bDonate);
|
||||
bDonate.setOnClickListener(new View.OnClickListener() {
|
||||
public void onClick(View v) {
|
||||
if (onButtonListener != null) {
|
||||
onButtonListener.onButton(buttonType);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setTitle(String title, String subtitle) {
|
||||
setTitle(title);
|
||||
setSubtitle(subtitle);
|
||||
}
|
||||
|
||||
public void setTitle(String title) {
|
||||
toolbarTitle.setText(title);
|
||||
if (title != null) {
|
||||
toolbarImage.setVisibility(View.INVISIBLE);
|
||||
toolbarTitle.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
toolbarImage.setVisibility(View.VISIBLE);
|
||||
toolbarTitle.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
public final static int BUTTON_NONE = 0;
|
||||
public final static int BUTTON_BACK = 1;
|
||||
public final static int BUTTON_CLOSE = 2;
|
||||
public final static int BUTTON_DONATE = 3;
|
||||
|
||||
int buttonType = BUTTON_DONATE;
|
||||
|
||||
public void setButton(int type) {
|
||||
switch (type) {
|
||||
case BUTTON_BACK:
|
||||
Log.d(TAG, "BUTTON_BACK");
|
||||
bDonate.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_arrow_back_white_24dp, 0, 0, 0);
|
||||
bDonate.setText(null);
|
||||
bDonate.setVisibility(View.VISIBLE);
|
||||
break;
|
||||
case BUTTON_CLOSE:
|
||||
Log.d(TAG, "BUTTON_CLOSE");
|
||||
bDonate.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_close_white_24dp, 0, 0, 0);
|
||||
bDonate.setText(R.string.label_close);
|
||||
bDonate.setVisibility(View.VISIBLE);
|
||||
break;
|
||||
case BUTTON_DONATE:
|
||||
Log.d(TAG, "BUTTON_DONATE");
|
||||
bDonate.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_favorite_white_24dp, 0, 0, 0);
|
||||
bDonate.setText(R.string.label_donate);
|
||||
bDonate.setVisibility(View.VISIBLE);
|
||||
break;
|
||||
case BUTTON_NONE:
|
||||
default:
|
||||
Log.d(TAG, "BUTTON_NONE");
|
||||
bDonate.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
|
||||
bDonate.setText(null);
|
||||
bDonate.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
buttonType = type;
|
||||
}
|
||||
|
||||
public void setSubtitle(String subtitle) {
|
||||
toolbarSubtitle.setText(subtitle);
|
||||
if (subtitle != null) {
|
||||
toolbarSubtitle.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
toolbarSubtitle.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,157 @@
|
||||
/*
|
||||
* Copyright (c) 2017 m2049r
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.m2049r.xmrwallet.layout;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.v7.widget.PopupMenu;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.m2049r.xmrwallet.R;
|
||||
import com.m2049r.xmrwallet.model.WalletManager;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.TimeZone;
|
||||
|
||||
public class WalletInfoAdapter extends RecyclerView.Adapter<WalletInfoAdapter.ViewHolder> {
|
||||
private static final String TAG = "WalletInfoAdapter";
|
||||
|
||||
private final SimpleDateFormat DATETIME_FORMATTER = new SimpleDateFormat("yyyy-MM-dd HH:mm");
|
||||
|
||||
public interface OnInteractionListener {
|
||||
void onInteraction(View view, WalletManager.WalletInfo item);
|
||||
|
||||
boolean onContextInteraction(MenuItem item, WalletManager.WalletInfo infoItem);
|
||||
}
|
||||
|
||||
private final List<WalletManager.WalletInfo> infoItems;
|
||||
private final OnInteractionListener listener;
|
||||
|
||||
Context context;
|
||||
|
||||
public WalletInfoAdapter(Context context, OnInteractionListener listener) {
|
||||
this.context = context;
|
||||
this.infoItems = new ArrayList<>();
|
||||
this.listener = listener;
|
||||
Calendar cal = Calendar.getInstance();
|
||||
TimeZone tz = cal.getTimeZone(); //get the local time zone.
|
||||
DATETIME_FORMATTER.setTimeZone(tz);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
View view = LayoutInflater.from(parent.getContext())
|
||||
.inflate(R.layout.item_wallet, parent, false);
|
||||
return new ViewHolder(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(final ViewHolder holder, int position) {
|
||||
holder.bind(position);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return infoItems.size();
|
||||
}
|
||||
|
||||
public WalletManager.WalletInfo getItem(int position) {
|
||||
return infoItems.get(position);
|
||||
}
|
||||
|
||||
public void setInfos(List<WalletManager.WalletInfo> data) {
|
||||
// TODO do stuff with data so we can really recycle elements (i.e. add only new tx)
|
||||
// as the WalletInfo items are always recreated, we cannot recycle
|
||||
infoItems.clear();
|
||||
if (data != null) {
|
||||
Log.d(TAG, "setInfos " + data.size());
|
||||
infoItems.addAll(data);
|
||||
Collections.sort(infoItems);
|
||||
} else {
|
||||
Log.d(TAG, "setInfos null");
|
||||
}
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
|
||||
final TextView tvName;
|
||||
final TextView tvAddress;
|
||||
final ImageButton ibOptions;
|
||||
WalletManager.WalletInfo infoItem;
|
||||
|
||||
ViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
tvName = (TextView) itemView.findViewById(R.id.tvName);
|
||||
tvAddress = (TextView) itemView.findViewById(R.id.tvAddress);
|
||||
ibOptions = (ImageButton) itemView.findViewById(R.id.ibOptions);
|
||||
ibOptions.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
//creating a popup menu
|
||||
PopupMenu popup = new PopupMenu(context, ibOptions);
|
||||
//inflating menu from xml resource
|
||||
popup.inflate(R.menu.list_context_menu);
|
||||
//adding click listener
|
||||
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
||||
@Override
|
||||
public boolean onMenuItemClick(MenuItem item) {
|
||||
if (listener != null) {
|
||||
return listener.onContextInteraction(item, infoItem);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
});
|
||||
//displaying the popup
|
||||
popup.show();
|
||||
|
||||
}
|
||||
});
|
||||
itemView.setOnClickListener(this);
|
||||
}
|
||||
|
||||
private String getDateTime(long time) {
|
||||
return DATETIME_FORMATTER.format(new Date(time * 1000));
|
||||
}
|
||||
|
||||
void bind(int position) {
|
||||
infoItem = infoItems.get(position);
|
||||
tvName.setText(infoItem.name);
|
||||
tvAddress.setText(infoItem.address.substring(0, 16) + "...");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (listener != null) {
|
||||
int position = getAdapterPosition(); // gets item position
|
||||
if (position != RecyclerView.NO_POSITION) { // Check if an item was deleted, but the user clicked it before the UI removed it
|
||||
listener.onInteraction(view, infoItems.get(position));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:fillAfter="true">
|
||||
<scale
|
||||
android:duration="300"
|
||||
android:fromXScale="1.0"
|
||||
android:fromYScale="1.0"
|
||||
android:interpolator="@android:anim/linear_interpolator"
|
||||
android:pivotX="50%"
|
||||
android:pivotY="50%"
|
||||
android:toXScale="0.0"
|
||||
android:toYScale="0.0" />
|
||||
<alpha
|
||||
android:duration="300"
|
||||
android:fromAlpha="1.0"
|
||||
android:interpolator="@android:anim/accelerate_interpolator"
|
||||
android:toAlpha="0.0" />
|
||||
</set>
|
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:fillAfter="false">
|
||||
<alpha
|
||||
android:duration="300"
|
||||
android:fromAlpha="1.0"
|
||||
android:interpolator="@android:anim/accelerate_interpolator"
|
||||
android:toAlpha="0.0" />
|
||||
</set>
|
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:fillAfter="true">
|
||||
<scale
|
||||
android:duration="300"
|
||||
android:fromXScale="0.0"
|
||||
android:fromYScale="0.0"
|
||||
android:interpolator="@android:anim/linear_interpolator"
|
||||
android:pivotX="50%"
|
||||
android:pivotY="50%"
|
||||
android:toXScale="1.0"
|
||||
android:toYScale="1.0" />
|
||||
<alpha
|
||||
android:duration="300"
|
||||
android:fromAlpha="0.0"
|
||||
android:interpolator="@android:anim/accelerate_interpolator"
|
||||
android:toAlpha="1.0" />
|
||||
</set>
|
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:fillAfter="true">
|
||||
<alpha
|
||||
android:duration="300"
|
||||
android:fromAlpha="0.0"
|
||||
android:interpolator="@android:anim/accelerate_interpolator"
|
||||
android:toAlpha="1.0" />
|
||||
</set>
|
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:fillAfter="true">
|
||||
<rotate
|
||||
android:duration="300"
|
||||
android:fromDegrees="315"
|
||||
android:interpolator="@android:anim/linear_interpolator"
|
||||
android:pivotX="50%"
|
||||
android:pivotY="50%"
|
||||
android:toDegrees="0" />
|
||||
</set>
|
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:fillAfter="true">
|
||||
<rotate
|
||||
android:duration="300"
|
||||
android:fromDegrees="0"
|
||||
android:interpolator="@android:anim/linear_interpolator"
|
||||
android:pivotX="50%"
|
||||
android:pivotY="50%"
|
||||
android:toDegrees="315" />
|
||||
</set>
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:color="@color/moneroGray" android:state_enabled="false" />
|
||||
<item android:color="@color/moneroText" android:state_enabled="false" />
|
||||
<item android:color="@color/moneroWhite" />
|
||||
</selector>
|
@ -0,0 +1,352 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="1080dp"
|
||||
android:height="1920dp"
|
||||
android:viewportWidth="1080"
|
||||
android:viewportHeight="1920">
|
||||
|
||||
<group>
|
||||
<path
|
||||
android:fillColor="#F6F5F5"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 134.4 -393.2 L 215.2 -363 L 231.2 -273.1 L 109.9 -318.4 L 134.4 -393.2 Z" />
|
||||
<path
|
||||
android:fillColor="#F6F5F5"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 457.7 -272.4 L 538.5 -242.2 L 408.8 -122.7 L 424.8 -32.7 L 263.1 -93.1 L 457.7 -272.4 Z" />
|
||||
<path
|
||||
android:fillColor="#F0F0F0"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 1023.6 -61 L 1266.1 29.6 L 1071.5 208.9 L 1023.6 -61 Z" />
|
||||
<path
|
||||
android:fillColor="#F6F5F5"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 1266.1 29.6 L 1589.5 150.4 L 1524.6 210.1 L 1363 149.7 L 1233.2 269.3 L 1071.5 208.9 L 1266.1 29.6 Z" />
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 215.2 -363 L 457.7 -272.4 L 263.1 -93.1 L 215.2 -363 Z" />
|
||||
<path
|
||||
android:fillColor="#F0F0F0"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 1363 149.7 L 1524.6 210.1 L 1394.9 329.6 L 1363 149.7 Z" />
|
||||
<path
|
||||
android:fillColor="#F0F0F0"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 109.9 -318.4 L 231.2 -273.1 L 263.1 -93.1 L 424.8 -32.7 L 440.7 57.3 L 36.5 -93.7 L 109.9 -318.4 Z" />
|
||||
<path
|
||||
android:fillColor="#F6F5F5"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 36.5 -93.7 L 440.7 57.3 L 456.7 147.2 L 52.5 -3.8 L -12.4 56 L 36.5 -93.7 Z" />
|
||||
<path
|
||||
android:fillColor="#F0F0F0"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 619.5 -212 L 1023.6 -61 L 1071.5 208.9 L 1233.2 269.3 L 1281.1 539.2 L 634.4 297.6 L 602.4 117.7 L 683.3 147.9 L 619.5 -212 Z" />
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 1589.5 150.4 L 1670.4 180.5 L 1572.5 480 L 1377.9 659.3 L 1362 569.4 L 1297 629.1 L 1233.2 269.3 L 1363 149.7 L 1394.9 329.6 L 1589.5 150.4 Z" />
|
||||
<path
|
||||
android:fillColor="#F0F0F0"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 52.5 -3.8 L 456.7 147.2 L 472.7 237.2 L 278.1 416.5 L 230.1 146.6 L 100.4 266.1 L 52.5 -3.8 Z" />
|
||||
<path
|
||||
android:fillColor="#F6F5F5"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 1474.7 779.4 L 1232.2 688.9 L 1167.3 748.7 L 1183.3 838.6 L 1021.6 778.1 L 891.8 897.7 L 568.5 777 L 503.6 836.8 L 180.2 716 L 634.4 297.6 L 1281.1 539.2 L 1297 629.1 L 1362 569.4 L 1377.9 659.3 L 1572.5 480 L 1474.7 779.4 Z" />
|
||||
<path
|
||||
android:fillColor="#F0F0F0"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 1232.2 688.9 L 1474.7 779.4 L 1345 898.9 L 1264.2 868.8 L 1232.2 688.9 Z" />
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 538.5 -242.2 L 619.5 -212 L 683.3 147.9 L 602.4 117.7 L 634.4 297.6 L 180.2 716 L 341.9 776.4 L 357.9 866.3 L 163.3 1045.6 L 51.5 415.8 L -78.3 535.4 L 2.6 565.6 L -127.2 685.1 L -208 654.9 L -12.4 56 L 52.5 -3.8 L 100.4 266.1 L 230.1 146.6 L 278.1 416.5 L 472.7 237.2 L 408.8 -122.7 Z" />
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 1232.2 688.9 L 1264.2 868.8 L 1199.2 928.5 L 1167.3 748.7 L 1232.2 688.9 Z" />
|
||||
<path
|
||||
android:fillColor="#F6F5F5"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 1264.2 868.8 L 1345 898.9 L 1360.9 988.9 L 1199.2 928.5 L 1264.2 868.8 Z" />
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 1474.7 779.4 L 1376.9 1078.9 L 1345 898.9 L 1474.7 779.4 Z" />
|
||||
<path
|
||||
android:fillColor="#F6F5F5"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 51.5 415.8 L 115.3 775.7 L -127.2 685.1 L 2.6 565.6 L -78.3 535.4 L 51.5 415.8 Z" />
|
||||
<path
|
||||
android:fillColor="#F0F0F0"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 341.9 776.4 L 503.6 836.8 L 438.7 896.5 L 357.9 866.3 Z" />
|
||||
<path
|
||||
android:fillColor="#F0F0F0"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 811 867.6 L 891.8 897.7 L 923.7 1077.6 L 842.9 1047.5 L 811 867.6 Z" />
|
||||
<path
|
||||
android:fillColor="#F0F0F0"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M -208 654.9 L 115.3 775.7 L 147.3 955.6 L -176.1 834.8 Z" />
|
||||
<path
|
||||
android:fillColor="#F6F5F5"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 357.9 866.3 L 438.7 896.5 L 373.8 956.3 L 405.8 1136.2 L 421.7 1226.1 L -225 984.6 L -354.7 1104.1 L -305.8 954.4 L -176.1 834.8 L 147.3 955.6 L 163.3 1045.6 Z" />
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 811 867.5 L 842.9 1047.4 L 778.1 1107.3 L 746.2 927.4 L 811 867.5 Z" />
|
||||
<path
|
||||
android:fillColor="#F6F5F5"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 842.9 1047.5 L 923.7 1077.6 L 939.7 1167.6 L 778.1 1107.3 L 842.9 1047.5 Z" />
|
||||
<path
|
||||
android:fillColor="#F0F0F0"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 568.5 777 L 811 867.6 L 746.1 927.4 L 778.1 1107.3 L 939.7 1167.6 L 874.8 1227.3 L 632.4 1136.8 L 568.5 777 Z" />
|
||||
<path
|
||||
android:fillColor="#F6F5F5"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 405.8 1136.2 L 421.7 1226.2 L 421.7 1226.1 Z" />
|
||||
<path
|
||||
android:fillColor="#F0F0F0"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 1021.6 778.1 L 1183.3 838.6 L 1199.2 928.5 L 1360.9 988.9 L 1376.9 1078.9 L 1254.6 1453.2 L 1214.2 1438.1 L 1134.4 988.4 L 1069.5 1048.1 L 1021.6 778.1 Z" />
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M -208 654.9 L -176.1 834.8 L -305.8 954.4 Z" />
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 476.8 1536.3 L 485.6 1586 L 485.6 1586 Z" />
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 485.7 1586 L 728.1 1676.6 L 533.5 1855.9 Z" />
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 728.1 1676.6 L 889.8 1737 L 760 1856.5 Z" />
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 729.2 1256.9 L 745.1 1346.9 L 664.3 1316.7 Z" />
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 1069.5 1048.1 L 1134.4 988.3 L 1214.2 1438.1 L 1149.2 1497.9 L 745.1 1346.9 L 810 1287.1 L 874.8 1227.3 L 939.7 1167.6 L 923.7 1077.6 L 891.8 897.7 L 1021.6 778.1 Z" />
|
||||
<path
|
||||
android:fillColor="#F0F0F0"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 729.2 1257 L 810 1287.2 L 745.1 1346.9 L 729.2 1257 Z" />
|
||||
<path
|
||||
android:fillColor="#F0F0F0"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M -144.2 1014.8 L 421.7 1226.1 L 437.6 1316.1 L 518.6 1346.3 L 453.6 1406.1 L 469.6 1496 L 65.4 1345 L 49.4 1255 L -15.4 1314.9 L -96.3 1284.7 Z" />
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 568.5 777 L 632.4 1136.8 L 437.7 1316.1 L 421.7 1226.2 L 421.7 1226.1 L 405.8 1136.2 L 373.8 956.3 L 438.7 896.5 L 503.6 836.8 Z" />
|
||||
<path
|
||||
android:fillColor="#F6F5F5"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 874.8 1227.3 L 810 1287.1 L 729.2 1256.9 L 664.3 1316.7 L 583.5 1286.6 L 518.6 1346.3 L 437.6 1316.1 L 632.3 1136.7 L 874.8 1227.3 " />
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M -225 984.6 L -144.2 1014.8 L -96.2 1284.7 L -355.7 1523.8 L -194.1 1584.2 L -178.1 1674.1 L -420.6 1583.5 L -452.6 1403.6 L -354.7 1104.1 Z" />
|
||||
<path
|
||||
android:fillColor="#F6F5F5"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M -145.2 1434.4 L -129.2 1524.3 L 65.4 1345 L 469.6 1496 L 476.8 1536.3 L 485.6 1586 L 243.1 1495.4 L 113.3 1614.9 L 48.4 1674.7 L -355.8 1523.8 L -96.3 1284.7 L -15.5 1314.8 Z" />
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 1132.3 1827.6 L 1083.4 1977.3 L 888.8 2156.6 L 872.9 2066.6 L 937.7 2006.9 Z" />
|
||||
<path
|
||||
android:fillColor="#F6F5F5"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M -15.5 1314.8 L -15.4 1314.9 L -145.1 1434.4 Z" />
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 49.4 1255.1 L 65.4 1345.1 L -129.2 1524.4 L -145.1 1434.4 L -15.5 1314.8 L -15.4 1314.9 Z" />
|
||||
<path
|
||||
android:fillColor="#F6F5F5"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 1214.2 1438.1 L 1254.6 1453.2 L 1230.1 1528.1 L 1149.2 1497.9 Z" />
|
||||
<path
|
||||
android:fillColor="#F6F5F5"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M -452.6 1403.6 L -420.6 1583.5 L -501.5 1553.3 L -452.6 1403.6 Z" />
|
||||
<path
|
||||
android:fillColor="#F0F0F0"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M -194.1 1584.2 L 48.4 1674.7 L -16.4 1734.5 L 47.5 2094.3 L -195.1 2003.7 L -243 1733.9 L -307.9 1793.6 L -509.9 1718.1 L -525.9 1628.2 L -501.5 1553.3 L -178.1 1674.1 Z" />
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 306.9 1855.2 L 436.7 1735.7 L 468.6 1915.6 L 274 2094.9 L 258 2004.9 L 128.3 2124.5 L 47.4 2094.3 L -16.4 1734.5 L 48.4 1674.7 L 113.3 1614.9 L 243.1 1495.4 Z" />
|
||||
<path
|
||||
android:fillColor="#F0F0F0"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 243.1 1495.4 L 485.6 1586 L 533.5 1855.9 L 695.2 1916.3 L 630.3 1976 L 468.6 1915.6 L 436.7 1735.7 L 306.9 1855.2 Z" />
|
||||
<path
|
||||
android:fillColor="#F0F0F0"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 695.2 1916.3 L 937.7 2006.9 L 872.9 2066.6 L 888.8 2156.6 L 1010.1 2201.9 L 936.7 2426.5 L 775 2366.1 Z" />
|
||||
<path
|
||||
android:fillColor="#F6F5F5"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 1083.5 1977.3 L 1010.1 2201.9 L 888.8 2156.6 L 1083.5 1977.3 Z" />
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M -243 1733.9 L -195.1 2003.7 L -437.6 1913.2 L -243 1733.9 Z" />
|
||||
<path
|
||||
android:fillColor="#F6F5F5"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 468.6 1915.6 L 630.3 1976 L 435.7 2155.3 L 370.8 2215.1 L 128.3 2124.5 L 258 2004.9 L 274 2094.9 Z" />
|
||||
<path
|
||||
android:fillColor="#F6F5F5"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M -509.9 1718.1 L -307.9 1793.6 L -437.6 1913.2 L -599.3 1852.8 L -574.8 1777.8 L -509.9 1718.1 Z" />
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M -525.9 1628.2 L -509.9 1718.1 L -574.8 1777.8 L -525.9 1628.2 Z" />
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 695.2 1916.3 L 775 2366.1 L 370.8 2215.1 L 435.7 2155.3 L 630.3 1976 Z" />
|
||||
<path
|
||||
android:fillColor="#F0F0F0"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 583.5 1286.6 L 1230.2 1528.1 L 1181.3 1677.8 L 615.4 1466.5 Z" />
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 583.5 1286.6 L 615.4 1466.5 L 485.7 1586 L 453.7 1406.1 Z" />
|
||||
<path
|
||||
android:fillColor="#F6F5F5"
|
||||
android:fillAlpha="0.62"
|
||||
android:strokeAlpha="0.62"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M 615.4 1466.5 L 1181.3 1677.8 L 1132.3 1827.6 L 937.7 2006.9 L 533.5 1855.9 L 728.1 1676.6 L 760 1856.5 L 889.8 1737 L 485.7 1586 Z" />
|
||||
</group>
|
||||
</vector>
|
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="@color/white" />
|
||||
<padding
|
||||
android:bottom="8dp"
|
||||
android:left="8dp"
|
||||
android:right="8dp"
|
||||
android:top="8dp" />
|
||||
</shape>
|
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<padding
|
||||
android:bottom="8dp"
|
||||
android:left="8dp"
|
||||
android:right="8dp"
|
||||
android:top="8dp" />
|
||||
<corners android:radius="3dp" />
|
||||
<stroke
|
||||
android:width="2dp"
|
||||
android:color="@color/gradientOrange"
|
||||
android:dashGap="16dp"
|
||||
android:dashWidth="16dp" />
|
||||
</shape>
|
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="@color/white" />
|
||||
<padding
|
||||
android:bottom="8dp"
|
||||
android:left="8dp"
|
||||
android:right="8dp"
|
||||
android:top="8dp" />
|
||||
<stroke
|
||||
android:width="2dp"
|
||||
android:color="#FF979797"
|
||||
android:dashGap="8dp"
|
||||
android:dashWidth="8dp" />
|
||||
</shape>
|
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<padding
|
||||
android:bottom="8dp"
|
||||
android:left="8dp"
|
||||
android:right="8dp"
|
||||
android:top="8dp" />
|
||||
<stroke
|
||||
android:width="2dp"
|
||||
android:color="@color/gradientOrange" />
|
||||
</shape>
|
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@drawable/gradient_all" />
|
||||
<item
|
||||
android:height="?attr/actionBarSize"
|
||||
android:drawable="@drawable/texture_cash" />
|
||||
</layer-list>
|
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="@color/gradientOrange" />
|
||||
</shape>
|
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="@color/moneroGray" />
|
||||
</shape>
|
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@drawable/button_disabled" android:state_enabled="false" />
|
||||
<item android:drawable="@drawable/button_default" android:state_enabled="true" />
|
||||
<item android:drawable="@drawable/button_default" android:state_pressed="false" />
|
||||
</selector>
|
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<gradient
|
||||
android:angle="45"
|
||||
android:endColor="@color/gradientOrange"
|
||||
android:startColor="@color/gradientPink"
|
||||
android:type="linear" />
|
||||
</shape>
|
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="oval">
|
||||
<gradient
|
||||
android:angle="45"
|
||||
android:endColor="@color/gradientOrange"
|
||||
android:startColor="@color/gradientPink"
|
||||
android:type="linear" />
|
||||
</shape>
|
@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:oneshot="true">
|
||||
<item
|
||||
android:drawable="@drawable/gunther_wallets_00"
|
||||
android:duration="500" />
|
||||
<item
|
||||
android:drawable="@drawable/gunther_wallets_01"
|
||||
android:duration="200" />
|
||||
<item
|
||||
android:drawable="@drawable/gunther_wallets_02"
|
||||
android:duration="2000" />
|
||||
<item
|
||||
android:drawable="@drawable/gunther_wallets_03"
|
||||
android:duration="1000" />
|
||||
<item
|
||||
android:drawable="@drawable/gunther_wallets_04"
|
||||
android:duration="100" />
|
||||
<item
|
||||
android:drawable="@drawable/gunther_wallets_05"
|
||||
android:duration="1000" />
|
||||
<item
|
||||
android:drawable="@drawable/gunther_wallets_06"
|
||||
android:duration="0" />
|
||||
<item
|
||||
android:drawable="@drawable/gunther_wallets_07"
|
||||
android:duration="0" />
|
||||
<item
|
||||
android:drawable="@drawable/gunther_wallets_08"
|
||||
android:duration="0" />
|
||||
<item
|
||||
android:drawable="@drawable/gunther_wallets_09"
|
||||
android:duration="0" />
|
||||
<item
|
||||
android:drawable="@drawable/gunther_wallets_10"
|
||||
android:duration="0" />
|
||||
<item
|
||||
android:drawable="@drawable/gunther_wallets_11"
|
||||
android:duration="0" />
|
||||
<item
|
||||
android:drawable="@drawable/gunther_wallets_12"
|
||||
android:duration="0" />
|
||||
<item
|
||||
android:drawable="@drawable/gunther_wallets_13"
|
||||
android:duration="0" />
|
||||
<item
|
||||
android:drawable="@drawable/gunther_wallets_14"
|
||||
android:duration="0" />
|
||||
<item
|
||||
android:drawable="@drawable/gunther_wallets_15"
|
||||
android:duration="0" />
|
||||
<item
|
||||
android:drawable="@drawable/gunther_wallets_16"
|
||||
android:duration="0" />
|
||||
<item
|
||||
android:drawable="@drawable/gunther_wallets_17"
|
||||
android:duration="0" />
|
||||
<item
|
||||
android:drawable="@drawable/gunther_wallets_18"
|
||||
android:duration="5000" />
|
||||
<item
|
||||
android:drawable="@drawable/gunther_wallets_19"
|
||||
android:duration="0" />
|
||||
<item
|
||||
android:drawable="@drawable/gunther_wallets_20"
|
||||
android:duration="0" />
|
||||
<item
|
||||
android:drawable="@drawable/gunther_wallets_21"
|
||||
android:duration="100" />
|
||||
<item
|
||||
android:drawable="@drawable/gunther_wallets_22"
|
||||
android:duration="200" />
|
||||
</animation-list>
|
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportHeight="20.0"
|
||||
android:viewportWidth="20.0">
|
||||
<path
|
||||
android:fillColor="@color/moneroFab"
|
||||
android:pathData="M11,5L9,5L9,9L5,9L5,11L9,11L9,15L11,15L11,11L15,11L15,9L11,9L11,5L11,5ZM10,0C4.5,0 0,4.5 0,10C0,15.5 4.5,20 10,20C15.5,20 20,15.5 20,10C20,4.5 15.5,0 10,0L10,0ZM10,18C5.6,18 2,14.4 2,10C2,5.6 5.6,2 10,2C14.4,2 18,5.6 18,10C18,14.4 14.4,18 10,18L10,18Z" />
|
||||
</vector>
|
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportHeight="24.0"
|
||||
android:viewportWidth="24.0">
|
||||
<path
|
||||
android:fillColor="#FFffffff"
|
||||
android:pathData="M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" />
|
||||
</vector>
|
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportHeight="24.0"
|
||||
android:viewportWidth="24.0">
|
||||
<path
|
||||
android:fillColor="#FFffffff"
|
||||
android:pathData="M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z" />
|
||||
</vector>
|
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="#FFffffff"
|
||||
android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/>
|
||||
</vector>
|
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="@color/moneroBlack"
|
||||
android:pathData="M16,1L4,1c-1.1,0 -2,0.9 -2,2v14h2L4,3h12L16,1zM19,5L8,5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h11c1.1,0 2,-0.9 2,-2L21,7c0,-1.1 -0.9,-2 -2,-2zM19,21L8,21L8,7h11v14z"/>
|
||||
</vector>
|
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="@color/moneroGray"
|
||||
android:pathData="M16,1L4,1c-1.1,0 -2,0.9 -2,2v14h2L4,3h12L16,1zM19,5L8,5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h11c1.1,0 2,-0.9 2,-2L21,7c0,-1.1 -0.9,-2 -2,-2zM19,21L8,21L8,7h11v14z"/>
|
||||
</vector>
|
@ -0,0 +1,13 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportHeight="24.0"
|
||||
android:viewportWidth="24.0">
|
||||
<group
|
||||
android:translateX="0.000000"
|
||||
android:translateY="+7.000000">
|
||||
<path
|
||||
android:fillColor="#417505"
|
||||
android:pathData="M17.6,1.4L16.2,0L9.9,6.3L11.3,7.7L17.6,1.4L17.6,1.4ZM21.8,0L11.3,10.6L7.1,6.4L5.7,7.8L11.3,13.4L23.3,1.4L21.8,0L21.8,0ZM0,7.8L5.6,13.4L7,12L1.4,6.4L0,7.8L0,7.8Z" />
|
||||
</group>
|
||||
</vector>
|
@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="29dp"
|
||||
android:height="17dp"
|
||||
android:viewportHeight="17"
|
||||
android:viewportWidth="29">
|
||||
|
||||
<group
|
||||
android:translateX="-219.000000"
|
||||
android:translateY="-74.000000">
|
||||
<group
|
||||
android:translateX="219.000000"
|
||||
android:translateY="74.000000">
|
||||
<path
|
||||
android:fillColor="#FEFEFE"
|
||||
android:pathData="M14.4474298,13.6840973 C11.5770468,13.6840973 9.24995106,11.3571559
|
||||
9.24995106,8.48677287 C9.24995106,5.61623564 11.5770468,3.28929415
|
||||
14.4474298,3.28929415 C17.3178128,3.28929415 19.6449085,5.61623564
|
||||
19.6449085,8.48677287 C19.6449085,11.3571559 17.3178128,13.6840973
|
||||
14.4474298,13.6840973 M14.4474298,-4.62765957e-05 C8.23695638,-4.62765957e-05
|
||||
2.82706809,3.42395904 3.08510638e-05,8.48692713 C2.82706809,13.5494324
|
||||
8.23695638,16.9734378 14.4474298,16.9734378 C20.6579032,16.9734378
|
||||
26.0676372,13.5494324 28.8948287,8.48692713 C26.0676372,3.42395904
|
||||
20.6579032,-4.62765957e-05 14.4474298,-4.62765957e-05"
|
||||
android:strokeWidth="1" />
|
||||
</group>
|
||||
</group>
|
||||
</vector>
|
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="14dp"
|
||||
android:height="14dp"
|
||||
android:viewportHeight="24.0"
|
||||
android:viewportWidth="24.0">
|
||||
<path
|
||||
android:fillColor="#FFffffff"
|
||||
android:pathData="M12,21.35l-1.45,-1.32C5.4,15.36 2,12.28 2,8.5 2,5.42 4.42,3 7.5,3c1.74,0 3.41,0.81 4.5,2.09C13.09,3.81 14.76,3 16.5,3 19.58,3 22,5.42 22,8.5c0,3.78 -3.4,6.86 -8.55,11.54L12,21.35z" />
|
||||
</vector>
|
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportHeight="24.0"
|
||||
android:viewportWidth="24.0">
|
||||
<path
|
||||
android:fillColor="#FFffffff"
|
||||
android:pathData="M12,21.35l-1.45,-1.32C5.4,15.36 2,12.28 2,8.5 2,5.42 4.42,3 7.5,3c1.74,0 3.41,0.81 4.5,2.09C13.09,3.81 14.76,3 16.5,3 19.58,3 22,5.42 22,8.5c0,3.78 -3.4,6.86 -8.55,11.54L12,21.35z" />
|
||||
</vector>
|
@ -0,0 +1,21 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportHeight="22.0"
|
||||
android:viewportWidth="22.0">
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:pathData="M13.985,8.648C14.245,8.798 14.478,8.873 14.684,8.873C14.817,8.873 14.925,8.842 15.008,8.777C15.093,8.713 15.135,8.63 15.135,8.527C15.135,8.418 15.089,8.333 14.998,8.272C14.907,8.212 14.778,8.181 14.611,8.181C14.43,8.181 14.24,8.219 14.04,8.295L14.293,6.397L15.913,6.397L15.913,7.177L14.985,7.177L14.915,7.502C14.976,7.498 15.025,7.496 15.063,7.496C15.33,7.496 15.556,7.592 15.74,7.782C15.923,7.971 16.014,8.207 16.014,8.49C16.014,8.822 15.896,9.099 15.66,9.321C15.426,9.543 15.132,9.654 14.776,9.654C14.472,9.654 14.175,9.572 13.882,9.407L13.985,8.648ZM15,11C16.657,11 18,9.657 18,8C18,6.343 16.657,5 15,5C13.343,5 12,6.343 12,8C12,9.657 13.343,11 15,11L15,11Z"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeWidth="1" />
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:pathData="M21.344,12.691C20.503,12.122 19.588,12.527 19.168,12.769L14.417,16.615L10.807,16.616L10.035,15.847L12.871,15.847C13.724,15.847 14.679,15.293 14.679,14.308C14.679,13.262 13.724,12.769 12.871,12.769L11.808,12.769C11.019,12.769 10.096,12.839 9.446,12.492C8.828,12.179 8.116,12.001 7.356,12.001C6.081,12.001 4.939,12.507 4.157,13.307L-0,17.385L4.631,22L6.175,19.692L13.993,19.692C14.771,19.692 15.522,19.408 16.103,18.893L21.397,13.745C21.72,13.459 21.702,12.933 21.344,12.691"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeWidth="1" />
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:pathData="M10.115,1.099L11.102,1.099L11.102,3.926L10.397,3.926L10.397,1.776L10.115,1.776L10.115,1.099ZM10.692,5C11.967,5 13,3.881 13,2.5C13,1.119 11.967,-0 10.692,-0C9.418,-0 8.384,1.119 8.384,2.5C8.384,3.881 9.418,5 10.692,5L10.692,5Z"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeWidth="1" />
|
||||
</vector>
|
@ -1,9 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportHeight="24.0"
|
||||
android:viewportWidth="24.0">
|
||||
<path
|
||||
android:fillColor="#FF000000"
|
||||
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM13,19h-2v-2h2v2zM15.07,11.25l-0.9,0.92C13.45,12.9 13,13.5 13,15h-2v-0.5c0,-1.1 0.45,-2.1 1.17,-2.83l1.24,-1.26c0.37,-0.36 0.59,-0.86 0.59,-1.41 0,-1.1 -0.9,-2 -2,-2s-2,0.9 -2,2L8,9c0,-2.21 1.79,-4 4,-4s4,1.79 4,4c0,0.88 -0.36,1.68 -0.93,2.25z"/>
|
||||
android:fillColor="#FFffffff"
|
||||
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM13,19h-2v-2h2v2zM15.07,11.25l-0.9,0.92C13.45,12.9 13,13.5 13,15h-2v-0.5c0,-1.1 0.45,-2.1 1.17,-2.83l1.24,-1.26c0.37,-0.36 0.59,-0.86 0.59,-1.41 0,-1.1 -0.9,-2 -2,-2s-2,0.9 -2,2L8,9c0,-2.21 1.79,-4 4,-4s4,1.79 4,4c0,0.88 -0.36,1.68 -0.93,2.25z" />
|
||||
</vector>
|
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="@color/moneroFab"
|
||||
android:pathData="M11,17h2v-6h-2v6zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8zM11,9h2L13,7h-2v2z"/>
|
||||
</vector>
|
@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="29dp"
|
||||
android:height="13dp"
|
||||
android:viewportHeight="13"
|
||||
android:viewportWidth="29">
|
||||
|
||||
<group
|
||||
android:translateX="-219.000000"
|
||||
android:translateY="-136.000000">
|
||||
<group
|
||||
android:translateX="219.000000"
|
||||
android:translateY="136.000000">
|
||||
<path
|
||||
android:fillColor="#FEFEFE"
|
||||
android:pathData="M6.29687258,9.00290326 C4.95784407,9.00290326 3.87228646,7.88216454
|
||||
3.87228646,6.49992511 C3.87228646,5.11783546 4.95784407,3.99709674
|
||||
6.29687258,3.99709674 C7.63604617,3.99709674 8.72160379,5.11783546
|
||||
8.72160379,6.49992511 C8.72160379,7.88216454 7.63604617,9.00290326
|
||||
6.29687258,9.00290326 L6.29687258,9.00290326 Z M19.5790661,4.89647346
|
||||
L12.4001961,4.89647346 C11.7082656,2.08212076 9.23841162,0 6.29687258,0
|
||||
C2.81922883,0 0,2.9099068 0,6.49992511 C0,10.0899434 2.81922883,13 6.29687258,13
|
||||
C9.23841162,13 11.7082656,10.9178792 12.4001961,8.10352654
|
||||
L19.5790661,8.10352654 L19.5790661,13 L21.3018556,13 L21.3018556,9.33689328
|
||||
L23.3905602,9.33689328 L23.3905602,13 L25.3240193,13 L25.3240193,10.81259
|
||||
L27.3216078,10.81259 L27.3216078,13 L29,13 L29,8.10352654 L29,4.89647346
|
||||
L19.5790661,4.89647346 Z"
|
||||
android:strokeWidth="1" />
|
||||
</group>
|
||||
</group>
|
||||
</vector>
|
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="#FF000000"
|
||||
android:pathData="M8.59,16.34l4.58,-4.59 -4.58,-4.59L10,5.75l6,6 -6,6z"/>
|
||||
</vector>
|
@ -0,0 +1,36 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="135dp"
|
||||
android:height="48dp"
|
||||
android:viewportHeight="108.0"
|
||||
android:viewportWidth="304.0">
|
||||
<path
|
||||
android:fillColor="#FFffffff"
|
||||
android:pathData="M74.4,65.14q-4.73,-4.88 -4.73,-12.84t4.95,-12.87A16.88,16.88 0,0 1,87 34.52a16.88,16.88 0,0 1,12.4 4.92q4.95,4.92 4.95,12.84A16.91,16.91 0,0 1,99.2 65.11,17.62 17.62,0 0,1 86.58,70 16.2,16.2 0,0 1,74.4 65.14ZM86.58,65.33a11.53,11.53 0,0 0,8.36 -3.48q3.54,-3.48 3.54,-9.61T95.1,42.66a11.11,11.11 0,0 0,-8.24 -3.44,10.7 10.7,0 0,0 -8.11,3.44q-3.26,3.45 -3.26,9.61t3.13,9.61A10.27,10.27 0,0 0,86.58 65.33Z" />
|
||||
<path
|
||||
android:fillColor="#FFffffff"
|
||||
android:pathData="M117.21,35.08v5.57q3.51,-6.14 11.21,-6.14a13,13 0,0 1,9.52 3.79q3.82,3.79 3.82,10.8V69.46h-5.64V50.05q0,-5.2 -2.5,-7.89a9,9 0,0 0,-6.92 -2.69,9.09 9.09,0 0,0 -7,2.69q-2.54,2.69 -2.54,7.89V69.46h-5.7V35.08Z" />
|
||||
<path
|
||||
android:fillColor="#FFffffff"
|
||||
android:pathData="M165.24,70a15.82,15.82 0,0 1,-12 -4.88q-4.63,-4.88 -4.63,-12.9t4.7,-12.87a16.2,16.2 0,0 1,12.18 -4.85q7.48,0 12,4.6A16,16 0,0 1,182 50.87a21.51,21.51 0,0 1,-0.25 3.38L154.4,54.25a11.81,11.81 0,0 0,3.22 8.11,10.3 10.3,0 0,0 7.61,3 10.63,10.63 0,0 0,5.92 -1.57,9.3 9.3,0 0,0 3.54,-4.13h6.14a15.79,15.79 0,0 1,-5.61 7.45A16.33,16.33 0,0 1,165.24 70ZM172.94,42.16a11.23,11.23 0,0 0,-15.16 -0.06,11.65 11.65,0 0,0 -3.32,8h21.61A10.73,10.73 0,0 0,172.94 42.19Z" />
|
||||
<path
|
||||
android:fillColor="#FFffffff"
|
||||
android:pathData="M194.8,35.08v5.82q3.07,-6.39 10.46,-6.39v5.95h-1.5q-4.38,0 -6.67,2.29t-2.29,7.92V69.46h-5.7V35.08Z" />
|
||||
<path
|
||||
android:fillColor="#FFffffff"
|
||||
android:pathData="M236.38,35.08h5.7V69.46h-5.7V64Q232.93,70 225.17,70a13,13 0,0 1,-9.52 -3.79q-3.82,-3.79 -3.82,-10.74V35.08h5.64V54.56q0,5.14 2.54,7.86a10.15,10.15 0,0 0,13.84 0q2.54,-2.72 2.54,-7.86Z" />
|
||||
<path
|
||||
android:fillColor="#FFffffff"
|
||||
android:pathData="M254.35,29.57a3.9,3.9 0,0 0,2.76 -6.64,3.85 3.85,0 0,0 -6.58,2.76 3.8,3.8 0,0 0,1.1 2.75A3.64,3.64 0,0 0,254.35 29.57Z" />
|
||||
<path
|
||||
android:fillColor="#FFffffff"
|
||||
android:pathData="M251.43,76.85a4.48,4.48 0,0 1,-1 3.24,4.61 4.61,0 0,1 -3.33,1h-2.43v4.67h3.56c5.93,0 8.85,-3 8.85,-8.88V35.07h-5.69Z" />
|
||||
<path
|
||||
android:fillColor="#FFffffff"
|
||||
android:pathData="M59.82,29.57a3.9,3.9 0,0 0,2.76 -6.64A3.85,3.85 0,0 0,56 25.69a3.8,3.8 0,0 0,1.1 2.75A3.64,3.64 0,0 0,59.82 29.57Z" />
|
||||
<path
|
||||
android:fillColor="#FFffffff"
|
||||
android:pathData="M59,38.31a13.12,13.12 0,0 0,-9.64 -3.79,13.81 13.81,0 0,0 -7.35,2A14,14 0,0 0,36.92 42a12,12 0,0 0,-4.82 -5.54A13.65,13.65 0,0 0,25 34.52q-7.7,0 -11.21,6.14V35.07H8V69.46h5.75V50.05q0,-5.2 2.54,-7.89a9.09,9.09 0,0 1,7 -2.69,9 9,0 0,1 6.91,2.69q2.5,2.69 2.5,7.89v19.4h5.64V50.05q0,-5.2 2.54,-7.89a9.06,9.06 0,0 1,6.92 -2.69,9 9,0 0,1 6.91,2.69c1.69,1.8 2.52,4.43 2.52,7.89V69.46l0,7.39a4.48,4.48 0,0 1,-0.95 3.24,4.59 4.59,0 0,1 -3.33,1H50.41v4.67H54c5.93,0 8.82,-3 8.82,-8.88V49.11C62.82,44.44 61.56,40.84 59,38.31Z" />
|
||||
<path
|
||||
android:fillColor="#FFffffff"
|
||||
android:pathData="M269,65.14q-4.73,-4.88 -4.73,-12.84t4.95,-12.87a18.09,18.09 0,0 1,24.8 0Q299,44.35 299,52.28a16.91,16.91 0,0 1,-5.17 12.84A17.62,17.62 0,0 1,281.21 70,16.2 16.2,0 0,1 269,65.14ZM281.18,65.33a11.53,11.53 0,0 0,8.36 -3.48q3.54,-3.48 3.54,-9.61t-3.38,-9.58a11.11,11.11 0,0 0,-8.24 -3.44,10.7 10.7,0 0,0 -8.11,3.44q-3.26,3.45 -3.26,9.61t3.13,9.61A10.27,10.27 0,0 0,281.21 65.33Z" />
|
||||
</vector>
|
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="#FF000000"
|
||||
android:pathData="M10,6L8.59,7.41 13.17,12l-4.58,4.59L10,18l6,-6z"/>
|
||||
</vector>
|
@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="29dp"
|
||||
android:height="29dp"
|
||||
android:viewportHeight="29"
|
||||
android:viewportWidth="29">
|
||||
|
||||
<group
|
||||
android:translateX="-219.000000"
|
||||
android:translateY="-7.000000">
|
||||
<group
|
||||
android:translateX="219.000000"
|
||||
android:translateY="7.000000">
|
||||
<path
|
||||
android:fillColor="#FEFEFE"
|
||||
android:pathData="M11.0476403,8.86547314 C10.1626979,9.41441547 9.41459398,10.1624996
|
||||
8.86563718,11.047619 L3.4524022,5.63432651 L5.63440531,3.45238095
|
||||
L11.0476403,8.86547314 Z M14.8450352,7.41694052 C14.2508096,7.41694052
|
||||
13.6733955,7.47975215 13.1190689,7.5952381 L13.1190689,0 L16.5714498,0
|
||||
L16.5714498,7.5952381 C16.0168991,7.47995092 15.4394849,7.41694052
|
||||
14.8450352,7.41694052 Z M7.92772894,14.8624137 C7.92772894,15.4344301
|
||||
7.99486447,15.9902634 8.11830037,16.5240878 L0,16.5240878 L0,13.2007396
|
||||
L8.11830037,13.2007396 C7.99486447,13.734564 7.92772894,14.2903973
|
||||
7.92772894,14.8624137 Z M20.1343478,11.047619 C19.5854054,10.1627
|
||||
18.8375216,9.41461581 17.9524022,8.86547314 L23.3654944,3.45238095
|
||||
L25.5476403,5.63432651 L20.1343478,11.047619 Z M21.4047832,13.1190476
|
||||
L29.0000212,13.1190476 L29.0000212,16.5714286 L21.4047832,16.5714286
|
||||
C21.5202661,16.0168778 21.5830761,15.4394636 21.5830761,14.8452381
|
||||
C21.5830761,14.2510125 21.5202661,13.6735984 21.4047832,13.1190476 Z
|
||||
M8.86557962,17.952381 C9.4145509,18.8373234 10.1626745,19.5854273
|
||||
11.0476403,20.1345844 L5.63446287,25.547619 L3.4524022,23.3656159
|
||||
L8.86557962,17.952381 Z M17.9524022,20.1345269 C18.8373679,19.5855845
|
||||
19.5854916,18.8375004 20.1344629,17.952381 L25.5476403,23.3654731
|
||||
L23.36578,25.547619 L17.9524022,20.1345269 Z M14.8450352,21.5830595
|
||||
C15.4394849,21.5830595 16.0168991,21.5200491 16.5714498,21.4047619
|
||||
L16.5714498,29 L13.1190689,29 L13.1190689,21.4047619 C13.6733955,21.5200491
|
||||
14.2508096,21.5830595 14.8450352,21.5830595 Z"
|
||||
android:strokeWidth="1" />
|
||||
</group>
|
||||
</group>
|
||||
</vector>
|
@ -0,0 +1,13 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:aapt="http://schemas.android.com/aapt"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportHeight="30.0"
|
||||
android:viewportWidth="30.0">
|
||||
<path
|
||||
android:fillColor="#FF640C"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M26.667,27.996L27.991,26.667L27.991,20L30,20L30,26.667C30,28.5 28.5,30 26.667,30L20,30L20,27.996L26.667,27.996ZM3.333,27.996L10,27.996L10,30L3.333,30C1.5,30 0,28.5 0,26.667L0,20L2.009,20L2.009,26.667L3.333,27.996ZM26.667,2.004L20,2.004L20,0L26.667,0C28.5,0 30,1.5 30,3.333L30,10L27.991,10L27.991,3.333L26.667,2.004ZM3.333,2.004L2.009,3.333L2.009,10L0,10L0,3.333C0,1.5 1.5,0 3.333,0L10,0L10,2.004L3.333,2.004Z"
|
||||
android:strokeColor="#00000000"
|
||||
android:strokeWidth="1" />
|
||||
</vector>
|
@ -0,0 +1,21 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="6.35"
|
||||
android:viewportHeight="6.3500004">
|
||||
<path
|
||||
android:pathData="m4.518,3.147c0.341,-0.341 0.45,-0.827 0.327,-1.26 -0.433,-0.123 -0.919,-0.014 -1.26,0.327 -0.341,0.341 -0.45,0.827 -0.327,1.26 0.433,0.123 0.919,0.014 1.26,-0.328"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="m2.731,2.214c-0.341,-0.341 -0.826,-0.45 -1.26,-0.327 -0.123,0.433 -0.014,0.919 0.327,1.26 0.341,0.341 0.827,0.45 1.26,0.328 0.123,-0.433 0.014,-0.919 -0.327,-1.26"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M3.064,2.185l0.206,0l0,3.126l-0.206,0z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="m4.18,5.357c0,-0.549 -0.445,-0.994 -0.994,-0.994 -0.549,0 -0.994,0.445 -0.994,0.994 0,0.549 0.445,0.994 0.994,0.994 0.549,0 0.994,-0.445 0.994,-0.994"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="m3.834,1.123c0,-0.482 -0.266,-0.903 -0.659,-1.123 -0.393,0.22 -0.659,0.64 -0.659,1.123 -0,0.483 0.266,0.903 0.659,1.123 0.393,-0.22 0.659,-0.64 0.659,-1.123"
|
||||
android:fillColor="#ffffff"/>
|
||||
</vector>
|
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportHeight="24.0"
|
||||
android:viewportWidth="24.0">
|
||||
<path
|
||||
android:fillColor="#FFFFFFFF"
|
||||
android:pathData="M2.01,21L23,12 2.01,3 2,10l15,2 -15,2z" />
|
||||
</vector>
|
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="@color/gradientOrange"
|
||||
android:pathData="M19.43,12.98c0.04,-0.32 0.07,-0.64 0.07,-0.98s-0.03,-0.66 -0.07,-0.98l2.11,-1.65c0.19,-0.15 0.24,-0.42 0.12,-0.64l-2,-3.46c-0.12,-0.22 -0.39,-0.3 -0.61,-0.22l-2.49,1c-0.52,-0.4 -1.08,-0.73 -1.69,-0.98l-0.38,-2.65C14.46,2.18 14.25,2 14,2h-4c-0.25,0 -0.46,0.18 -0.49,0.42l-0.38,2.65c-0.61,0.25 -1.17,0.59 -1.69,0.98l-2.49,-1c-0.23,-0.09 -0.49,0 -0.61,0.22l-2,3.46c-0.13,0.22 -0.07,0.49 0.12,0.64l2.11,1.65c-0.04,0.32 -0.07,0.65 -0.07,0.98s0.03,0.66 0.07,0.98l-2.11,1.65c-0.19,0.15 -0.24,0.42 -0.12,0.64l2,3.46c0.12,0.22 0.39,0.3 0.61,0.22l2.49,-1c0.52,0.4 1.08,0.73 1.69,0.98l0.38,2.65c0.03,0.24 0.24,0.42 0.49,0.42h4c0.25,0 0.46,-0.18 0.49,-0.42l0.38,-2.65c0.61,-0.25 1.17,-0.59 1.69,-0.98l2.49,1c0.23,0.09 0.49,0 0.61,-0.22l2,-3.46c0.12,-0.22 0.07,-0.49 -0.12,-0.64l-2.11,-1.65zM12,15.5c-1.93,0 -3.5,-1.57 -3.5,-3.5s1.57,-3.5 3.5,-3.5 3.5,1.57 3.5,3.5 -1.57,3.5 -3.5,3.5z"/>
|
||||
</vector>
|
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportHeight="24.0"
|
||||
android:viewportWidth="24.0">
|
||||
<path
|
||||
android:fillColor="@color/moneroWhite"
|
||||
android:pathData="M18,16.08c-0.76,0 -1.44,0.3 -1.96,0.77L8.91,12.7c0.05,-0.23 0.09,-0.46 0.09,-0.7s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81 1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3 -3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.81C7.5,9.31 6.79,9 6,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.31 2.04,-0.81l7.12,4.16c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.61 1.31,2.92 2.92,2.92 1.61,0 2.92,-1.31 2.92,-2.92s-1.31,-2.92 -2.92,-2.92z" />
|
||||
</vector>
|
@ -0,0 +1,10 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportHeight="16.0"
|
||||
android:viewportWidth="13.0">
|
||||
<path
|
||||
android:fillColor="@color/trafficGray"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M8.401,0.431L8.401,1.741C8.401,2.064 8.163,2.326 7.87,2.326L0.569,2.326C0.255,2.326 0,2.605 0,2.951L0,5.031C0,5.376 0.255,5.657 0.569,5.657L7.87,5.657C8.163,5.657 8.401,5.918 8.401,6.24L8.401,7.569C8.401,7.934 8.788,8.133 9.042,7.899L12.809,4.447C13.064,4.215 13.064,3.785 12.809,3.553L9.042,0.101C8.788,-0.133 8.401,0.066 8.401,0.431L8.401,0.431L8.401,0.431ZM4.599,8.431L4.599,9.742C4.599,10.065 4.837,10.326 5.131,10.326L12.431,10.326C12.746,10.326 13,10.606 13,10.952L13,13.03C13,13.376 12.746,13.656 12.431,13.656L5.131,13.656C4.837,13.656 4.599,13.917 4.599,14.24L4.599,15.569C4.599,15.934 4.212,16.133 3.957,15.9L0.19,12.447C-0.063,12.215 -0.063,11.786 0.19,11.553L3.957,8.101C4.212,7.867 4.599,8.066 4.599,8.431L4.599,8.431L4.599,8.431Z" />
|
||||
</vector>
|
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_pressed="true">
|
||||
<shape>
|
||||
<solid android:color="@color/colorAccent" />
|
||||
</shape>
|
||||
</item>
|
||||
|
||||
<item android:state_pressed="false">
|
||||
<shape>
|
||||
<solid android:color="@android:color/transparent" />
|
||||
</shape>
|
||||
</item>
|
||||
</selector>
|
After Width: | Height: | Size: 48 KiB |
@ -0,0 +1,160 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_margin="8sp">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:weightSum="2">
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/etWalletName"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
app:counterEnabled="true"
|
||||
app:counterMaxLength="20"
|
||||
app:errorEnabled="true">
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
style="@style/MoneroEdit"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/generate_name_hint"
|
||||
android:imeOptions="actionNext"
|
||||
android:inputType="text"
|
||||
android:maxLines="1"
|
||||
android:textAlignment="textStart" />
|
||||
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/etWalletPassword"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1">
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
style="@style/MoneroEdit"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:hint="@string/generate_password_hint"
|
||||
android:imeOptions="actionNext"
|
||||
android:inputType="text"
|
||||
android:textAlignment="textStart" />
|
||||
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/etWalletMnemonic"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
app:errorEnabled="true">
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
style="@style/MoneroEdit"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/generate_mnemonic_hint"
|
||||
android:imeOptions="actionNext"
|
||||
android:inputType="textMultiLine"
|
||||
android:textAlignment="center" />
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/etWalletAddress"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
|
||||
app:counterEnabled="true"
|
||||
app:counterMaxLength="95"
|
||||
app:errorEnabled="true">
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
style="@style/MoneroEdit"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/generate_address_hint"
|
||||
android:imeOptions="actionNext"
|
||||
android:inputType="textMultiLine"
|
||||
android:textAlignment="center" />
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/etWalletViewKey"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
app:counterEnabled="true"
|
||||
app:counterMaxLength="64"
|
||||
app:errorEnabled="true">
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
android:id="@+id/textInputEditText"
|
||||
style="@style/MoneroEdit"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/generate_viewkey_hint"
|
||||
android:imeOptions="actionNext"
|
||||
android:inputType="textMultiLine"
|
||||
android:textAlignment="center" />
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/etWalletSpendKey"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
app:counterEnabled="true"
|
||||
app:counterMaxLength="64"
|
||||
app:errorEnabled="true">
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
style="@style/MoneroEdit"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/generate_spendkey_hint"
|
||||
android:imeOptions="actionNext"
|
||||
android:inputType="textMultiLine"
|
||||
android:textAlignment="center" />
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/etWalletRestoreHeight"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
app:errorEnabled="true">
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
style="@style/MoneroEdit"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/generate_restoreheight_hint"
|
||||
android:imeOptions="actionDone"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
|
||||
<Button
|
||||
android:id="@+id/bGenerate"
|
||||
style="@style/MoneroButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:text="@string/generate_buttonGenerate" />
|
||||
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
@ -0,0 +1,71 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_margin="8sp">
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/etDummy"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp" />
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="16dp"
|
||||
android:hint="@string/label_daemon">
|
||||
|
||||
<com.m2049r.xmrwallet.layout.DropDownEditText
|
||||
android:id="@+id/etDaemonAddress"
|
||||
style="@style/MoneroEdit.Small"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="start"
|
||||
android:hint="@string/prompt_daemon"
|
||||
android:imeOptions="actionDone"
|
||||
android:inputType="textWebEmailAddress|textNoSuggestions"
|
||||
android:maxLines="1"
|
||||
android:textIsSelectable="true" />
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
|
||||
|
||||
<TextView
|
||||
style="@style/MoneroLabel.Heading"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:padding="8sp"
|
||||
android:text="@string/label_login_wallets" />
|
||||
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/ivGuntherWallets"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:src="@drawable/gunther_wallets_00" />
|
||||
|
||||
<android.support.v7.widget.RecyclerView xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:clipToPadding="false"
|
||||
android:paddingBottom="72dp"
|
||||
app:layoutManager="LinearLayoutManager"
|
||||
tools:listitem="@layout/item_wallet" />
|
||||
</FrameLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<include layout="@layout/layout_fabmenu" />
|
||||
|
||||
</FrameLayout>
|