126
FROM GRAILS TO ANDROID A SIMPLE JOURNEY

From Grails to Android: A Simple Journey

Embed Size (px)

Citation preview

Page 1: From Grails to Android: A Simple Journey

FROM GRAILS TO ANDROID A SIMPLE JOURNEY

Page 2: From Grails to Android: A Simple Journey

GRAILS

@BRWNGRLDEV

Page 3: From Grails to Android: A Simple Journey

ANDROID

@BRWNGRLDEV

Page 4: From Grails to Android: A Simple Journey

OVERVIEW

@BRWNGRLDEV

Page 5: From Grails to Android: A Simple Journey

OVERVIEW

▸Project Structure

@BRWNGRLDEV

Page 6: From Grails to Android: A Simple Journey

OVERVIEW

▸Project Structure

▸User Interface

@BRWNGRLDEV

Page 7: From Grails to Android: A Simple Journey

OVERVIEW

▸Project Structure

▸User Interface

▸Dependency Injection

@BRWNGRLDEV

Page 8: From Grails to Android: A Simple Journey

OVERVIEW

▸Project Structure

▸User Interface

▸Dependency Injection

▸Persistence

@BRWNGRLDEV

Page 9: From Grails to Android: A Simple Journey

PROJECT STRUCTURE@BRWNGRLDEV

Page 10: From Grails to Android: A Simple Journey

GRAILS APP STRUCTURE

grails create-app

@BRWNGRLDEV

Page 11: From Grails to Android: A Simple Journey

GRAILS APP STRUCTURE

grails create-app

@BRWNGRLDEV

Page 12: From Grails to Android: A Simple Journey

GRAILS APP STRUCTURE

@BRWNGRLDEV

Page 13: From Grails to Android: A Simple Journey

ANDROID APP STRUCTURE

@BRWNGRLDEV

Page 14: From Grails to Android: A Simple Journey

ANDROID APP STRUCTURE

@BRWNGRLDEV

Page 15: From Grails to Android: A Simple Journey

ANDROID APP STRUCTURE

@BRWNGRLDEV

▸app directory

Page 16: From Grails to Android: A Simple Journey

ANDROID APP STRUCTURE

@BRWNGRLDEV

▸app directory

▸test directories

Page 17: From Grails to Android: A Simple Journey

ANDROID APP STRUCTURE

@BRWNGRLDEV

▸app directory

▸test directories

▸gradle wrapper

Page 18: From Grails to Android: A Simple Journey

ANDROID APP STRUCTURE

@BRWNGRLDEV

Page 19: From Grails to Android: A Simple Journey

ANDROID APP STRUCTURE

@BRWNGRLDEV

most source code

Page 20: From Grails to Android: A Simple Journey

ANDROID APP STRUCTURE

@BRWNGRLDEV

images

Page 21: From Grails to Android: A Simple Journey

ANDROID APP STRUCTURE

@BRWNGRLDEV

views

Page 22: From Grails to Android: A Simple Journey

ANDROID APP STRUCTURE

@BRWNGRLDEV

launcher icons

Page 23: From Grails to Android: A Simple Journey

LAUNCHER ICONS

@BRWNGRLDEV

https://developer.android.com/guide/practices/ui_guidelines/icon_design_launcher.html

Page 24: From Grails to Android: A Simple Journey

ANDROID APP STRUCTURE

@BRWNGRLDEV

strings, colors, sizes, etc.

Page 25: From Grails to Android: A Simple Journey

DOMAIN MODELS

@BRWNGRLDEV

Page 26: From Grails to Android: A Simple Journey

GRAILS DOMAIN CLASS

@BRWNGRLDEV

Page 27: From Grails to Android: A Simple Journey

GRAILS DOMAIN CLASS

@BRWNGRLDEV

▸BookSpec

▸BookController

▸BookControllerSpec

▸/book/edit.gsp

▸/book/create.gsp

▸/book/index.gsp

▸/book/show.gsp

Page 28: From Grails to Android: A Simple Journey

