├── .gitignore ├── .idea ├── codeStyles │ └── Project.xml ├── libraries │ ├── Dart_Packages.xml │ ├── Dart_SDK.xml │ ├── Flutter_Plugins.xml │ └── Flutter_for_Android.xml ├── misc.xml ├── modules.xml ├── runConfigurations │ └── main_dart.xml ├── vcs.xml └── workspace.xml ├── .metadata ├── README.md ├── android ├── .gitignore ├── .idea │ ├── caches │ │ └── build_file_checksums.ser │ ├── codeStyles │ │ └── Project.xml │ ├── gradle.xml │ ├── misc.xml │ ├── modules.xml │ └── runConfigurations.xml ├── app │ ├── build.gradle │ ├── google-services.json │ ├── src │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── ic_launcher-web.png │ │ │ ├── java │ │ │ └── maugost │ │ │ │ └── girlies │ │ │ │ ├── FacebookLogin.java │ │ │ │ ├── MainActivity.java │ │ │ │ └── creditcarddesign │ │ │ │ ├── CardEditActivity.java │ │ │ │ ├── CardSelector.java │ │ │ │ ├── CreditCardUtils.java │ │ │ │ ├── CreditCardView.java │ │ │ │ ├── FlipAnimator.java │ │ │ │ ├── pager │ │ │ │ ├── CardCVVFragment.java │ │ │ │ ├── CardExpiryFragment.java │ │ │ │ ├── CardFragmentAdapter.java │ │ │ │ ├── CardNameFragment.java │ │ │ │ ├── CardNumberFragment.java │ │ │ │ ├── CreditCardFragment.java │ │ │ │ ├── IActionListener.java │ │ │ │ └── IFocus.java │ │ │ │ └── views │ │ │ │ └── HeightWrappingViewPager.java │ │ │ └── res │ │ │ ├── drawable-hdpi │ │ │ ├── gradient_line1.xml │ │ │ ├── ic_back.png │ │ │ ├── ic_checkmark.png │ │ │ ├── ic_next.png │ │ │ └── ic_password.png │ │ │ ├── drawable │ │ │ ├── card_color_round_rect_blue.xml │ │ │ ├── card_color_round_rect_brown.xml │ │ │ ├── card_color_round_rect_default.xml │ │ │ ├── card_color_round_rect_green.xml │ │ │ ├── card_color_round_rect_pink.xml │ │ │ ├── card_color_round_rect_purple.xml │ │ │ ├── chip.xml │ │ │ ├── chip_inner.xml │ │ │ ├── chip_yellow.xml │ │ │ ├── chip_yellow_inner.xml │ │ │ ├── circle_blue3.xml │ │ │ ├── circle_white.xml │ │ │ ├── curve_blue09_a.xml │ │ │ ├── curve_blue09_b.xml │ │ │ ├── curve_blue09_button.xml │ │ │ ├── curve_blue3.xml │ │ │ ├── discover_back.xml │ │ │ ├── discover_back_bg.xml │ │ │ ├── ic_billing_amex_logo.png │ │ │ ├── ic_billing_amex_logo1.png │ │ │ ├── ic_billing_discover_logo.png │ │ │ ├── ic_billing_mastercard_logo.png │ │ │ ├── ic_billing_visa_logo.png │ │ │ ├── img_amex_center_face.png │ │ │ ├── launch_background.xml │ │ │ ├── master_back.xml │ │ │ ├── mastercard_back_bg.xml │ │ │ ├── red_button.xml │ │ │ ├── sign_strip.png │ │ │ ├── sign_strip_mod.xml │ │ │ ├── visacard_back.xml │ │ │ └── visacard_back_bg.xml │ │ │ ├── layout │ │ │ ├── activity_card_edit.xml │ │ │ ├── activity_fb_login.xml │ │ │ ├── activity_main.xml │ │ │ ├── back_card.xml │ │ │ ├── front_card.xml │ │ │ ├── front_card_outline.xml │ │ │ ├── lyt_card_cvv.xml │ │ │ ├── lyt_card_expiry.xml │ │ │ ├── lyt_card_holder_name.xml │ │ │ ├── lyt_card_number.xml │ │ │ └── view_creditcard.xml │ │ │ ├── mipmap-hdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxxhdpi │ │ │ └── ic_launcher.png │ │ │ └── values │ │ │ ├── colors.xml │ │ │ ├── dimens.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ └── tmplibs │ │ └── flutter.jar ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle ├── assets └── images │ ├── avatar.png │ ├── cart_empty.jpg │ ├── cart_empty.png │ ├── empty.png │ ├── facebook.png │ ├── fast_food_cart.jpg │ ├── girlies_logo.png │ ├── girlies_text.png │ ├── girlies_text.psd │ ├── girlies_text_colored.png │ ├── girlies_text_small.png │ ├── girlies_text_support.png │ ├── google_logo.png │ ├── ic_launcher.png │ ├── no_internet.jpeg │ ├── no_internet.png │ ├── no_internet_access.png │ └── twitter.png ├── flutter_01.log ├── girlies.iml ├── girlies_android.iml ├── ios ├── .gitignore ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ └── Release.xcconfig ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.xcscheme ├── Runner.xcworkspace │ └── contents.xcworkspacedata └── Runner │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-App-1024x1024@1x.png │ │ ├── Icon-App-20x20@1x.png │ │ ├── Icon-App-20x20@2x.png │ │ ├── Icon-App-20x20@3x.png │ │ ├── Icon-App-29x29@1x.png │ │ ├── Icon-App-29x29@2x.png │ │ ├── Icon-App-29x29@3x.png │ │ ├── Icon-App-40x40@1x.png │ │ ├── Icon-App-40x40@2x.png │ │ ├── Icon-App-40x40@3x.png │ │ ├── Icon-App-60x60@2x.png │ │ ├── Icon-App-60x60@3x.png │ │ ├── Icon-App-76x76@1x.png │ │ ├── Icon-App-76x76@2x.png │ │ └── Icon-App-83.5x83.5@2x.png │ └── LaunchImage.imageset │ │ ├── Contents.json │ │ ├── LaunchImage.png │ │ ├── LaunchImage@2x.png │ │ ├── LaunchImage@3x.png │ │ └── README.md │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── GoogleService-Info.plist │ ├── Info.plist │ └── main.m ├── lib ├── app │ ├── accounts │ │ ├── help.dart │ │ ├── login.dart │ │ └── signup.dart │ ├── alert_dialog.dart │ ├── button.dart │ ├── channel_methods.dart │ ├── data.dart │ ├── girlies_app.dart │ ├── progress.dart │ └── screens │ │ ├── about_us.dart │ │ ├── app_chat.dart │ │ ├── boutique.dart │ │ ├── boutique_item.dart │ │ ├── cart.dart │ │ ├── delivery_address.dart │ │ ├── favorites.dart │ │ ├── order_history.dart │ │ ├── order_item.dart │ │ ├── order_notification.dart │ │ ├── payment.dart │ │ ├── profile.dart │ │ └── profile_settings.dart ├── main.dart ├── models │ ├── base.dart │ ├── fbconn.dart │ └── ref_time.dart ├── navigation.dart └── support │ ├── girlies_support.dart │ └── screens │ ├── account_recovery.dart │ ├── account_search.dart │ ├── add_categories.dart │ ├── add_prodcuts.dart │ ├── boutique_store.dart │ ├── chat_screen.dart │ ├── edit_prodcuts.dart │ ├── messages.dart │ ├── order_search.dart │ ├── requests.dart │ ├── support_chat.dart │ ├── support_order_history.dart │ └── support_orders.dart ├── pubspec.lock ├── pubspec.yaml ├── screenshots ├── ss1.png ├── ss10.png ├── ss11.png ├── ss12.png ├── ss13.png ├── ss14.png ├── ss15.png ├── ss16.png ├── ss17.png ├── ss18.png ├── ss19.png ├── ss2.png ├── ss20.png ├── ss21.png ├── ss22.png ├── ss3.png ├── ss4.png ├── ss5.png ├── ss6.png ├── ss7.png ├── ss8.png └── ss9.png └── test └── widget_test.dart /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .dart_tool/ 3 | 4 | .packages 5 | .pub/ 6 | 7 | build/ 8 | 9 | .flutter-plugins 10 | -------------------------------------------------------------------------------- /.idea/codeStyles/Project.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 15 | 16 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /.idea/libraries/Dart_SDK.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /.idea/libraries/Flutter_Plugins.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /.idea/libraries/Flutter_for_Android.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 17 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/runConfigurations/main_dart.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: 44b7e7d3f42f050a79712daab253af06e9daf530 8 | channel: beta 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # flutter_girlies_store 2 | 3 | A Shopping / E-commerce application built with flutter from scratch. 4 | 5 | ## Screenshots 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | ### Show some :heart: and star the repo to support the project 20 | 21 | This project isn't complete and it's not yet perfect but still under the development phase, please feel free to study the source code and checkout my new youtube channel were i'd be guiding and explaining the steps i took to build the App from scratch.... 22 | 23 | Here is a repository containing links of all the example apps demonstrating features/functionality/integrations in [Flutter](https://flutter.io/) application development. 24 | 25 | ## Pawan's YouTube Channel 26 | 27 | [MTechViral](https://www.youtube.com/c/MTechViral) 28 | 29 | ## Pawan's Facebook Group 30 | 31 | [Let's Flutter](https://www.facebook.com/groups/425920117856409/) 32 | 33 | ## My YouTube Channel 34 | 35 | [iamMaugost](https://www.youtube.com/channel/UCk3NXffAF04kM3q5uPXMU-Q/about) 36 | 37 | 38 | 39 | 40 | # Pull Requests 41 | 42 | I welcome and encourage all pull requests. It usually will take me within 24-48 hours to respond to any issue or request. Here are some basic rules to follow to ensure timely addition of your request: 43 | 44 | 1. Match coding style (braces, spacing, etc.) This is best achieved using `Reformat Code` feature of Android Studio `CMD`+`Option`+`L` on Mac and `CTRL` + `ALT` + `L` on Linux + Windows . 45 | 2. If its a feature, bugfix, or anything please only change code to what you specify. 46 | 3. Please keep PR titles easy to read and descriptive of changes, this will make them easier to merge :) 47 | 4. Pull requests _must_ be made against `develop` branch. Any other branch (unless specified by the maintainers) will get rejected. 48 | 5. Check for existing [issues](https://github.com/mtellect/FlutterGirliesStore/issues) first, before filing an issue. 49 | 6. Make sure you follow the set standard as all other projects in this repo do 50 | 7. Have fun! 51 | 52 | ### Created & Maintained By 53 | 54 | [Maugost_Mtellect](https://github.com/mtellect/) 55 | 56 | > If you found this project helpful or you learned something from the source code and want to thank me, consider buying me a cup of :coffee: 57 | > 58 | > *Bitcoin wallet address: 1K2wivc2xy7tTjsmHhNzq7wwEHoyHfS64n 59 | 60 | 61 | # License 62 | 63 | Copyright 2018 Maugost Mtellect 64 | 65 | Licensed under the Apache License, Version 2.0 (the "License"); 66 | you may not use this file except in compliance with the License. 67 | You may obtain a copy of the License at 68 | 69 | http://www.apache.org/licenses/LICENSE-2.0 70 | 71 | Unless required by applicable law or agreed to in writing, software 72 | distributed under the License is distributed on an "AS IS" BASIS, 73 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 74 | See the License for the specific language governing permissions and 75 | limitations under the License. 76 | 77 | 78 | ## Getting Started 79 | 80 | For help getting started with Flutter, view our online [documentation](https://flutter.io/). 81 | 82 | For help on editing package code, view the [documentation](https://flutter.io/developing-packages/). -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | *.class 3 | .gradle 4 | /local.properties 5 | /.idea/workspace.xml 6 | /.idea/libraries 7 | .DS_Store 8 | /build 9 | /captures 10 | GeneratedPluginRegistrant.java 11 | -------------------------------------------------------------------------------- /android/.idea/caches/build_file_checksums.ser: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/.idea/caches/build_file_checksums.ser -------------------------------------------------------------------------------- /android/.idea/codeStyles/Project.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 15 | 16 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /android/.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 26 | 27 | -------------------------------------------------------------------------------- /android/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 17 | 27 | 28 | 29 | 30 | 31 | 32 | 34 | -------------------------------------------------------------------------------- /android/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /android/.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /android/app/build.gradle: -------------------------------------------------------------------------------- 1 | def localProperties = new Properties() 2 | def localPropertiesFile = rootProject.file('local.properties') 3 | if (localPropertiesFile.exists()) { 4 | localPropertiesFile.withReader('UTF-8') { reader -> 5 | localProperties.load(reader) 6 | } 7 | } 8 | 9 | def flutterRoot = localProperties.getProperty('flutter.sdk') 10 | if (flutterRoot == null) { 11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 12 | } 13 | 14 | apply plugin: 'com.android.application' 15 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 16 | 17 | android { 18 | compileSdkVersion 27 19 | 20 | lintOptions { 21 | disable 'InvalidPackage' 22 | } 23 | 24 | defaultConfig { 25 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 26 | applicationId "maugost.girlies" 27 | minSdkVersion 17 28 | targetSdkVersion 27 29 | versionCode 1 30 | versionName "1.0" 31 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 32 | multiDexEnabled true 33 | } 34 | 35 | buildTypes { 36 | release { 37 | // TODO: Add your own signing config for the release build. 38 | // Signing with the debug keys for now, so `flutter run --release` works. 39 | signingConfig signingConfigs.debug 40 | } 41 | } 42 | } 43 | 44 | flutter { 45 | source '../..' 46 | } 47 | 48 | dependencies { 49 | testImplementation 'junit:junit:4.12' 50 | androidTestImplementation 'com.android.support.test:runner:1.0.1' 51 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' 52 | compile 'com.facebook.android:facebook-android-sdk:4.33.0' 53 | compile 'com.android.support:multidex:1.0.1' 54 | // compile('com.twitter.sdk.android:twitter:2.3.2@aar') { 55 | // transitive = true; 56 | // } 57 | compile 'com.github.mukeshsolanki:social-login-helper:1.0.2' 58 | //compileOnly files('tmplibs/flutter.jar') 59 | api 'co.paystack.android:paystack:3.0.10' 60 | api "com.android.support:appcompat-v7:27.1.1" 61 | api "com.android.support:cardview-v7:27.1.1" 62 | api 'com.github.ozodrukh:CircularReveal:1.3.1' 63 | api 'io.card:android-sdk:5.5.1' 64 | compile 'cards.pay:paycardsrecognizer:1.0.0' 65 | } 66 | 67 | apply plugin: 'com.google.gms.google-services' -------------------------------------------------------------------------------- /android/app/google-services.json: -------------------------------------------------------------------------------- 1 | { 2 | "project_info": { 3 | "project_number": "186548206272", 4 | "firebase_url": "https://girlies-9b320.firebaseio.com", 5 | "project_id": "girlies-9b320", 6 | "storage_bucket": "girlies-9b320.appspot.com" 7 | }, 8 | "client": [ 9 | { 10 | "client_info": { 11 | "mobilesdk_app_id": "1:186548206272:android:2ce01318e597d435", 12 | "android_client_info": { 13 | "package_name": "maugost.girlies" 14 | } 15 | }, 16 | "oauth_client": [ 17 | { 18 | "client_id": "186548206272-aj9vsomac84831kcgn5cnqe1k7apgeh7.apps.googleusercontent.com", 19 | "client_type": 1, 20 | "android_info": { 21 | "package_name": "maugost.girlies", 22 | "certificate_hash": "43bffec9c0c300155ffaaebc517eedcc66001bc2" 23 | } 24 | }, 25 | { 26 | "client_id": "186548206272-jbb697ahj400sfqbm14k5ae18finjr02.apps.googleusercontent.com", 27 | "client_type": 3 28 | } 29 | ], 30 | "api_key": [ 31 | { 32 | "current_key": "AIzaSyCGynE_RQjJz_TpYG26T7a8rjRWJmJYCMY" 33 | } 34 | ], 35 | "services": { 36 | "analytics_service": { 37 | "status": 1 38 | }, 39 | "appinvite_service": { 40 | "status": 2, 41 | "other_platform_oauth_client": [ 42 | { 43 | "client_id": "186548206272-a9l34rp2140cf2cum28h41qlpoe7h8si.apps.googleusercontent.com", 44 | "client_type": 2, 45 | "ios_info": { 46 | "bundle_id": "maugost.girlies" 47 | } 48 | }, 49 | { 50 | "client_id": "186548206272-jbb697ahj400sfqbm14k5ae18finjr02.apps.googleusercontent.com", 51 | "client_type": 3 52 | } 53 | ] 54 | }, 55 | "ads_service": { 56 | "status": 2 57 | } 58 | } 59 | } 60 | ], 61 | "configuration_version": "1" 62 | } -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 9 | 10 | 11 | 12 | 17 | 22 | 29 | 33 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 64 | 66 | 67 | 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /android/app/src/main/ic_launcher-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/src/main/ic_launcher-web.png -------------------------------------------------------------------------------- /android/app/src/main/java/maugost/girlies/FacebookLogin.java: -------------------------------------------------------------------------------- 1 | package maugost.girlies; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | import android.support.v7.app.AppCompatActivity; 6 | import android.view.View; 7 | import android.widget.Button; 8 | import android.widget.TextView; 9 | 10 | import com.facebook.FacebookSdk; 11 | import com.facebook.appevents.AppEventsLogger; 12 | import com.mukeshsolanki.sociallogin.facebook.FacebookHelper; 13 | import com.mukeshsolanki.sociallogin.facebook.FacebookListener; 14 | import com.mukeshsolanki.sociallogin.google.GoogleHelper; 15 | import com.mukeshsolanki.sociallogin.google.GoogleListener; 16 | import com.mukeshsolanki.sociallogin.instagram.InstagramHelper; 17 | import com.mukeshsolanki.sociallogin.instagram.InstagramListener; 18 | import com.mukeshsolanki.sociallogin.twitter.TwitterHelper; 19 | import com.mukeshsolanki.sociallogin.twitter.TwitterListener; 20 | import java.util.Locale; 21 | 22 | public class FacebookLogin extends AppCompatActivity 23 | implements FacebookListener, TwitterListener, GoogleListener, InstagramListener, 24 | View.OnClickListener { 25 | 26 | private Button mFacebookButton, mTwitterButton, mGoogleButton, mInstagramButton; 27 | private TextView mDataTextView; 28 | private FacebookHelper mFacebook; 29 | private TwitterHelper mTwitter; 30 | private GoogleHelper mGoogle; 31 | private InstagramHelper mInstagram; 32 | 33 | @Override protected void onCreate(Bundle savedInstanceState) { 34 | super.onCreate(savedInstanceState); 35 | setContentView(R.layout.activity_fb_login); 36 | FacebookSdk.setApplicationId(getResources().getString(R.string.facebook_app_id)); 37 | FacebookSdk.sdkInitialize(this); 38 | AppEventsLogger.activateApp(this); 39 | mFacebook = new FacebookHelper(this); 40 | initialize(); 41 | } 42 | 43 | private void initialize() { 44 | mFacebookButton = (Button) findViewById(R.id.facebook_button); 45 | mGoogleButton = (Button) findViewById(R.id.google_button); 46 | mTwitterButton = (Button) findViewById(R.id.twitter_button); 47 | mInstagramButton = (Button) findViewById(R.id.instagram_button); 48 | mDataTextView = (TextView) findViewById(R.id.data_received_text_view); 49 | 50 | mFacebookButton.setOnClickListener(this); 51 | mGoogleButton.setOnClickListener(this); 52 | mTwitterButton.setOnClickListener(this); 53 | mInstagramButton.setOnClickListener(this); 54 | 55 | mFacebook = new FacebookHelper(this); 56 | //mTwitter = new TwitterHelper(this, this, "Your Twitter Api Key", "Your Twitter Api Secret"); 57 | mGoogle = new GoogleHelper(this, this, null); 58 | mInstagram = new InstagramHelper(this, this, "Your Client Id", "Your Client Secret", "Your call back url"); 59 | } 60 | 61 | @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { 62 | super.onActivityResult(requestCode, resultCode, data); 63 | mFacebook.onActivityResult(requestCode, resultCode, data); 64 | //mTwitter.onActivityResult(requestCode, resultCode, data); 65 | mGoogle.onActivityResult(requestCode, resultCode, data); 66 | } 67 | 68 | @Override public void onTwitterError(String errorMessage) { 69 | } 70 | 71 | @Override public void onTwitterSignIn(String authToken, String secret, long userId) { 72 | mDataTextView.setText( 73 | String.format(Locale.US, "User id:%d\n\nAuthToken:%s\n\nAuthSecret:%s", userId, authToken, 74 | secret)); 75 | } 76 | 77 | @Override public void onFbSignInFail(String errorMessage) { 78 | mDataTextView.setText(errorMessage); 79 | } 80 | 81 | @Override public void onFbSignInSuccess(String authToken, String userId) { 82 | mDataTextView.setText( 83 | String.format(Locale.US, "User id:%s\n\nAuthToken:%s", userId, authToken)); 84 | } 85 | 86 | @Override public void onFBSignOut() { 87 | mDataTextView.setText("Signed out of Facebook"); 88 | } 89 | 90 | @Override public void onGoogleAuthSignIn(String authToken, String userId) { 91 | mDataTextView.setText( 92 | String.format(Locale.US, "User id:%s\n\nAuthToken:%s", userId, authToken)); 93 | } 94 | 95 | @Override public void onGoogleAuthSignInFailed(String errorMessage) { 96 | mDataTextView.setText(errorMessage); 97 | } 98 | 99 | @Override public void onGoogleAuthSignOut() { 100 | mDataTextView.setText("Signed out of google"); 101 | } 102 | 103 | @Override public void onClick(View v) { 104 | switch (v.getId()) { 105 | case R.id.facebook_button: 106 | mFacebook.performSignIn(this); 107 | break; 108 | case R.id.twitter_button: 109 | mTwitter.performSignIn(this); 110 | break; 111 | case R.id.google_button: 112 | mGoogle.performSignIn(this); 113 | break; 114 | case R.id.instagram_button: 115 | mInstagram.performSignIn(); 116 | break; 117 | } 118 | } 119 | 120 | @Override public void onInstagramSignInFail(String errorMessage) { 121 | mDataTextView.setText(errorMessage); 122 | } 123 | 124 | @Override public void onInstagramSignInSuccess(String authToken, String userId) { 125 | mDataTextView.setText( 126 | String.format(Locale.US, "User id:%s\n\nAuthToken:%s", userId, authToken)); 127 | } 128 | } 129 | -------------------------------------------------------------------------------- /android/app/src/main/java/maugost/girlies/creditcarddesign/CardSelector.java: -------------------------------------------------------------------------------- 1 | package maugost.girlies.creditcarddesign; 2 | import maugost.girlies.R; 3 | 4 | /** 5 | * Created by Harish on 01/01/16. 6 | */ 7 | public class CardSelector { 8 | 9 | public static final CardSelector VISA = new CardSelector(R.drawable.card_color_round_rect_purple, R.drawable.chip, R.drawable.chip_inner, android.R.color.transparent, R.drawable.ic_billing_visa_logo, CardSelector.CVV_LENGHT_DEFAULT); 10 | public static final CardSelector MASTER = new CardSelector(R.drawable.card_color_round_rect_pink, R.drawable.chip_yellow, R.drawable.chip_yellow_inner, android.R.color.transparent, R.drawable.ic_billing_mastercard_logo, CardSelector.CVV_LENGHT_DEFAULT); 11 | public static final CardSelector AMEX = new CardSelector(R.drawable.card_color_round_rect_green, android.R.color.transparent, android.R.color.transparent, R.drawable.img_amex_center_face, R.drawable.ic_billing_amex_logo1, CardSelector.CVV_LENGHT_AMEX); 12 | public static final CardSelector DISCOVER = new CardSelector(R.drawable.card_color_round_rect_brown, android.R.color.transparent, android.R.color.transparent, android.R.color.transparent, R.drawable.ic_billing_discover_logo, CardSelector.CVV_LENGHT_DEFAULT); 13 | public static final CardSelector DEFAULT = new CardSelector(R.drawable.card_color_round_rect_default, R.drawable.chip, R.drawable.chip_inner, android.R.color.transparent, android.R.color.transparent, CardSelector.CVV_LENGHT_DEFAULT); 14 | 15 | public static final int CVV_LENGHT_DEFAULT = 3; 16 | public static final int CVV_LENGHT_AMEX = 4; 17 | 18 | 19 | private int mResCardId; 20 | private int mResChipOuterId; 21 | private int mResChipInnerId; 22 | private int mResCenterImageId; 23 | private int mResLogoId; 24 | private int mCvvLength = CVV_LENGHT_DEFAULT; 25 | 26 | public CardSelector(int mDrawableCard, int mDrawableChipOuter, int mDrawableChipInner, int mDrawableCenterImage, int logoId, int cvvLength) { 27 | this.mResCardId = mDrawableCard; 28 | this.mResChipOuterId = mDrawableChipOuter; 29 | this.mResChipInnerId = mDrawableChipInner; 30 | this.mResCenterImageId = mDrawableCenterImage; 31 | this.mResLogoId = logoId; 32 | this.mCvvLength = cvvLength; 33 | } 34 | 35 | public int getResCardId() { 36 | return mResCardId; 37 | } 38 | 39 | public void setResCardId(int mResCardId) { 40 | this.mResCardId = mResCardId; 41 | } 42 | 43 | public int getResChipOuterId() { 44 | return mResChipOuterId; 45 | } 46 | 47 | public void setResChipOuterId(int mResChipOuterId) { 48 | this.mResChipOuterId = mResChipOuterId; 49 | } 50 | 51 | public int getResChipInnerId() { 52 | return mResChipInnerId; 53 | } 54 | 55 | public void setResChipInnerId(int mResChipInnerId) { 56 | this.mResChipInnerId = mResChipInnerId; 57 | } 58 | 59 | public int getResCenterImageId() { 60 | return mResCenterImageId; 61 | } 62 | 63 | public void setResCenterImageId(int mResCenterImageId) { 64 | this.mResCenterImageId = mResCenterImageId; 65 | } 66 | 67 | public int getResLogoId() { 68 | return mResLogoId; 69 | } 70 | 71 | public void setResLogoId(int mResLogoId) { 72 | this.mResLogoId = mResLogoId; 73 | } 74 | 75 | public int getCvvLength() { 76 | return mCvvLength; 77 | } 78 | 79 | public void setCvvLength(int mCvvLength) { 80 | this.mCvvLength = mCvvLength; 81 | } 82 | 83 | public static CardSelector selectCardType(CreditCardUtils.CardType cardType) { 84 | switch(cardType) { 85 | case AMEX_CARD: 86 | return AMEX; 87 | case DISCOVER_CARD: 88 | return DISCOVER; 89 | case MASTER_CARD: 90 | return MASTER; 91 | case VISA_CARD: 92 | return VISA; 93 | default: 94 | return DEFAULT; 95 | } 96 | } 97 | 98 | public static CardSelector selectCard(String cardNumber) { 99 | if (cardNumber != null && cardNumber.length() >= 1) { 100 | CreditCardUtils.CardType cardType = CreditCardUtils.selectCardType(cardNumber); 101 | CardSelector selector = selectCardType(cardType); 102 | 103 | if ((selector != DEFAULT) && (cardNumber.length() >= 3)) { 104 | int[] drawables = {R.drawable.card_color_round_rect_brown, R.drawable.card_color_round_rect_green, R.drawable.card_color_round_rect_pink, R.drawable.card_color_round_rect_purple, R.drawable.card_color_round_rect_blue}; 105 | int hash = cardNumber.substring(0, 3).hashCode(); 106 | 107 | if (hash < 0) { 108 | hash = hash * -1; 109 | } 110 | 111 | int index = hash % drawables.length; 112 | 113 | int chipIndex = hash % 3; 114 | int[] chipOuter = {R.drawable.chip, R.drawable.chip_yellow, android.R.color.transparent}; 115 | int[] chipInner = {R.drawable.chip_inner, R.drawable.chip_yellow_inner, android.R.color.transparent}; 116 | 117 | selector.setResCardId(drawables[index]); 118 | selector.setResChipOuterId(chipOuter[chipIndex]); 119 | selector.setResChipInnerId(chipInner[chipIndex]); 120 | 121 | return selector; 122 | } 123 | } 124 | 125 | return DEFAULT; 126 | } 127 | } 128 | -------------------------------------------------------------------------------- /android/app/src/main/java/maugost/girlies/creditcarddesign/CreditCardUtils.java: -------------------------------------------------------------------------------- 1 | package maugost.girlies.creditcarddesign; 2 | 3 | import android.support.annotation.NonNull; 4 | 5 | import java.util.Calendar; 6 | import java.util.regex.Pattern; 7 | 8 | /** 9 | * Created by Harish on 03/01/16. 10 | */ 11 | public class CreditCardUtils { 12 | public enum CardType { 13 | UNKNOWN_CARD, AMEX_CARD, MASTER_CARD, VISA_CARD, DISCOVER_CARD 14 | } 15 | 16 | private static final String PATTERN_AMEX = "^3(4|7)[0-9 ]*"; 17 | private static final String PATTERN_VISA = "^4[0-9 ]*"; 18 | private static final String PATTERN_MASTER = "^5[0-9 ]*"; 19 | private static final String PATTERN_DISCOVER = "^6[0-9 ]*"; 20 | 21 | public static final int MAX_LENGTH_CARD_NUMBER = 16; 22 | public static final int MAX_LENGTH_CARD_NUMBER_AMEX = 15; 23 | 24 | public static final String CARD_NUMBER_FORMAT = "XXXX XXXX XXXX XXXX"; 25 | public static final String CARD_NUMBER_FORMAT_AMEX = "XXXX XXXXXX XXXXX"; 26 | 27 | public static final String PAYSTACK_API = "paystackAPI"; 28 | public static final String BACKEND_URL = "backendURL"; 29 | public static final String TRANSACTION_ID = "transactionID"; 30 | public static final String EMAIL = "email"; 31 | public static final String PAYMENT_FOR = "payment_for"; 32 | public static final String POSITION = "position"; 33 | public static final String AMOUNT = "amount"; 34 | public static final String CURRENCY = "currency"; 35 | public static final String EXTRA_CARD_NUMBER = "card_number"; 36 | public static final String EXTRA_CARD_CVV = "card_cvv"; 37 | public static final String EXTRA_CARD_EXPIRY = "card_expiry"; 38 | public static final String EXTRA_CARD_HOLDER_NAME = "card_holder_name"; 39 | public static final String EXTRA_CARD_SHOW_CARD_SIDE = "card_side"; 40 | public static final String EXTRA_VALIDATE_EXPIRY_DATE = "expiry_date"; 41 | public static final String EXTRA_ENTRY_START_PAGE = "start_page"; 42 | 43 | public static final int CARD_SIDE_FRONT = 1,CARD_SIDE_BACK=0; 44 | 45 | public static final int CARD_NUMBER_PAGE = 0, CARD_EXPIRY_PAGE = 1; 46 | public static final int CARD_CVV_PAGE = 3, CARD_NAME_PAGE = 2; 47 | 48 | public static final String SPACE_SEPERATOR = " "; 49 | public static final String SLASH_SEPERATOR = "/"; 50 | public static final char CHAR_X = 'X'; 51 | 52 | public static String handleCardNumber(String inputCardNumber) { 53 | 54 | return handleCardNumber(inputCardNumber,SPACE_SEPERATOR); 55 | } 56 | 57 | public static CardType selectCardType(String cardNumber) { 58 | Pattern pCardType = Pattern.compile(PATTERN_VISA); 59 | if(pCardType.matcher(cardNumber).matches()) 60 | return CardType.VISA_CARD; 61 | pCardType = Pattern.compile(PATTERN_MASTER); 62 | if(pCardType.matcher(cardNumber).matches()) 63 | return CardType.MASTER_CARD; 64 | pCardType = Pattern.compile(PATTERN_AMEX); 65 | if(pCardType.matcher(cardNumber).matches()) 66 | return CardType.AMEX_CARD; 67 | pCardType = Pattern.compile(PATTERN_DISCOVER); 68 | if(pCardType.matcher(cardNumber).matches()) 69 | return CardType.DISCOVER_CARD; 70 | return CardType.UNKNOWN_CARD; 71 | } 72 | 73 | public static int selectCardLength(CardType cardType) { 74 | return cardType == CardType.AMEX_CARD ? MAX_LENGTH_CARD_NUMBER_AMEX : MAX_LENGTH_CARD_NUMBER; 75 | } 76 | 77 | public static String handleCardNumber(String inputCardNumber, String seperator) { 78 | String unformattedText = inputCardNumber.replace(seperator, ""); 79 | CardType cardType = selectCardType(inputCardNumber); 80 | String format = (cardType == CardType.AMEX_CARD) ? CARD_NUMBER_FORMAT_AMEX : CARD_NUMBER_FORMAT; 81 | StringBuilder sbFormattedNumber = new StringBuilder(); 82 | for(int iIdx = 0, jIdx = 0; (iIdx < format.length()) && (unformattedText.length() > jIdx); iIdx++) { 83 | if(format.charAt(iIdx) == CHAR_X) 84 | sbFormattedNumber.append(unformattedText.charAt(jIdx++)); 85 | else 86 | sbFormattedNumber.append(format.charAt(iIdx)); 87 | } 88 | 89 | return sbFormattedNumber.toString(); 90 | } 91 | 92 | public static String formatCardNumber(String inputCardNumber, String seperator) { 93 | String unformattedText = inputCardNumber.replace(seperator, ""); 94 | CardType cardType = selectCardType(inputCardNumber); 95 | String format = (cardType == CardType.AMEX_CARD) ? CARD_NUMBER_FORMAT_AMEX : CARD_NUMBER_FORMAT; 96 | StringBuilder sbFormattedNumber = new StringBuilder(); 97 | for(int iIdx = 0, jIdx = 0; iIdx < format.length(); iIdx++) { 98 | if((format.charAt(iIdx) == CHAR_X) && (unformattedText.length() > jIdx)) 99 | sbFormattedNumber.append(unformattedText.charAt(jIdx++)); 100 | else 101 | sbFormattedNumber.append(format.charAt(iIdx)); 102 | } 103 | 104 | return sbFormattedNumber.toString().replace(SPACE_SEPERATOR, SPACE_SEPERATOR + SPACE_SEPERATOR); 105 | } 106 | 107 | public static String handleExpiration(String month, String year) { 108 | 109 | return handleExpiration(month+year); 110 | } 111 | 112 | 113 | public static String handleExpiration(@NonNull String dateYear) { 114 | 115 | String expiryString = dateYear.replace(SLASH_SEPERATOR, ""); 116 | 117 | String text; 118 | if(expiryString.length() >= 2) { 119 | String mm = expiryString.substring(0, 2); 120 | String yy; 121 | text = mm; 122 | 123 | try { 124 | if (Integer.parseInt(mm) > 12) { 125 | mm = "12"; // Cannot be more than 12. 126 | } 127 | } 128 | catch (Exception e) { 129 | mm = "01"; 130 | } 131 | 132 | if(expiryString.length() >=4) { 133 | yy = expiryString.substring(2,4); 134 | 135 | try{ 136 | Integer.parseInt(yy); 137 | }catch (Exception e) { 138 | 139 | Calendar calendar = Calendar.getInstance(); 140 | int year = calendar.get(Calendar.YEAR); 141 | yy = String.valueOf(year).substring(2); 142 | } 143 | 144 | text = mm + SLASH_SEPERATOR + yy; 145 | 146 | } 147 | else if(expiryString.length() > 2){ 148 | yy = expiryString.substring(2); 149 | text = mm + SLASH_SEPERATOR + yy; 150 | } 151 | } 152 | else { 153 | text = expiryString; 154 | } 155 | 156 | return text; 157 | } 158 | } 159 | -------------------------------------------------------------------------------- /android/app/src/main/java/maugost/girlies/creditcarddesign/FlipAnimator.java: -------------------------------------------------------------------------------- 1 | package maugost.girlies.creditcarddesign; 2 | 3 | import android.graphics.Camera; 4 | import android.graphics.Matrix; 5 | import android.view.View; 6 | import android.view.animation.AccelerateDecelerateInterpolator; 7 | import android.view.animation.Animation; 8 | import android.view.animation.Transformation; 9 | 10 | public class FlipAnimator extends Animation { 11 | 12 | public static final int DIRECTION_X = 1, DIRECTION_Y = 2, DIRECTION_Z = 3; 13 | private Camera camera; 14 | 15 | private View fromView; 16 | 17 | private View toView; 18 | 19 | private final float centerX; 20 | 21 | private final float centerY; 22 | 23 | private boolean forward = true; 24 | 25 | private boolean visibilitySwapped; 26 | 27 | private int rotationDirection = DIRECTION_X; 28 | 29 | private int translateDirection = DIRECTION_Z; 30 | 31 | /** 32 | * Creates a 3D flip animation between two views. If forward is true, its 33 | * assumed that view1 is "visible" and view2 is "gone" before the animation 34 | * starts. At the end of the animation, view1 will be "gone" and view2 will 35 | * be "visible". If forward is false, the reverse is assumed. 36 | * 37 | * @param fromView First view in the transition. 38 | * @param toView Second view in the transition. 39 | * @param centerX The center of the views in the x-axis. 40 | * @param centerY The center of the views in the y-axis. 41 | */ 42 | public FlipAnimator(View fromView, View toView, int centerX, int centerY) { 43 | this.fromView = fromView; 44 | this.toView = toView; 45 | this.centerX = centerX; 46 | this.centerY = centerY; 47 | 48 | setDuration(500); 49 | setFillAfter(true); 50 | setInterpolator(new AccelerateDecelerateInterpolator()); 51 | } 52 | 53 | public int getRotationDirection() { 54 | return rotationDirection; 55 | } 56 | 57 | public void setRotationDirection(int rotationDirection) { 58 | this.rotationDirection = rotationDirection; 59 | } 60 | 61 | public int getTranslateDirection() { 62 | return translateDirection; 63 | } 64 | 65 | public void setTranslateDirection(int translateDirection) { 66 | this.translateDirection = translateDirection; 67 | } 68 | 69 | public void reverse() { 70 | forward = false; 71 | View temp = toView; 72 | toView = fromView; 73 | fromView = temp; 74 | } 75 | 76 | @Override 77 | public void initialize(int width, int height, int parentWidth, int parentHeight) { 78 | super.initialize(width, height, parentWidth, parentHeight); 79 | camera = new Camera(); 80 | } 81 | 82 | @Override 83 | protected void applyTransformation(float interpolatedTime, Transformation t) { 84 | // Angle around the y-axis of the rotation at the given time. It is 85 | // calculated both in radians and in the equivalent degrees. 86 | final double radians = Math.PI * interpolatedTime; 87 | float degrees = (float) (180.0 * radians / Math.PI); 88 | 89 | // Once we reach the midpoint in the animation, we need to hide the 90 | // source view and show the destination view. We also need to change 91 | // the angle by 180 degrees so that the destination does not come in 92 | // flipped around. This is the main problem with SDK sample, it does not 93 | // do this. 94 | if (interpolatedTime >= 0.5f) { 95 | degrees -= 180.f; 96 | 97 | if (!visibilitySwapped) { 98 | fromView.setVisibility(View.GONE); 99 | toView.setVisibility(View.VISIBLE); 100 | 101 | visibilitySwapped = true; 102 | } 103 | } 104 | 105 | if (forward) 106 | degrees = -degrees; 107 | 108 | final Matrix matrix = t.getMatrix(); 109 | 110 | camera.save(); 111 | 112 | if(translateDirection == DIRECTION_Z) { 113 | camera.translate(0.0f, 0.0f, (float) (150.0 * Math.sin(radians))); 114 | } 115 | else if(translateDirection == DIRECTION_Y) { 116 | camera.translate(0.0f, (float) (150.0 * Math.sin(radians)), 0.0f); 117 | } 118 | else { 119 | camera.translate( (float) (150.0 * Math.sin(radians)), 0.0f, 0.0f); 120 | } 121 | 122 | if(rotationDirection == DIRECTION_Z) { 123 | camera.rotateZ(degrees); 124 | } 125 | else if(rotationDirection == DIRECTION_Y) { 126 | camera.rotateY(degrees); 127 | } 128 | else { 129 | camera.rotateX(degrees); 130 | } 131 | 132 | camera.getMatrix(matrix); 133 | camera.restore(); 134 | 135 | matrix.preTranslate(-centerX, -centerY); 136 | matrix.postTranslate(centerX, centerY); 137 | } 138 | } -------------------------------------------------------------------------------- /android/app/src/main/java/maugost/girlies/creditcarddesign/pager/CardCVVFragment.java: -------------------------------------------------------------------------------- 1 | package maugost.girlies.creditcarddesign.pager; 2 | import maugost.girlies.R; 3 | 4 | import android.os.Bundle; 5 | import android.support.annotation.Nullable; 6 | import android.text.Editable; 7 | import android.text.InputFilter; 8 | import android.view.LayoutInflater; 9 | import android.view.View; 10 | import android.view.ViewGroup; 11 | import android.widget.EditText; 12 | 13 | import maugost.girlies.creditcarddesign.CardEditActivity; 14 | import maugost.girlies.creditcarddesign.CardSelector; 15 | 16 | import static maugost.girlies.creditcarddesign.CreditCardUtils.EXTRA_CARD_CVV; 17 | 18 | 19 | /** 20 | * Created by sharish on 9/1/15. 21 | */ 22 | public class CardCVVFragment extends CreditCardFragment { 23 | 24 | 25 | private int mMaxCVV = CardSelector.CVV_LENGHT_DEFAULT; 26 | 27 | CardEditActivity cardEditActivity; 28 | 29 | @Override 30 | public void onCreate(@Nullable Bundle savedInstanceState) { 31 | super.onCreate(savedInstanceState); 32 | cardEditActivity = (CardEditActivity)getActivity(); 33 | } 34 | 35 | 36 | public CardCVVFragment() { 37 | } 38 | 39 | public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle state) { 40 | View v = inflater.inflate(R.layout.lyt_card_cvv, group, false); 41 | cardEditActivity.mCardCVVView = (EditText) v.findViewById(R.id.card_cvv); 42 | 43 | String cvv = null; 44 | if (getArguments() != null && getArguments().containsKey(EXTRA_CARD_CVV)) { 45 | cvv = getArguments().getString(EXTRA_CARD_CVV); 46 | } 47 | 48 | if (cvv == null) { 49 | cvv = ""; 50 | } 51 | 52 | cardEditActivity.mCardCVVView.setText(cvv); 53 | cardEditActivity.mCardCVVView.addTextChangedListener(this); 54 | 55 | return v; 56 | } 57 | 58 | @Override 59 | public void afterTextChanged(Editable s) { 60 | onEdit(s.toString()); 61 | if (s.length() == mMaxCVV) { 62 | cardEditActivity.setKeyboardVisibility(false); 63 | cardEditActivity.proceed_but.setVisibility(View.VISIBLE); 64 | //onComplete(); 65 | }else{ 66 | cardEditActivity.proceed_but.setVisibility(View.GONE); 67 | } 68 | } 69 | 70 | @Override 71 | public void focus() { 72 | if (isAdded()) { 73 | cardEditActivity.mCardCVVView.selectAll(); 74 | } 75 | } 76 | 77 | public void setMaxCVV(int maxCVVLength) { 78 | if (cardEditActivity.mCardCVVView != null && (cardEditActivity.mCardCVVView.getText().toString().length() > maxCVVLength)) { 79 | cardEditActivity.mCardCVVView.setText(cardEditActivity.mCardCVVView.getText().toString().substring(0, maxCVVLength)); 80 | } 81 | 82 | InputFilter[] FilterArray = new InputFilter[1]; 83 | FilterArray[0] = new InputFilter.LengthFilter(maxCVVLength); 84 | cardEditActivity.mCardCVVView.setFilters(FilterArray); 85 | mMaxCVV = maxCVVLength; 86 | String hintCVV = ""; 87 | for (int i = 0; i < maxCVVLength; i++) { 88 | hintCVV += "X"; 89 | } 90 | cardEditActivity.mCardCVVView.setHint(hintCVV); 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /android/app/src/main/java/maugost/girlies/creditcarddesign/pager/CardExpiryFragment.java: -------------------------------------------------------------------------------- 1 | package maugost.girlies.creditcarddesign.pager; 2 | import maugost.girlies.R; 3 | import android.os.Bundle; 4 | import android.support.annotation.Nullable; 5 | import android.text.Editable; 6 | import android.view.LayoutInflater; 7 | import android.view.View; 8 | import android.view.ViewGroup; 9 | import android.widget.EditText; 10 | 11 | import maugost.girlies.creditcarddesign.CardEditActivity; 12 | import maugost.girlies.creditcarddesign.CreditCardUtils; 13 | 14 | import java.util.Calendar; 15 | 16 | import static maugost.girlies.creditcarddesign.CreditCardUtils.*; 17 | 18 | 19 | /** 20 | * Created by sharish on 9/1/15. 21 | */ 22 | public class CardExpiryFragment extends CreditCardFragment { 23 | 24 | 25 | 26 | private boolean mValidateCard = true; 27 | 28 | CardEditActivity cardEditActivity; 29 | 30 | @Override 31 | public void onCreate(@Nullable Bundle savedInstanceState) { 32 | super.onCreate(savedInstanceState); 33 | cardEditActivity = (CardEditActivity)getActivity(); 34 | } 35 | 36 | 37 | public CardExpiryFragment() { 38 | 39 | } 40 | 41 | public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle state) { 42 | 43 | View v = inflater.inflate(R.layout.lyt_card_expiry, group, false); 44 | cardEditActivity.cardExpiryView = (EditText) v.findViewById(R.id.card_expiry); 45 | 46 | String expiry = ""; 47 | 48 | Bundle args = getArguments(); 49 | 50 | if(args != null) { 51 | 52 | if(args.containsKey(EXTRA_CARD_EXPIRY)) { 53 | expiry = getArguments().getString(EXTRA_CARD_EXPIRY); 54 | } 55 | 56 | mValidateCard = args.getBoolean(EXTRA_VALIDATE_EXPIRY_DATE, true); 57 | } 58 | 59 | if(expiry == null) { 60 | expiry = ""; 61 | } 62 | 63 | cardEditActivity.cardExpiryView.setText(expiry); 64 | 65 | cardEditActivity.cardExpiryView.addTextChangedListener(this); 66 | 67 | return v; 68 | } 69 | 70 | @Override 71 | public void afterTextChanged(Editable s) { 72 | 73 | String text = s.toString().replace(CreditCardUtils.SLASH_SEPERATOR, ""); 74 | 75 | String month, year=""; 76 | if(text.length() >= 2) { 77 | month = text.substring(0, 2); 78 | 79 | if(text.length() > 2) { 80 | year = text.substring(2); 81 | } 82 | 83 | if(mValidateCard) { 84 | int mm = Integer.parseInt(month); 85 | 86 | if (mm <= 0 || mm >= 13) { 87 | cardEditActivity.cardExpiryView.setError(getString(R.string.error_invalid_month)); 88 | return; 89 | } 90 | 91 | if (text.length() >= 4) { 92 | 93 | int yy = Integer.parseInt(year); 94 | 95 | final Calendar calendar = Calendar.getInstance(); 96 | int currentYear = calendar.get(Calendar.YEAR); 97 | int currentMonth = calendar.get(Calendar.MONTH) + 1; 98 | 99 | int millenium = (currentYear / 1000) * 1000; 100 | 101 | 102 | if (yy + millenium < currentYear) { 103 | cardEditActivity.cardExpiryView.setError(getString(R.string.error_card_expired)); 104 | return; 105 | } else if (yy + millenium == currentYear && mm < currentMonth) { 106 | cardEditActivity.cardExpiryView.setError(getString(R.string.error_card_expired)); 107 | return; 108 | } 109 | } 110 | } 111 | 112 | } 113 | else { 114 | month = text; 115 | } 116 | 117 | int previousLength = cardEditActivity.cardExpiryView.getText().length(); 118 | int cursorPosition = cardEditActivity.cardExpiryView.getSelectionEnd(); 119 | 120 | text = CreditCardUtils.handleExpiration(month,year); 121 | 122 | cardEditActivity.cardExpiryView.removeTextChangedListener(this); 123 | cardEditActivity.cardExpiryView.setText(text); 124 | cardEditActivity.cardExpiryView.setSelection(text.length()); 125 | cardEditActivity.cardExpiryView.addTextChangedListener(this); 126 | 127 | int modifiedLength = text.length(); 128 | 129 | if(modifiedLength <= previousLength && cursorPosition < modifiedLength) { 130 | cardEditActivity.cardExpiryView.setSelection(cursorPosition); 131 | } 132 | 133 | onEdit(text); 134 | 135 | if(text.length() == 5) { 136 | onComplete(); 137 | } 138 | 139 | } 140 | 141 | 142 | @Override 143 | public void focus() { 144 | 145 | if(isAdded()) { 146 | cardEditActivity.cardExpiryView.selectAll(); 147 | } 148 | } 149 | 150 | 151 | public void onSaveInstanceState(Bundle outState) { 152 | 153 | outState.putBoolean(EXTRA_VALIDATE_EXPIRY_DATE, mValidateCard); 154 | super.onSaveInstanceState(outState); 155 | } 156 | 157 | public void onActivityCreated(Bundle instate) { 158 | 159 | if(instate != null) { 160 | mValidateCard = instate.getBoolean(EXTRA_VALIDATE_EXPIRY_DATE, mValidateCard); 161 | } 162 | 163 | super.onActivityCreated(instate); 164 | } 165 | } 166 | -------------------------------------------------------------------------------- /android/app/src/main/java/maugost/girlies/creditcarddesign/pager/CardFragmentAdapter.java: -------------------------------------------------------------------------------- 1 | package maugost.girlies.creditcarddesign.pager; 2 | import android.os.Bundle; 3 | import android.os.Parcelable; 4 | import android.support.v4.app.Fragment; 5 | import android.support.v4.app.FragmentManager; 6 | import android.support.v4.app.FragmentStatePagerAdapter; 7 | 8 | /** 9 | * Created by sharish on 9/1/15. 10 | */ 11 | public class CardFragmentAdapter extends FragmentStatePagerAdapter implements IActionListener { 12 | 13 | public void focus(int position) { 14 | ((IFocus) getItem(position)).focus(); 15 | } 16 | 17 | public interface ICardEntryCompleteListener { 18 | void onCardEntryComplete(int currentIndex); 19 | 20 | void onCardEntryEdit(int currentIndex, String entryValue); 21 | } 22 | 23 | private final CardNumberFragment mCardNumberFragment; 24 | private final CardExpiryFragment mCardExpiryFragment; 25 | private final CardCVVFragment mCardCVVFragment; 26 | private final CardNameFragment mCardNameFragment; 27 | 28 | private ICardEntryCompleteListener mCardEntryCompleteListener; 29 | 30 | public CardFragmentAdapter(FragmentManager fm, Bundle args) { 31 | super(fm); 32 | 33 | mCardCVVFragment = new CardCVVFragment(); 34 | mCardCVVFragment.setArguments(args); 35 | 36 | mCardNameFragment = new CardNameFragment(); 37 | mCardNameFragment.setArguments(args); 38 | 39 | mCardNumberFragment = new CardNumberFragment(); 40 | mCardNumberFragment.setArguments(args); 41 | 42 | mCardExpiryFragment = new CardExpiryFragment(); 43 | mCardExpiryFragment.setArguments(args); 44 | 45 | mCardNameFragment.setActionListener(this); 46 | mCardNumberFragment.setActionListener(this); 47 | mCardExpiryFragment.setActionListener(this); 48 | mCardCVVFragment.setActionListener(this); 49 | } 50 | 51 | public void setOnCardEntryCompleteListener(ICardEntryCompleteListener listener) { 52 | this.mCardEntryCompleteListener = listener; 53 | } 54 | 55 | @Override 56 | public Fragment getItem(int position) { 57 | return new Fragment[]{mCardNumberFragment, mCardExpiryFragment, mCardNameFragment,mCardCVVFragment}[position]; 58 | } 59 | 60 | @Override 61 | public int getCount() { 62 | return 4; 63 | } 64 | 65 | 66 | @Override 67 | public void onActionComplete(CreditCardFragment fragment) { 68 | int index = getIndex(fragment); 69 | if (index >= 0 && mCardEntryCompleteListener != null) { 70 | mCardEntryCompleteListener.onCardEntryComplete(index); 71 | } 72 | } 73 | 74 | public int getIndex(CreditCardFragment fragment) { 75 | int index = -1; 76 | if (fragment == mCardNumberFragment) { 77 | index = 0; 78 | } else if (fragment == mCardExpiryFragment) { 79 | index = 1; 80 | } else if (fragment ==mCardNameFragment) { 81 | index = 2; 82 | } else if (fragment == mCardCVVFragment) { 83 | index = 3; 84 | } 85 | 86 | return index; 87 | } 88 | 89 | public void setMaxCVV(int maxCVV) { 90 | if (mCardCVVFragment != null) { 91 | mCardCVVFragment.setMaxCVV(maxCVV); 92 | } 93 | } 94 | 95 | @Override 96 | public void onEdit(CreditCardFragment fragment, String edit) { 97 | int index = getIndex(fragment); 98 | 99 | if (index >= 0 && mCardEntryCompleteListener != null) { 100 | mCardEntryCompleteListener.onCardEntryEdit(index, edit); 101 | } 102 | } 103 | 104 | @Override 105 | public void restoreState(Parcelable parcelable, ClassLoader classLoader) { 106 | //do nothing here! no call to super.restoreState(parcelable, classLoader); 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /android/app/src/main/java/maugost/girlies/creditcarddesign/pager/CardNameFragment.java: -------------------------------------------------------------------------------- 1 | package maugost.girlies.creditcarddesign.pager; 2 | import maugost.girlies.R; 3 | 4 | import android.os.Bundle; 5 | import android.support.annotation.Nullable; 6 | import android.text.Editable; 7 | import android.view.LayoutInflater; 8 | import android.view.View; 9 | import android.view.ViewGroup; 10 | import android.widget.EditText; 11 | 12 | import maugost.girlies.creditcarddesign.CardEditActivity; 13 | 14 | import static maugost.girlies.creditcarddesign.CreditCardUtils.EXTRA_CARD_HOLDER_NAME; 15 | 16 | /** 17 | * Created by sharish on 9/1/15. 18 | */ 19 | public class CardNameFragment extends CreditCardFragment { 20 | 21 | 22 | CardEditActivity cardEditActivity; 23 | 24 | @Override 25 | public void onCreate(@Nullable Bundle savedInstanceState) { 26 | super.onCreate(savedInstanceState); 27 | cardEditActivity = (CardEditActivity)getActivity(); 28 | } 29 | 30 | 31 | public CardNameFragment() { 32 | 33 | } 34 | 35 | public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle state) { 36 | 37 | View v = inflater.inflate(R.layout.lyt_card_holder_name, group,false); 38 | cardEditActivity.mCardNameView = (EditText) v.findViewById(R.id.card_name); 39 | 40 | String name = ""; 41 | if(getArguments() != null && getArguments().containsKey(EXTRA_CARD_HOLDER_NAME)) { 42 | name = getArguments().getString(EXTRA_CARD_HOLDER_NAME); 43 | } 44 | 45 | 46 | if(name == null) { 47 | name = ""; 48 | } 49 | 50 | cardEditActivity.mCardNameView.setText(name); 51 | cardEditActivity.mCardNameView.addTextChangedListener(this); 52 | 53 | return v; 54 | } 55 | 56 | @Override 57 | public void afterTextChanged(Editable s) { 58 | 59 | onEdit(s.toString()); 60 | if(s.length() == getResources().getInteger(R.integer.card_name_len)) { 61 | onComplete(); 62 | } 63 | } 64 | 65 | @Override 66 | public void focus() { 67 | 68 | if(isAdded()) { 69 | cardEditActivity.mCardNameView.selectAll(); 70 | } 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /android/app/src/main/java/maugost/girlies/creditcarddesign/pager/CardNumberFragment.java: -------------------------------------------------------------------------------- 1 | package maugost.girlies.creditcarddesign.pager; 2 | 3 | import android.os.Bundle; 4 | import android.support.annotation.Nullable; 5 | import android.text.Editable; 6 | import android.view.LayoutInflater; 7 | import android.view.View; 8 | import android.view.ViewGroup; 9 | import android.widget.EditText; 10 | 11 | import maugost.girlies.R; 12 | import maugost.girlies.creditcarddesign.CardEditActivity; 13 | import maugost.girlies.creditcarddesign.CreditCardUtils; 14 | 15 | import static maugost.girlies.creditcarddesign.CreditCardUtils.*; 16 | 17 | /** 18 | * Created by sharish on 9/1/15. 19 | */ 20 | public class CardNumberFragment extends CreditCardFragment { 21 | 22 | CardEditActivity cardEditActivity; 23 | 24 | @Override 25 | public void onCreate(@Nullable Bundle savedInstanceState) { 26 | super.onCreate(savedInstanceState); 27 | cardEditActivity = (CardEditActivity)getActivity(); 28 | } 29 | 30 | public CardNumberFragment() { 31 | } 32 | 33 | public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle state) { 34 | View v = inflater.inflate(R.layout.lyt_card_number, group, false); 35 | cardEditActivity.mCardNumberView = (EditText) v.findViewById(R.id.card_number_field); 36 | 37 | String number = ""; 38 | 39 | if (getArguments() != null && getArguments().containsKey(EXTRA_CARD_NUMBER)) { 40 | number = getArguments().getString(EXTRA_CARD_NUMBER); 41 | } 42 | 43 | if (number == null) { 44 | number = ""; 45 | } 46 | 47 | cardEditActivity.mCardNumberView.setText(number); 48 | cardEditActivity.mCardNumberView.addTextChangedListener(this); 49 | 50 | return v; 51 | } 52 | 53 | 54 | @Override 55 | public void afterTextChanged(Editable s) { 56 | int cursorPosition = cardEditActivity.mCardNumberView.getSelectionEnd(); 57 | int previousLength = cardEditActivity.mCardNumberView.getText().length(); 58 | 59 | String cardNumber = CreditCardUtils.handleCardNumber(s.toString()); 60 | int modifiedLength = cardNumber.length(); 61 | 62 | cardEditActivity.mCardNumberView.removeTextChangedListener(this); 63 | cardEditActivity.mCardNumberView.setText(cardNumber); 64 | String rawCardNumber = cardNumber.replace(CreditCardUtils.SPACE_SEPERATOR, ""); 65 | CreditCardUtils.CardType cardType = CreditCardUtils.selectCardType(rawCardNumber); 66 | int maxLengthWithSpaces = ((cardType == CreditCardUtils.CardType.AMEX_CARD) ? CARD_NUMBER_FORMAT_AMEX : CARD_NUMBER_FORMAT).length(); 67 | cardEditActivity.mCardNumberView.setSelection(cardNumber.length() > maxLengthWithSpaces ? maxLengthWithSpaces : cardNumber.length()); 68 | cardEditActivity.mCardNumberView.addTextChangedListener(this); 69 | 70 | if (modifiedLength <= previousLength && cursorPosition < modifiedLength) { 71 | cardEditActivity.mCardNumberView.setSelection(cursorPosition); 72 | } 73 | 74 | onEdit(cardNumber); 75 | 76 | if (rawCardNumber.length() == CreditCardUtils.selectCardLength(cardType)) { 77 | onComplete(); 78 | } 79 | } 80 | 81 | @Override 82 | public void focus() { 83 | if (isAdded()) { 84 | cardEditActivity.mCardNumberView.selectAll(); 85 | } 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /android/app/src/main/java/maugost/girlies/creditcarddesign/pager/CreditCardFragment.java: -------------------------------------------------------------------------------- 1 | package maugost.girlies.creditcarddesign.pager; 2 | 3 | import android.support.v4.app.Fragment; 4 | import android.text.TextWatcher; 5 | 6 | /** 7 | * Created by sharish on 9/1/15. 8 | */ 9 | public abstract class CreditCardFragment extends Fragment implements TextWatcher, IFocus { 10 | 11 | protected IActionListener mActionListener; 12 | 13 | public void setActionListener(IActionListener listener) { 14 | mActionListener = listener; 15 | } 16 | 17 | @Override 18 | public void beforeTextChanged(CharSequence s, int start, int count, int after) { 19 | 20 | } 21 | 22 | @Override 23 | public void onTextChanged(CharSequence s, int start, int before, int count) { 24 | 25 | } 26 | 27 | 28 | public void onEdit(String edit) { 29 | 30 | if(mActionListener != null) { 31 | mActionListener.onEdit(this,edit); 32 | } 33 | 34 | } 35 | 36 | public void onComplete() { 37 | 38 | if(mActionListener != null) { 39 | mActionListener.onActionComplete(this); 40 | } 41 | 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /android/app/src/main/java/maugost/girlies/creditcarddesign/pager/IActionListener.java: -------------------------------------------------------------------------------- 1 | package maugost.girlies.creditcarddesign.pager; 2 | 3 | public interface IActionListener { 4 | void onActionComplete(CreditCardFragment fragment); 5 | void onEdit(CreditCardFragment fragment, String edit); 6 | 7 | } -------------------------------------------------------------------------------- /android/app/src/main/java/maugost/girlies/creditcarddesign/pager/IFocus.java: -------------------------------------------------------------------------------- 1 | package maugost.girlies.creditcarddesign.pager; 2 | 3 | /** 4 | * Created by Harish on 17/01/16. 5 | */ 6 | public interface IFocus { 7 | void focus(); 8 | } 9 | -------------------------------------------------------------------------------- /android/app/src/main/java/maugost/girlies/creditcarddesign/views/HeightWrappingViewPager.java: -------------------------------------------------------------------------------- 1 | package maugost.girlies.creditcarddesign.views; 2 | 3 | import android.content.Context; 4 | import android.support.v4.view.ViewPager; 5 | import android.util.AttributeSet; 6 | import android.view.View; 7 | 8 | public class HeightWrappingViewPager extends ViewPager { 9 | 10 | public HeightWrappingViewPager(Context context) { 11 | super(context); 12 | } 13 | 14 | public HeightWrappingViewPager(Context context, AttributeSet attrs) { 15 | super(context, attrs); 16 | } 17 | 18 | @Override 19 | protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 20 | super.onMeasure(widthMeasureSpec, heightMeasureSpec); 21 | View firstChild = getChildAt(0); 22 | firstChild.measure(widthMeasureSpec, heightMeasureSpec); 23 | super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(firstChild.getMeasuredHeight(), MeasureSpec.EXACTLY)); 24 | } 25 | } -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-hdpi/gradient_line1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-hdpi/ic_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/src/main/res/drawable-hdpi/ic_back.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-hdpi/ic_checkmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/src/main/res/drawable-hdpi/ic_checkmark.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-hdpi/ic_next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/src/main/res/drawable-hdpi/ic_next.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-hdpi/ic_password.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/src/main/res/drawable-hdpi/ic_password.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/card_color_round_rect_blue.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 12 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/card_color_round_rect_brown.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/card_color_round_rect_default.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/card_color_round_rect_green.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/card_color_round_rect_pink.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 12 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/card_color_round_rect_purple.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/chip.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/chip_inner.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/chip_yellow.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/chip_yellow_inner.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/circle_blue3.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/circle_white.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/curve_blue09_a.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/curve_blue09_b.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/curve_blue09_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | 11 | 15 | 17 | 18 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/curve_blue3.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/discover_back.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 15 | 16 | 20 | 21 | 22 | 28 | 29 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/discover_back_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 11 | 12 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/ic_billing_amex_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/src/main/res/drawable/ic_billing_amex_logo.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/ic_billing_amex_logo1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/src/main/res/drawable/ic_billing_amex_logo1.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/ic_billing_discover_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/src/main/res/drawable/ic_billing_discover_logo.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/ic_billing_mastercard_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/src/main/res/drawable/ic_billing_mastercard_logo.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/ic_billing_visa_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/src/main/res/drawable/ic_billing_visa_logo.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/img_amex_center_face.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/src/main/res/drawable/img_amex_center_face.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/master_back.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 15 | 16 | 20 | 21 | 22 | 28 | 29 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/mastercard_back_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 11 | 12 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/red_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | 11 | 15 | 17 | 18 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/sign_strip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/src/main/res/drawable/sign_strip.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/sign_strip_mod.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/visacard_back.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/visacard_back_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 11 | 12 | -------------------------------------------------------------------------------- /android/app/src/main/res/layout/activity_fb_login.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 17 | 18 |