Skip to content

Commit

Permalink
[v0.7.0] update branch (#1074)
Browse files Browse the repository at this point in the history
* LNDHub: transactions call fix

* Add missing `BITCOIN:` url scheme for iOS

* Updated versions in bug template

* Taproot: send and receive

* Taproot: add new locale strings

* Linking fixes

* Spark fixes

* handle LNURL-auth when node doesn't support it

* Lint: Security

* Spark: fix address generation

* Main pane: fix display of Tor onion

* Make sure max parts options only appear for implentations that support MPP/AMP

* Version bump: v0.6.5

* Taproot: new style for Address type selection

* LND: handle commas when setting channel fees

* Make sure Taproot support can be assessed when setting Address types

* Remove default LNDHub host

* v0.6.5: bump iOS build to 2

* CLN: createInvoice: expiry fix

* ErrorUtils: user friendly error messages

* Address select modal QA.

* Lint fix.

* Added quality assurance to PR template

* Android: NFC intent

* handleAnything: don't throw alert when filling out Send form

* Update React: 18.1.0, React Native: 0.68.2

* Remove unused react-native-animated

* OpenChannel: Remove private var as it is restricted

* OpenChannel: don't announce channels by default

* Android: set up NFC app linking

* AndroidManifest: Remove redundant NFC config

* PaymentRequest: enhance UI

* MobileTools: add credit to source

* PaymentRequest: clear store values on navigation back

* AddEditNode: add Spark QR scanner

* Locales: v0.6.5

* bump version to v0.6.5-rc1

* v0.6.5: bump iOS build to 3

* Roll back RN to 0.67.2

* v0.6.5: bump iOS build to 4

* Revert "Roll back RN to 0.67.2"

* SparkQRScanner: add React import

* v0.6.5: bump iOS build to 5

* CollapsedQR: fix color of icon on Hide/Show button

* SparkQRScanner: fix imports to include implementation

* Fix typo

* Add lndhub.io as the first custodial lndhub

It seems that BlueWallet is connecting to lndhub.io by default
and by looking at https://lndhub.io and https://lndhub.herokuapp.com
it seems these two are using the same backend

* About: add new sponsor tiers

* Locales: v0.6.5-rc2

* Version bump: v0.6.5-rc2

* Add c-lightning-REST QR scanner

* xcodeproj: v0.6.5: bump project version to 7

* Android 12: remove top margin hack

* Version bump: v0.6.5-rc3

* Update README.md

* OnchainSwippeableRow: fix animation render for receive and send actions

depends on supportsCoinControl and not supportsRouting

* SwipeableRow: fix animation width for middle action if supported

The actual value of 100 does not match with any other width animated value.
The value should be 200 because if present, the width of others is 200.

* SwipeableRow: add opacity transition for actions 

Since the routing and coins width animations are correct,
the button can appear on the right at the beginning of the swap.
Adding opacity transition hide this buttons.

* Wallet: only enable event listeners after unlock

* Locales: Missing translation labels in Help menu

* Locales: v0.6.5-rc4

* Version bump: v0.6.5-rc4

* Version bump: v0.6.5

* GitHub Actions: add prettier

* GitHub Actions: add lint

* GitHub Actions: Remove old main workflow

* Fix branches

* Add checks:write permission

* Fix link to 'Zeus over Tor guide for RaspiBolt'

* AndroidManifest.xml: Don't make NFC a requirement

Existing config leads to Google Play prevented users without NFC from being able to download the app

* Update README.md w/ new node solution

Add link to Citadel (https://runcitadel.space/) to Full Node Solutions

* Add lint workflow

* Update prettier workflow

* Bug fix: Custom block explorer url force prefixed with https:/ (#1053)

* attempted fix of issue 1051

#1051

if a custom instance of mempool.space is used 'block-height' -> 'block' translation will fail!
could we hint in the url, that it must happen?

* Handle <schema>://<ip>:<port>#mempool.space

We can now hint in a custom url to use mempool.space type path convention.
Anything behind the first # will get cut off from host, and any other value than mempool.space gets ignored.

* Handle <scheme>://<ip>:<port>#mempool.space 

fix typo: schema -> scheme

* Clarifying url host convention hint behavior

Translate 'block-height' to 'block' if:
  a) host is 'mempool.space'
  b) host is in url form ending in convention hint '#mempool.space'
Everything from the first '#' is stripped from host, other convention hints are currently completely ignored

* after prettier

* UrlUtils.ts: remove inferred type

Co-authored-by: Evan Kaloudis <[email protected]>

* Update Mortals display (#1058)

* Update splash images (#1057)

* Android: new splash screen

* Update intro splash image

* Bump nth-check and react-native-svg

Bumps [nth-check](https://github.com/fb55/nth-check) and [react-native-svg](https://github.com/react-native-community/react-native-svg). These dependencies needed to be updated together.

Updates `nth-check` from 1.0.2 to 2.1.1
- [Release notes](https://github.com/fb55/nth-check/releases)
- [Commits](fb55/nth-check@v1.0.2...v2.1.1)

Updates `react-native-svg` from 9.13.6 to 13.0.0
- [Release notes](https://github.com/react-native-community/react-native-svg/releases)
- [Commits](software-mansion/react-native-svg@v9.13.6...v13.0.0)

---
updated-dependencies:
- dependency-name: nth-check
  dependency-type: indirect
- dependency-name: react-native-svg
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>

* Reproducible builds (#1055)

* Simplre reproducible builds

* clone the branch you're reproducing

* fix branch/tag argument taking + use master as default

* be able to execute build.sh more than once

* Simplifiying process

* Updating rn-nodeify to 10.3.0 to avoid issue

* Deleting compile and Dockerfile as they're not used anymore

* Updated simplified build script and README file with instructions to build

* Simplify / beautify build script

* Commenting out the singning process for release in build.gradle

* Build and sign every apk

* Cut apk location up to current location for easy location of files

* Remove signing code

* Delete unused variables

* Updated instructions

* README: update reproducible instructions

* build.sh: lock in Docker image version

reactnativecommunity/react-native-android:5.4

Co-authored-by: Evan Kaloudis <[email protected]>

* Version bump: v0.6.6 (#1060)

* package.json: version bump to v0.6.6

* Android: version bump to v0.6.6

* iOS: version bump to v0.6.6

* package-lock.json: update (#1061)

* F-Droid: update metadata (#1062)

* F-Droid: update metadata

* Update featureGraphic

* Locales: v0.6.6 (#1063)

* README: update F-Droid link

* Update bug_report.yml

Add v0.6.5 + v0.6.6

* remove fallbackResource for react native 0.68 upgrade (#1066)

* style pinpad to avoid overlap on smaller screens (#1067)

* Sponsors: fix display on iPod Touch (#1070)

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: benthecarman <[email protected]>
Co-authored-by: bosch <[email protected]>
Co-authored-by: bosch <[email protected]>
Co-authored-by: Pavol Rusnak <[email protected]>
Co-authored-by: Louis Aussedat <[email protected]>
Co-authored-by: Andrei <[email protected]>
Co-authored-by: sz3k <[email protected]>
Co-authored-by: moonsettler <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Luis Miguel <[email protected]>
Co-authored-by: deregs <[email protected]>
  • Loading branch information
12 people authored Sep 25, 2022
1 parent a75d17c commit 24f75c8
Show file tree
Hide file tree
Showing 109 changed files with 7,203 additions and 3,154 deletions.
4 changes: 4 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ body:
label: Zeus version
description: What version of Zeus were you running when the bug occurred?
options:
- v0.6.6
- v0.6.5
- v0.6.4
- v0.6.3
- v0.6.2
- v0.6.1
- v0.6.0
Expand Down
1 change: 1 addition & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ This pull request is categorized as a:
- [ ] Code refactor
- [ ] Configuration change
- [ ] Locales update
- [ ] Quality assurance
- [ ] Other

## Checklist
Expand Down
13 changes: 13 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
name: Lint
on: [push]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: '12.x'
- run: npm ci
- run: npm run lint
29 changes: 0 additions & 29 deletions .github/workflows/main.yml

This file was deleted.

13 changes: 13 additions & 0 deletions .github/workflows/prettier.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
name: Prettier
on: [push]
jobs:
prettier:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: '12.x'
- run: npm ci
- run: npm run prettier
7 changes: 2 additions & 5 deletions App.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import * as React from 'react';
import { Platform, View, StatusBar, StyleSheet } from 'react-native';
import { View, StyleSheet } from 'react-native';
import { Provider } from 'mobx-react';
import Stores from './stores/Stores';
import Navigation from './Navigation';
Expand Down Expand Up @@ -33,9 +33,6 @@ export default class App extends React.PureComponent {

const styles = StyleSheet.create({
container: {
flex: 1,
// TODO: find better workaround. Needed for Android 12 installs where
// top gets cut off
paddingTop: Platform.OS === 'android' ? StatusBar.currentHeight - 5 : 0
flex: 1
}
});
20 changes: 20 additions & 0 deletions Navigation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,10 @@ import Channel from './views/Channels/Channel';
import Payment from './views/Payment';
import Invoice from './views/Invoice';
import BTCPayConfigQRScanner from './views/BTCPayConfigQRScanner';
import CLightningRestQRScanner from './views/CLightningRestQRScanner';
import LNDConnectConfigQRScanner from './views/LNDConnectConfigQRScanner';
import LNDHubQRScanner from './views/LNDHubQRScanner';
import SparkQRScanner from './views/SparkQRScanner';
import NodeInfo from './views/NodeInfo';
import Lockscreen from './views/Lockscreen';

Expand All @@ -41,7 +43,10 @@ import CertInstallInstructions from './views/Settings/CertInstallInstructions';
import SignVerifyMessage from './views/Settings/SignVerifyMessage';
import About from './views/Settings/About';
import Help from './views/Settings/Help';
import Sponsors from './views/Settings/Sponsors';
import Olympians from './views/Settings/Olympians';
import Gods from './views/Settings/Gods';
import Mortals from './views/Settings/Mortals';

// Routing
import Routing from './views/Routing/Routing';
Expand Down Expand Up @@ -122,9 +127,18 @@ const AppScenes = {
Help: {
screen: Help
},
Sponsors: {
screen: Sponsors
},
Olympians: {
screen: Olympians
},
Gods: {
screen: Gods
},
Mortals: {
screen: Mortals
},
CertInstallInstructions: {
screen: CertInstallInstructions
},
Expand Down Expand Up @@ -206,11 +220,17 @@ const AppScenes = {
LNDConnectConfigQRScanner: {
screen: LNDConnectConfigQRScanner
},
CLightningRestQRScanner: {
screen: CLightningRestQRScanner
},
LNDHubQRScanner: {
screen: LNDHubQRScanner
},
ImportAccountQRScanner: {
screen: ImportAccountQRScanner
},
SparkQRScanner: {
screen: SparkQRScanner
}
};

Expand Down
28 changes: 25 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Zeus is built on TypeScript and React-Native. It runs on both iOS and Android.
### App Store links
* [Google Play](https://play.google.com/store/apps/details?id=app.zeusln.zeus)
* [Apple App Store](https://apps.apple.com/us/app/zeus-ln/id1456038895)
* [F-Droid](https://f-droid.org/packages/app.zeusln.zeus/)
* [F-Droid](https://zeusln.app/download)

### Get in touch with us
* Come chat with us on
Expand Down Expand Up @@ -55,7 +55,7 @@ Zeus is built on TypeScript and React-Native. It runs on both iOS and Android.
- [ ] Contact list for easier payments
- [ ] Multiple profile types (payments, merchant etc.)
- [ ] Lightning address receive
- [ ] Taproot support
- [x] Taproot support
- [ ] Connect a watchtower
- [ ] Advanced security center
- [ ] Notifications
Expand All @@ -74,7 +74,7 @@ You must provide Zeus with your node's hostname, port number, and the macaroon y

Zeus has support for connecting to you node entirely over the Tor network. You can refer to these guides to set up a Tor hidden service on your lnd node. The instructions are generally interchangable and typically only require you to change your Tor path.

* [Zeus over Tor guide for RaspiBolt](https://raspibolt.org/mobile-app.html)
* [Zeus over Tor guide for RaspiBolt](https://raspibolt.org/guide/lightning/mobile-app.html)
* [Zeus over Tor guide for FreeNAS by Seth586](https://github.com/seth586/guides/blob/master/FreeNAS/wallets/zeusln.md)
* [Zeus over Tor guide for RaspiBlitz by openoms](https://github.com/openoms/bitcoin-tutorials/blob/master/Zeus_to_RaspiBlitz_through_Tor.md)
* [Tor-Only Bitcoin & Lightning Guide by Lopp](https://blog.lopp.net/tor-only-bitcoin-lightning-guide/)
Expand All @@ -88,6 +88,7 @@ Zeus is proud to be integrated on the following platforms:
* [myNode](https://mynodebtc.com/) ([Standard guide](https://mynodebtc.com/guide/zeus), [Tor guide](https://mynodebtc.com/guide/zeus_tor))
* [RaspiBlitz](https://github.com/rootzoll/raspiblitz)
* [Umbrel](https://getumbrel.com/)
* [Citadel](https://runcitadel.space/)

### Payment platforms
* [BTCPay Server](https://btcpayserver.org/)
Expand Down Expand Up @@ -117,6 +118,27 @@ Zeus is proud to be integrated on the following platforms:
3. `cd ios && pod install`
4. open `ios/zeus.xcworkspace` in Xcode and hit Run. NOTE: if you're using an M1 mac, you may need to right click Xcode > get info > check `Open using Rosetta` before opening `zeus.xcworkspace`.

## Reproducible builds

Reproducible builds are available for Android only right now. You'll need Docker installed to be able to build the app this way:

1. Clone Zeus git for the branch/tag that you want to build. For example: `git clone --depth 1 --branch v0.6.6 https://github.com/ZeusLN/zeus.git`
You can also remove the `--branch v0.6.6` parameter to build APKs for `master`.
2. Change to the zeus directory: `cd zeus`
3. Execute the build script: `./build.sh`
4. If everything goes well, the script will print a list of all the generated APK files and MD5 for each one of them: armv7, armv8, x86, x86_64, universal. The equivalent to the one provided in the web page is the one ending in 'universal'. You can compare MD5s with the ones provided on the [GitHub releases page](https://github.com/ZeusLN/zeus/releases)
5. Download the oficial apk from [GitHub releases page](https://github.com/ZeusLN/zeus/releases) or from the [Zeus homepage](https://zeusln.app/): `wget https://zeusln.app/zeus-v0.6.6.apk`
6. Compare both APKs with a suitable utility like `diffoscope`, `apksigcopier` or by running `diff --brief --recursive ./unpacked_oficial_apk ./unpacked_built_apk`. You should only get differences for the certificates used to sign the official APK

If you want to install the APK built this way onto your own smartphone, you'll need to sign it yourself (see next section). Note that the first time you install a build made using this procedure, you'll need to uninstall your current version of Zeus and then install the one built here because certificates will not match. You'll lose your connection details and you'll need to reconfigure Zeus again to connect to your nodes.

### Signing APKs

1. Install signing utilities: `apt-get install -y apksigner`
2. Create your certificate, if you haven't done so already. If you already have the certificate from previous builds, it's advised that you use the same one so you are able to upgrade from one APK to the next one without reinstalling first: `keytool -genkeypair -alias zeus -keystore zeus.pfx -v -storetype PKCS12 -keyalg RSA -keysize 2048 -storepass your_keystore_password -keypass your_key_password -validity 10000 -dname "cn=Unknown, ou=Unknown, o=Unknown, c=Unknown"`
3. Sign the chosen APK file using this command: `java -jar /usr/bin/apksigner sign -v --ks zeus.pfx --ks-key-alias zeus --ks-pass pass:your_keystore_password --key-pass pass:your_key_password zeus-universal.apk`
4. Copy the signed APK to your smartphone and install it by tapping over the file. If you get an error, you'll have to uninstall your currently installed version of Zeus first. Note that you'll lose your connections and you'll need to reconfigure Zeus again to connect to your node.

## Contributing

Please be sure to run `npm run tsc` to check for type errors, `npm run test` to run all tests, and `npm run prettier` to run the prettier
Expand Down
7 changes: 4 additions & 3 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -131,8 +131,8 @@ android {
applicationId "app.zeusln.zeus"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 40
versionName "0.6.4"
versionCode 43
versionName "0.6.6"
multiDexEnabled true
missingDimensionStrategy 'react-native-camera', 'general'
}
Expand Down Expand Up @@ -167,7 +167,7 @@ android {
shrinkResources true
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
signingConfig signingConfigs.release
//signingConfig signingConfigs.release
}
}
// applicationVariants are e.g. debug, release
Expand Down Expand Up @@ -211,6 +211,7 @@ dependencies {
// gif
implementation 'com.facebook.fresco:fresco:2.6.0'
implementation 'com.facebook.fresco:animated-gif:2.6.0'
implementation "com.hypertrack:hyperlog:0.0.10"

if (enableHermes) {
def hermesPath = "../../node_modules/hermes-engine/android/";
Expand Down
2 changes: 1 addition & 1 deletion android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.NFC" />
<uses-feature android:name="android.hardware.nfc.hce" android:required="true" />
<uses-feature android:name="android.hardware.nfc.hce" android:required="false" />

<queries>
<intent>
Expand Down
6 changes: 1 addition & 5 deletions android/app/src/main/java/com/zeus/MainApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import com.facebook.react.shell.MainReactPackage;

import com.facebook.react.bridge.JSIModulePackage;
import com.swmansion.reanimated.ReanimatedJSIModulePackage;

import com.facebook.react.ReactApplication;
import com.swmansion.gesturehandler.react.RNGestureHandlerPackage;
Expand Down Expand Up @@ -38,16 +37,13 @@ public boolean getUseDeveloperSupport() {
protected List<ReactPackage> getPackages() {
@SuppressWarnings("UnnecessaryLocalVariable")
List<ReactPackage> packages = new PackageList(this).getPackages();
packages.add(new MobileToolsPackage());
return packages;
}
@Override
protected String getJSMainModuleName() {
return "index";
}
@Override
protected JSIModulePackage getJSIModulePackage() {
return new ReanimatedJSIModulePackage();
}
};


Expand Down
90 changes: 90 additions & 0 deletions android/app/src/main/java/com/zeus/MobileTools.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
// based on Blixt LNDMobileTools
// https://github.com/hsjoberg/blixt-wallet/blob/master/android/app/src/main/java/com/blixtwallet/MainApplication.java
package app.zeusln.zeus;

import android.nfc.Tag;
import android.nfc.NfcAdapter;
import android.nfc.NdefMessage;
import android.nfc.tech.Ndef;
import android.nfc.NdefRecord;

import java.util.Arrays;
import java.io.UnsupportedEncodingException;

import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.Promise;

import com.hypertrack.hyperlog.HyperLog;

class MobileTools extends ReactContextBaseJavaModule {
final String TAG = "MobileTools";

public MobileTools(ReactApplicationContext reactContext) {
super(reactContext);
}

@Override
public String getName() {
return "MobileTools";
}

@ReactMethod
public void getIntentNfcData(Promise promise) {
// https://code.tutsplus.com/tutorials/reading-nfc-tags-with-android--mobile-17278
Tag tag = getReactApplicationContext()
.getCurrentActivity().getIntent().getParcelableExtra(NfcAdapter.EXTRA_TAG);
if (tag == null) {
promise.resolve(null);
return;
}

Ndef ndef = Ndef.get(tag);
if (ndef == null) {
HyperLog.d(TAG, "NFC tag is not NDEF");
promise.resolve(null);
}

NdefMessage ndefMessage = ndef.getCachedNdefMessage();

NdefRecord[] records = ndefMessage.getRecords();
if (records.length > 0) {
// Get first record and ignore the rest
NdefRecord record = records[0];
if (record.getTnf() == NdefRecord.TNF_WELL_KNOWN && Arrays.equals(record.getType(), NdefRecord.RTD_TEXT)) {
/*
* See NFC forum specification for "Text Record Type Definition" at 3.2.1
*
* http://www.nfc-forum.org/specs/
*
* bit_7 defines encoding
* bit_6 reserved for future use, must be 0
* bit_5..0 length of IANA language code
*/
byte[] payload = record.getPayload();

// Get the Text Encoding
String textEncoding = ((payload[0] & 128) == 0) ? "UTF-8" : "UTF-16";

// Get the Language Code
int languageCodeLength = payload[0] & 0063;

// String languageCode = new String(payload, 1, languageCodeLength, "US-ASCII");
// e.g. "en"

try {
String s = new String(payload, languageCodeLength + 1, payload.length - languageCodeLength - 1, textEncoding);
promise.resolve(s);
return;
} catch (UnsupportedEncodingException e) {
HyperLog.e(TAG, "Error returning ndef data", e);
}
}
else {
HyperLog.d(TAG, "Cannot read NFC Tag Record");
}
}
promise.resolve(null);
}
}
22 changes: 22 additions & 0 deletions android/app/src/main/java/com/zeus/MobileToolsPackage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package app.zeusln.zeus;

import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class MobileToolsPackage implements ReactPackage {
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return Collections.emptyList();
}

@Override
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
return Arrays.asList(new MobileTools(reactContext));
}
}
Binary file modified android/app/src/main/res/mipmap-hdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/mipmap-mdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/images/intro/splash.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 24f75c8

Please sign in to comment.