ANDROID DOMAIN CLASS

@BRWNGRLDEV

Page 29: From Grails to Android: A Simple Journey

ANDROID DOMAIN CLASS

@BRWNGRLDEV

▸Book

Page 30: From Grails to Android: A Simple Journey

ANDROID DOMAIN CLASS

@BRWNGRLDEV

▸Book

Page 31: From Grails to Android: A Simple Journey

ANDROID DOMAIN CLASS

@BRWNGRLDEV

Page 32: From Grails to Android: A Simple Journey

ANDROID DOMAIN CLASS

@BRWNGRLDEV

Page 33: From Grails to Android: A Simple Journey

ANDROID DOMAIN CLASS

@BRWNGRLDEV

MVP

Page 34: From Grails to Android: A Simple Journey

ANDROID DOMAIN CLASS

@BRWNGRLDEV

▸BookTest

▸BookPresenter

▸BookPresenterTest

▸BookView

▸BookActivity

▸BookActivityTest

▸activity_book.xml

▸activity_insert_update_book.xml

Page 35: From Grails to Android: A Simple Journey

@BRWNGRLDEV

Page 36: From Grails to Android: A Simple Journey

CONFIGURATION

@BRWNGRLDEV

Page 37: From Grails to Android: A Simple Journey

GRAILS - BUILD.GRADLE

@BRWNGRLDEV

Page 38: From Grails to Android: A Simple Journey

GRAILS - BUILD.GRADLE

@BRWNGRLDEV

Page 39: From Grails to Android: A Simple Journey

ANDROID - BUILD.GRADLE

@BRWNGRLDEV

Page 40: From Grails to Android: A Simple Journey

ANDROID - BUILD.GRADLE

@BRWNGRLDEV

Page 41: From Grails to Android: A Simple Journey

ANDROID - BUILD.GRADLE

@BRWNGRLDEV

Page 42: From Grails to Android: A Simple Journey

GRADLE COMMANDS

@BRWNGRLDEV

▸gradle tasks

▸gradle clean

▸gradle test

▸gradle assemble

Page 43: From Grails to Android: A Simple Journey

GRADLE COMMANDS

@BRWNGRLDEV

▸gradle tasks

▸gradle clean

▸gradle test

▸gradle assemble

Page 44: From Grails to Android: A Simple Journey

PROJECT STRUCTURE

@BRWNGRLDEV

▸Folder layout

▸Domain models

▸Gradle Configuration

Page 45: From Grails to Android: A Simple Journey

@BRWNGRLDEV

Page 46: From Grails to Android: A Simple Journey

USER INTERFACE@BRWNGRLDEV

Page 47: From Grails to Android: A Simple Journey

GRAILS UI

@BRWNGRLDEV

Page 48: From Grails to Android: A Simple Journey

GRAILS GSP PAGE

@BRWNGRLDEV

Page 49: From Grails to Android: A Simple Journey

GRAILS GSP PAGE

@BRWNGRLDEV

Page 50: From Grails to Android: A Simple Journey

GRAILS GSP PAGE

@BRWNGRLDEV

Page 51: From Grails to Android: A Simple Journey

GRAILS GSP PAGE

@BRWNGRLDEV

Page 52: From Grails to Android: A Simple Journey

GRAILS GSP PAGE

@BRWNGRLDEV

<f:display bean=“book”/>

Page 53: From Grails to Android: A Simple Journey

ANDROID UI

@BRWNGRLDEV

Page 54: From Grails to Android: A Simple Journey

ANDROID UI

@BRWNGRLDEV

Page 55: From Grails to Android: A Simple Journey

@BRWNGRLDEV

XML?!

ARE YOU KIDDING ME?!!!

Page 56: From Grails to Android: A Simple Journey

@BRWNGRLDEV

XML?!

ARE YOU KIDDING ME?!!!

Page 57: From Grails to Android: A Simple Journey

@BRWNGRLDEV

XML?!

ARE YOU KIDDING ME?!!!

Page 58: From Grails to Android: A Simple Journey

@BRWNGRLDEV

XML?!

ARE YOU KIDDING ME?!!!

Page 59: From Grails to Android: A Simple Journey

ANDROID LAYOUT GUI

@BRWNGRLDEV

Page 60: From Grails to Android: A Simple Journey

ANDROID LAYOUT GUI

@BRWNGRLDEV

Page 61: From Grails to Android: A Simple Journey

ANDROID LAYOUT GUI

@BRWNGRLDEV

Page 62: From Grails to Android: A Simple Journey

ANDROID XML LAYOUT

@BRWNGRLDEV

Page 63: From Grails to Android: A Simple Journey

ANDROID XML LAYOUT

@BRWNGRLDEV

Page 64: From Grails to Android: A Simple Journey

ANDROID XML LAYOUT

@BRWNGRLDEV

Page 65: From Grails to Android: A Simple Journey

ANDROID XML LAYOUT

@BRWNGRLDEV

Page 66: From Grails to Android: A Simple Journey

STYLE & SIZE RESOURCES

@BRWNGRLDEV

Page 67: From Grails to Android: A Simple Journey

STYLE & SIZE RESOURCES

@BRWNGRLDEV

Page 68: From Grails to Android: A Simple Journey

STYLE & SIZE RESOURCES

@BRWNGRLDEV

Page 69: From Grails to Android: A Simple Journey

STYLE & SIZE RESOURCES

@BRWNGRLDEV

Page 70: From Grails to Android: A Simple Journey

STYLE & SIZE RESOURCES

@BRWNGRLDEV

▸colors

▸styles

▸strings

▸sizes

▸themes

Page 71: From Grails to Android: A Simple Journey

STYLE & SIZE RESOURCES

@BRWNGRLDEV

strings, colors, sizes, etc.

Page 72: From Grails to Android: A Simple Journey

https://www.flickr.com/photos/bionicteaching/14668480106

Page 73: From Grails to Android: A Simple Journey

https://developer.android.com/training/basics/supporting-devices/screens.html

DEVELOPER DOCS

@BRWNGRLDEV

Page 74: From Grails to Android: A Simple Journey

USER INTERFACE

@BRWNGRLDEV

▸GSP pages

▸XML layout

▸Resource folders

Page 75: From Grails to Android: A Simple Journey

@BRWNGRLDEV

Page 76: From Grails to Android: A Simple Journey

DEPENDENCY INJECTION

@BRWNGRLDEV

Page 77: From Grails to Android: A Simple Journey

DEPENDENCY INJECTION

@BRWNGRLDEV

THE CLIENT DELEGATES TO EXTERNAL CODE (THE INJECTOR) THE RESPONSIBILITY OF

PROVIDING ITS DEPENDENCIES. https://en.wikipedia.org/wiki/Dependency_injection

Page 78: From Grails to Android: A Simple Journey

GRAILS - DEPENDENCY INJECTION

@BRWNGRLDEV

Page 79: From Grails to Android: A Simple Journey

GRAILS - DEPENDENCY INJECTION

@BRWNGRLDEV

Page 80: From Grails to Android: A Simple Journey

GRAILS - DEPENDENCY INJECTION

@BRWNGRLDEV

Page 81: From Grails to Android: A Simple Journey

GRAILS - DEPENDENCY INJECTION

@BRWNGRLDEV

Page 82: From Grails to Android: A Simple Journey

ANDROID - SIMPLE APPROACH

@BRWNGRLDEV

public class Injector {

}

Page 83: From Grails to Android: A Simple Journey

ANDROID - SIMPLE APPROACH

@BRWNGRLDEV

public class Injector { private static BookService bookService;

}

Page 84: From Grails to Android: A Simple Journey

ANDROID - SIMPLE APPROACH

@BRWNGRLDEV

public class Injector { private static BookService bookService;

public static BookService provideBookService () { if ( bookService == null ) { bookService = new BookService(); } return bookService;}

}

Page 85: From Grails to Android: A Simple Journey

ANDROID - SIMPLE APPROACH

@BRWNGRLDEV

public class Activity { private BooksPresenter booksPresenter;

@Overrideprotected void onCreate (Bundle savedInstanceState) { …

booksPresenter = new BooksPresenter( Injector.provideBookService() ); }

}

Page 86: From Grails to Android: A Simple Journey

ANDROID - DAGGER

@BRWNGRLDEV

http://google.github.io/dagger/

Page 87: From Grails to Android: A Simple Journey

ANDROID - DAGGER

@BRWNGRLDEV

public class BooksPresenter { private final BookService bookService;

}

Page 88: From Grails to Android: A Simple Journey

ANDROID - DAGGER

@BRWNGRLDEV

public class BooksPresenter { private final BookService bookService;

@Inject BooksPresenter(BookService bookService) {

this.bookService = bookService; }

}

Page 89: From Grails to Android: A Simple Journey

ANDROID - DAGGER

@BRWNGRLDEV

@Module public class AppModule {

}

Page 90: From Grails to Android: A Simple Journey

ANDROID - DAGGER

@BRWNGRLDEV

@Module public class AppModule {

@Provides @Singleton BookService provideBookService() {

return new BookService(); }

}

Page 91: From Grails to Android: A Simple Journey

ANDROID - DAGGER

@BRWNGRLDEV

@Provides @Singleton BookService provideBookService() {

return new BookService(); }

@Inject BooksPresenter(BookService bookService) {

this.bookService = bookService; }

Page 92: From Grails to Android: A Simple Journey

DEPENDENCY INJECTION

@BRWNGRLDEV

▸Spring

▸Simple Injector

▸Dagger

Page 93: From Grails to Android: A Simple Journey

@BRWNGRLDEV

Page 94: From Grails to Android: A Simple Journey

PERSISTENCE@BRWNGRLDEV

Page 95: From Grails to Android: A Simple Journey

@BRWNGRLDEVhttp://gorm.grails.org/latest/

Page 96: From Grails to Android: A Simple Journey

@BRWNGRLDEV

GORMdef book = new Book(title: ‘Clean Code’)

book.save()

Page 97: From Grails to Android: A Simple Journey

@BRWNGRLDEV

GORMdef book = new Book(title: ‘Clean Code’)

book.save()

def book = Book.findByTitle(‘Clean Code’)

println book

Page 98: From Grails to Android: A Simple Journey

@BRWNGRLDEV

GORMdef book = new Book(title: ‘Clean Code’)

book.save()

def book = Book.findByTitle(‘Clean Code’)

println book

def book = Book.get(1)

book.delete()

Page 99: From Grails to Android: A Simple Journey

https://developer.android.com/training/basics/data-storage/databases.html

ANDROID

@BRWNGRLDEV

Page 100: From Grails to Android: A Simple Journey

https://developer.android.com/training/basics/data-storage/databases.html

ANDROID

@BRWNGRLDEV

Page 101: From Grails to Android: A Simple Journey

SQLITE

@BRWNGRLDEV

SQLiteDatabase db = dbHelper.getWritableDatabase();

Page 102: From Grails to Android: A Simple Journey

SQLITE

@BRWNGRLDEV

SQLiteDatabase db = dbHelper.getWritableDatabase();

ContentValues values = new ContentValues(); values.put(COLUMN_NAME_TITLE, title);

Page 103: From Grails to Android: A Simple Journey

SQLITE

@BRWNGRLDEV

SQLiteDatabase db = dbHelper.getWritableDatabase();

ContentValues values = new ContentValues(); values.put(COLUMN_NAME_TITLE, title);

db.insert( TABLE_NAME, null, values);

Page 104: From Grails to Android: A Simple Journey

SQLITE VS. GORM

@BRWNGRLDEV

SQLiteDatabase db = dbHelper.getWritableDatabase();

ContentValues values = new ContentValues(); values.put(COLUMN_NAME_TITLE, title);

db.insert( TABLE_NAME, null, values);

def book = new Book(title: ‘Clean Code’)

book.save()

Page 105: From Grails to Android: A Simple Journey

REALM

@BRWNGRLDEVhttp://realm.io

Page 106: From Grails to Android: A Simple Journey

REALM

@BRWNGRLDEV

Page 107: From Grails to Android: A Simple Journey

REALM

@BRWNGRLDEV

▸Easy to Set Up

Page 108: From Grails to Android: A Simple Journey

REALM

@BRWNGRLDEV

▸Easy to Set Up

▸Faster than ORMs

Page 109: From Grails to Android: A Simple Journey

REALM

@BRWNGRLDEV

▸Easy to Set Up

▸Faster than ORMs

▸Has a Fluent API

Page 110: From Grails to Android: A Simple Journey

REALM - CREATING A RECORD

@BRWNGRLDEV

realm.executeTransaction( new Realm.Transaction() { @Override public void execute (Realm realm) { Book book = realm.createObject(Book.class); book.setTitle(“Clean Code"); }} );

Page 111: From Grails to Android: A Simple Journey

REALM - CREATING A RECORD

@BRWNGRLDEV

realm.executeTransaction( new Realm.Transaction() { @Override public void execute (Realm realm) { Book book = realm.createObject(Book.class); book.setTitle(“Clean Code"); }} );

Page 112: From Grails to Android: A Simple Journey

REALM - QUERY

@BRWNGRLDEV

RealmResults<Book> results = realm.where(Book.class) .equalTo("title", “Clean Code") .or() .equalTo("title", “Clean Codez") .findAll();

Page 113: From Grails to Android: A Simple Journey

REALM - QUERY

@BRWNGRLDEV

RealmResults<Book> results = realm.where(Book.class) .equalTo("title", “Clean Code") .or() .equalTo("title", “Clean Codez") .findAll();

Page 114: From Grails to Android: A Simple Journey

REALM - CHANGE LISTENERS

@BRWNGRLDEV

bookListener = new RealmChangeListener() { @Override public void onChange(Book book) { // make changes }};

Page 115: From Grails to Android: A Simple Journey

REALM - CHANGE LISTENERS

@BRWNGRLDEV

bookListener = new RealmChangeListener() { @Override public void onChange(Book book) { // make changes }};

book = realm.where(Book.class).equalTo("id", 1).findFirst(); book.addChangeListener(bookListener);

Page 116: From Grails to Android: A Simple Journey

PERSISTENCE

@BRWNGRLDEV

▸GORM

▸Sqlite

▸Realm

Page 117: From Grails to Android: A Simple Journey

@BRWNGRLDEV

Page 118: From Grails to Android: A Simple Journey

SUMMARY

@BRWNGRLDEV

Page 119: From Grails to Android: A Simple Journey

SUMMARY

▸Project Structure

@BRWNGRLDEV

Page 120: From Grails to Android: A Simple Journey

SUMMARY

▸Project Structure

▸User Interface

@BRWNGRLDEV

Page 121: From Grails to Android: A Simple Journey

SUMMARY

▸Project Structure

▸User Interface

▸Dependency Injection

@BRWNGRLDEV

Page 122: From Grails to Android: A Simple Journey

SUMMARY

▸Project Structure

▸User Interface

▸Dependency Injection

▸Persistence

@BRWNGRLDEV

Page 123: From Grails to Android: A Simple Journey

KEY TAKEAWAY

@BRWNGRLDEV

Page 124: From Grails to Android: A Simple Journey

KEY TAKEAWAY

@BRWNGRLDEV

ANDROID IS REALLY HARD!

Page 125: From Grails to Android: A Simple Journey

KEY TAKEAWAY

@BRWNGRLDEV

ANDROID IS REALLY HARD!FUN

Page 126: From Grails to Android: A Simple Journey

THANKS!

@brwngrldev

+AnnyceDavis

www.adavis.info

@BRWNGRLDEV