SlideShare uma empresa Scribd logo
1 de 79
Baixar para ler offline
Android Meetup


Wednesday, January 16, 13
Designing a Useful and Sexy Product
                            Miki Setlur
                            @mikisetlur




Wednesday, January 16, 13
Looking back...




Wednesday, January 16, 13
Looking back...




Wednesday, January 16, 13
Be Useful & Sexy




Wednesday, January 16, 13
Be Useful & Sexy




Wednesday, January 16, 13
Useful: Select / create intuitive
       design patterns




Wednesday, January 16, 13
Useful: Select / create intuitive
       design patterns
       Example: studying android’s action bar and menu patterns




Wednesday, January 16, 13
Sexy: Focus aesthetics in the
       right places




Wednesday, January 16, 13
Sexy: Focus aesthetics in the
       right places
       Example: home screen explorations before v4 launch




Wednesday, January 16, 13
Sexy: Focus aesthetics in the
       right places
       Example: home screen explorations before v4 launch




Wednesday, January 16, 13
Useful: Go through the flows




Wednesday, January 16, 13
Useful: Go through the flows
     Example: prototyping tablet navigation




Wednesday, January 16, 13
Sexy: Love for Android-only :)




Wednesday, January 16, 13
Sexy: Love for Android-only :)
    Example: designing scalable, customizable widgets




Wednesday, January 16, 13
Sexy: Be clean, crisp and clear




Wednesday, January 16, 13
Sexy: Be clean, crisp and clear
    Example: redesigned note composer




Wednesday, January 16, 13
Useful: Think all sizes and
    orientations




Wednesday, January 16, 13
Useful: Think all sizes and
    orientations
    Example: layout change




Wednesday, January 16, 13
Useful: Think all sizes and
    orientations
    Example: layout change




Wednesday, January 16, 13
Useful: Think all sizes
    and orientations




Wednesday, January 16, 13
Useful: Think all sizes
    and orientations
    Example: cues rather than layout change




Wednesday, January 16, 13
Useful: Think all sizes
    and orientations
    Example: cues rather than layout change




Wednesday, January 16, 13
Useful: Test with real users




Wednesday, January 16, 13
Useful: Test with real users
    Example: discovering flaws




Wednesday, January 16, 13
Useful: Test with real users




Wednesday, January 16, 13
Useful: Test with real users
      Example: eliminating flaws




Wednesday, January 16, 13
Inside Evernote
                               Hemant Garg
                            hgarg@evernote.com




Wednesday, January 16, 13
Wednesday, January 16, 13
Wednesday, January 16, 13
Wednesday, January 16, 13
Process




Wednesday, January 16, 13
Process



                    • Define the feature objectives and goals




Wednesday, January 16, 13
Process



                    • Define the feature objectives and goals
                    • Architect the feature




Wednesday, January 16, 13
Process



                    • Define the feature objectives and goals
                    • Architect the feature
                    • Break into small features




Wednesday, January 16, 13
Process



                    • Define the feature objectives and goals
                    • Architect the feature
                    • Break into small features
                    • Design, Develop & Test




Wednesday, January 16, 13
After development




Wednesday, January 16, 13
After development


               • User Trials




Wednesday, January 16, 13
After development


               • User Trials
               • Beta Release




Wednesday, January 16, 13
After development


               • User Trials
               • Beta Release
               • Crash Reports




Wednesday, January 16, 13
After development


               • User Trials
               • Beta Release
               • Crash Reports
               • Analytics




Wednesday, January 16, 13
Launch!


             •       Test version upgrades, don’t leave too many logs,
                     write nice blog post about it and push the LIVE
                     button.
             •       Monitor crash reports, user reviews & analytics.
             •       1st weekend is very crucial.
             •       Beers and bragging




Wednesday, January 16, 13
Start Building
     OS version
     Target the mass




Wednesday, January 16, 13
OS version..




Wednesday, January 16, 13
OS version..


               • Android Compatibility Library




Wednesday, January 16, 13
OS version..


               • Android Compatibility Library
               • Reflections




Wednesday, January 16, 13
OS version..


               • Android Compatibility Library
               • Reflections
               • Emulators




Wednesday, January 16, 13
Start Building
   Phone sizes




Wednesday, January 16, 13
Phone sizes...

     • Scrollview & Linear Layouts




Wednesday, January 16, 13
Phone sizes...
 • Fragments




Wednesday, January 16, 13
It’s a phone
            Phone processing power and memory- There
            are many fast selling and popular low end
            devices.

            Its a phone
            After all its a mobile phone so think about how
            will your app handle interruptions (incoming
            call) & poor network connectivity.

            Make Android work for you
            - Use Intents to use functionalities from other
            apps.
            - Use content providers to get information from
            OS.
Wednesday, January 16, 13
Give back to Android




Wednesday, January 16, 13
Give back to Android



                    • Open up intents so that other apps can
                            use it. Connect the apps.




Wednesday, January 16, 13
Android Tips
                                 Jess Anders
                            janders@evernote.com




Wednesday, January 16, 13
Fragment Tips



                    •       Fragment.getActivity() (or null)
                    •       FragmentTransactions after
                            onPause()
                    •       Keep track of state of onCreateView
                            and onDestroyView




Wednesday, January 16, 13
Caution posting to Handlers




                            mHandler.post(new Runnable() {
                                public void run() {
                                  if (mIsExited) {
                                      return;
                                  }
                                  updateUI(mNote);
                                }
                            });


Wednesday, January 16, 13
Expect the user not to save




                            •   Auto-save in Evernote client
                            •   Food auto-save
                                •   Meal Activity




Wednesday, January 16, 13
Small Heap & Images


                     Analyze the problem and worst case scenarios.
                   ◦ Calculations Spreadsheet for Food 1.0
                 • Determine if you can do the work in Java code
                 • For Food, we came up with a piece-by-piece
                     approach with BitmapRegionDecoder (2.3+)
                 • For the multi-shot camera, we reused this, but
                     then had a fallback of a native library to process
                     the large photos on older devices.




Wednesday, January 16, 13
What we needed for Food 1.0




        3MP - 2046 x 1536 ~ 12.5MB       1536 x 1536 ~ 9.2MB
        5MP - 2560 x 1920 ~ 19.5MB
        8MP - 3264 x 2448 ~ 31.8MB
         Worst Case all in-memory        Using this method
               8MP ~ 41MB            9.2MB + 1MB*2 = 11.2MB
Wednesday, January 16, 13
Resizing in Max Heap...



        <activity
            android:name=".MultiShotCameraActivity"
            android:process=":photosProcess"
            android:configChanges="keyboardHidden|screenLayout|
        orientation|screenSize"
            android:theme="@android:style/
        Theme.NoTitleBar.Fullscreen" />




Wednesday, January 16, 13
Building Evernote
                             Ahmed El-Helw
                               @ahmedre




Wednesday, January 16, 13
Difficulties




         •      Many distribution channels                                                  
         •      Multiple branches of development
         •      Dependencies on other teams' libraries




Wednesday, January 16, 13
Goal




         •      Security
         •      Build History
         •      Easy Distribution




Wednesday, January 16, 13
Process




                                         property

                                                    Dependencies
                                                    Property File


                                  apks


                            Lint, testing, ...
Wednesday, January 16, 13
Benefits




Wednesday, January 16, 13
The Evernote Platform & Android SDK
                            Ty Smith
                        @tylersmithnet




Wednesday, January 16, 13
The Evernote Platform



         •      The platform ties together all of our products - and it’s
                available to everybody.
         •      We build great apps that help you capture and recall
                important information.
         •      Third party developers add new and different ways to
                capture and recall information, and put your Evernote
                data in context with all of the other services you use.




Wednesday, January 16, 13
What’s in that cloud?




         •      Six billion HTTP requests last month.
         •      20 thousand third party developers
         •      1.5 billion notes have been created to date
         •      380TB of user data
         •      40 million registered users




Wednesday, January 16, 13
Evernote’s Apps




Wednesday, January 16, 13
The Evernote Ecosystem




Wednesday, January 16, 13
Remember Everything




         •      All of your notes live together in context. Search for a
                meal, and you’ll find related meetings, web clips, and
                more.
         •      Every app that adds content to your Evernote account
                makes every other app smarter.




Wednesday, January 16, 13
The Platform Team




         •      Develop APIs, SDKs, sample code and docs
         •      Educate developer communities about the Evernote
                Platform
         •      Support developers
         •      Promote great apps to our user base




Wednesday, January 16, 13
Hackathons




Wednesday, January 16, 13
Android SDK



     •      Open Source and an open roadmap
            https://github.com/evernote/evernote-sdk-android
     •      Library Project for easy integration
     •      Maven Central for dependency management
     •      OAuth2 for secure authentication
     •      Thrift for server-client communication




Wednesday, January 16, 13
Android SDK: Authentication

     private     static final String CONSUMER_KEY = "Your consumer key";
     private     static final String CONSUMER_SECRET = "Your consumer secret";
     private     static final String EVERNOTE_HOST = EvernoteSession.HOST_SANDBOX;
     private     EvernoteSession mEvernoteSession;

     @Override
     public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);

       mEvernoteSession = EvernoteSession.init(this,
                                               CONSUMER_KEY,
                                               CONSUMER_SECRET,
                                               EVERNOTE_HOST,
                                               null);

       if (!mEvernoteSession.isLoggedIn())
         mEvernoteSession.authenticate(this);
     }

     @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
       super.onActivityResult(requestCode, resultCode, data);
       if(requestCode == EvernoteSession.REQUEST_CODE_OAUTH &&
           resultCode == Activity.RESULT_OK)
         //Success, Update UI when OAuth activity returns result
     }




Wednesday, January 16, 13
Android SDK: Creating a note




     /**
      * This is a network request, call outside of main thread
      */
     public void createNote(String title, String content) {
       Note note = new Note();
       note.setTitle(title);

       String enmlContent = EvernoteUtil.NOTE_PREFIX +
                       content +
                       EvernoteUtil.NOTE_SUFFIX;

         note.setContent(enmlContent);
         note = mEvernoteSession.createNoteStore().createNote(mEvernoteSession.getAuthToken(), note);
     }




Wednesday, January 16, 13
Intent: Creating a note



     public static final String ACTION_NEW_NOTE = "com.evernote.action.CREATE_NEW_NOTE";

     public void newNoteWithContent(View view) {
       String text = "This is a sample text file.nThis is line two.";
       String title = "New Note with Content";
       
       Intent intent = new Intent();
       intent.setAction(ACTION_NEW_NOTE);
       
        // Set the note's title and plaintext content
       intent.putExtra(Intent.EXTRA_TITLE, title);
       intent.putExtra(Intent.EXTRA_TEXT, text);

       startActivity(intent);
     }




Wednesday, January 16, 13
Intent: Viewing a note




     public static final String ACTION_VIEW_NOTE = "com.evernote.action.VIEW_NOTE";

     public void viewNote(View view) {
       String noteGuid = "63781605-3c3d-4e56-90a8-8be5e3ae7eee";
       boolean hideTitleBar = true;
       
       Intent intent = new Intent();
       intent.setAction(ACTION_VIEW_NOTE);
       intent.putExtra(EXTRA_NOTE_GUID, noteGuid);
       intent.putExtra(EXTRA_FULL_SCREEN, hideTitleBar);
       
        startActivity(intent);
     }




Wednesday, January 16, 13
Thanks!
                                 @evernote_dev
                            http://dev.evernote.com




Wednesday, January 16, 13

Mais conteúdo relacionado

Semelhante a Android meetup

Designing Elegant UX Across Devices and Platforms
Designing Elegant UX Across Devices and PlatformsDesigning Elegant UX Across Devices and Platforms
Designing Elegant UX Across Devices and PlatformsErik Loehfelm
 
What do you mean, backwards compatibility?
What do you mean, backwards compatibility?What do you mean, backwards compatibility?
What do you mean, backwards compatibility?Trisha Gee
 
Web Motion: Motion Detection on the Web
Web Motion: Motion Detection on the WebWeb Motion: Motion Detection on the Web
Web Motion: Motion Detection on the Webfisherwebdev
 
Responsive Design & the Business Analyst
Responsive Design & the Business AnalystResponsive Design & the Business Analyst
Responsive Design & the Business AnalystTed Hardy, MBA, CBAP
 
Código Fácil De Testear
Código Fácil De TestearCódigo Fácil De Testear
Código Fácil De TestearAlvaro Videla
 
iOS Hackathon 2012 Objective-C talk
iOS Hackathon 2012 Objective-C talkiOS Hackathon 2012 Objective-C talk
iOS Hackathon 2012 Objective-C talkGabriel Lim
 
Greg Isenberg: My Million Dollar Product Mistake
Greg Isenberg: My Million Dollar Product MistakeGreg Isenberg: My Million Dollar Product Mistake
Greg Isenberg: My Million Dollar Product MistakeDealmaker Media
 
Building a Completed iPhone App
Building a Completed iPhone AppBuilding a Completed iPhone App
Building a Completed iPhone AppVu Tran Lam
 
Performance in Android: Tips and Techniques [IndicThreads Mobile Application ...
Performance in Android: Tips and Techniques [IndicThreads Mobile Application ...Performance in Android: Tips and Techniques [IndicThreads Mobile Application ...
Performance in Android: Tips and Techniques [IndicThreads Mobile Application ...IndicThreads
 
Frontend United: Etching wireframes & agile UX
Frontend United: Etching wireframes & agile UXFrontend United: Etching wireframes & agile UX
Frontend United: Etching wireframes & agile UXWunderkraut
 
Proud to be polyglot!
Proud to be polyglot!Proud to be polyglot!
Proud to be polyglot!NLJUG
 
Node.js Patterns and Opinions
Node.js Patterns and OpinionsNode.js Patterns and Opinions
Node.js Patterns and OpinionsIsaacSchlueter
 
Introduction to node.js by Ran Mizrahi @ Reversim Summit
Introduction to node.js by Ran Mizrahi @ Reversim SummitIntroduction to node.js by Ran Mizrahi @ Reversim Summit
Introduction to node.js by Ran Mizrahi @ Reversim SummitRan Mizrahi
 
Hybrid Mobile Web Apps with Sencha Touch 2
Hybrid Mobile Web Apps with Sencha Touch 2Hybrid Mobile Web Apps with Sencha Touch 2
Hybrid Mobile Web Apps with Sencha Touch 2Ibuildings
 
Introduction to Android Development
Introduction to Android DevelopmentIntroduction to Android Development
Introduction to Android DevelopmentJumping Bean
 
AppEngine Performance Tuning
AppEngine Performance TuningAppEngine Performance Tuning
AppEngine Performance TuningDavid Chen
 
jQuery Mobile Jump Start
jQuery Mobile Jump StartjQuery Mobile Jump Start
jQuery Mobile Jump StartTroy Miles
 

Semelhante a Android meetup (20)

Designing Elegant UX Across Devices and Platforms
Designing Elegant UX Across Devices and PlatformsDesigning Elegant UX Across Devices and Platforms
Designing Elegant UX Across Devices and Platforms
 
Paranoid Android
Paranoid AndroidParanoid Android
Paranoid Android
 
What do you mean, backwards compatibility?
What do you mean, backwards compatibility?What do you mean, backwards compatibility?
What do you mean, backwards compatibility?
 
Web Motion: Motion Detection on the Web
Web Motion: Motion Detection on the WebWeb Motion: Motion Detection on the Web
Web Motion: Motion Detection on the Web
 
Responsive Design & the Business Analyst
Responsive Design & the Business AnalystResponsive Design & the Business Analyst
Responsive Design & the Business Analyst
 
Código Fácil De Testear
Código Fácil De TestearCódigo Fácil De Testear
Código Fácil De Testear
 
iOS Hackathon 2012 Objective-C talk
iOS Hackathon 2012 Objective-C talkiOS Hackathon 2012 Objective-C talk
iOS Hackathon 2012 Objective-C talk
 
Greg Isenberg: My Million Dollar Product Mistake
Greg Isenberg: My Million Dollar Product MistakeGreg Isenberg: My Million Dollar Product Mistake
Greg Isenberg: My Million Dollar Product Mistake
 
Building a Completed iPhone App
Building a Completed iPhone AppBuilding a Completed iPhone App
Building a Completed iPhone App
 
Performance in Android: Tips and Techniques [IndicThreads Mobile Application ...
Performance in Android: Tips and Techniques [IndicThreads Mobile Application ...Performance in Android: Tips and Techniques [IndicThreads Mobile Application ...
Performance in Android: Tips and Techniques [IndicThreads Mobile Application ...
 
Frontend United: Etching wireframes & agile UX
Frontend United: Etching wireframes & agile UXFrontend United: Etching wireframes & agile UX
Frontend United: Etching wireframes & agile UX
 
Proud to be polyglot!
Proud to be polyglot!Proud to be polyglot!
Proud to be polyglot!
 
Node.js Patterns and Opinions
Node.js Patterns and OpinionsNode.js Patterns and Opinions
Node.js Patterns and Opinions
 
Usability principles 2
Usability principles 2Usability principles 2
Usability principles 2
 
Introduction to node.js by Ran Mizrahi @ Reversim Summit
Introduction to node.js by Ran Mizrahi @ Reversim SummitIntroduction to node.js by Ran Mizrahi @ Reversim Summit
Introduction to node.js by Ran Mizrahi @ Reversim Summit
 
Aten ntc-stories
Aten ntc-storiesAten ntc-stories
Aten ntc-stories
 
Hybrid Mobile Web Apps with Sencha Touch 2
Hybrid Mobile Web Apps with Sencha Touch 2Hybrid Mobile Web Apps with Sencha Touch 2
Hybrid Mobile Web Apps with Sencha Touch 2
 
Introduction to Android Development
Introduction to Android DevelopmentIntroduction to Android Development
Introduction to Android Development
 
AppEngine Performance Tuning
AppEngine Performance TuningAppEngine Performance Tuning
AppEngine Performance Tuning
 
jQuery Mobile Jump Start
jQuery Mobile Jump StartjQuery Mobile Jump Start
jQuery Mobile Jump Start
 

Último

Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...panagenda
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditSkynet Technologies
 

Último (20)

Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance Audit
 

Android meetup

  • 2. Designing a Useful and Sexy Product Miki Setlur @mikisetlur Wednesday, January 16, 13
  • 5. Be Useful & Sexy Wednesday, January 16, 13
  • 6. Be Useful & Sexy Wednesday, January 16, 13
  • 7. Useful: Select / create intuitive design patterns Wednesday, January 16, 13
  • 8. Useful: Select / create intuitive design patterns Example: studying android’s action bar and menu patterns Wednesday, January 16, 13
  • 9. Sexy: Focus aesthetics in the right places Wednesday, January 16, 13
  • 10. Sexy: Focus aesthetics in the right places Example: home screen explorations before v4 launch Wednesday, January 16, 13
  • 11. Sexy: Focus aesthetics in the right places Example: home screen explorations before v4 launch Wednesday, January 16, 13
  • 12. Useful: Go through the flows Wednesday, January 16, 13
  • 13. Useful: Go through the flows Example: prototyping tablet navigation Wednesday, January 16, 13
  • 14. Sexy: Love for Android-only :) Wednesday, January 16, 13
  • 15. Sexy: Love for Android-only :) Example: designing scalable, customizable widgets Wednesday, January 16, 13
  • 16. Sexy: Be clean, crisp and clear Wednesday, January 16, 13
  • 17. Sexy: Be clean, crisp and clear Example: redesigned note composer Wednesday, January 16, 13
  • 18. Useful: Think all sizes and orientations Wednesday, January 16, 13
  • 19. Useful: Think all sizes and orientations Example: layout change Wednesday, January 16, 13
  • 20. Useful: Think all sizes and orientations Example: layout change Wednesday, January 16, 13
  • 21. Useful: Think all sizes and orientations Wednesday, January 16, 13
  • 22. Useful: Think all sizes and orientations Example: cues rather than layout change Wednesday, January 16, 13
  • 23. Useful: Think all sizes and orientations Example: cues rather than layout change Wednesday, January 16, 13
  • 24. Useful: Test with real users Wednesday, January 16, 13
  • 25. Useful: Test with real users Example: discovering flaws Wednesday, January 16, 13
  • 26. Useful: Test with real users Wednesday, January 16, 13
  • 27. Useful: Test with real users Example: eliminating flaws Wednesday, January 16, 13
  • 28. Inside Evernote Hemant Garg hgarg@evernote.com Wednesday, January 16, 13
  • 33. Process • Define the feature objectives and goals Wednesday, January 16, 13
  • 34. Process • Define the feature objectives and goals • Architect the feature Wednesday, January 16, 13
  • 35. Process • Define the feature objectives and goals • Architect the feature • Break into small features Wednesday, January 16, 13
  • 36. Process • Define the feature objectives and goals • Architect the feature • Break into small features • Design, Develop & Test Wednesday, January 16, 13
  • 38. After development • User Trials Wednesday, January 16, 13
  • 39. After development • User Trials • Beta Release Wednesday, January 16, 13
  • 40. After development • User Trials • Beta Release • Crash Reports Wednesday, January 16, 13
  • 41. After development • User Trials • Beta Release • Crash Reports • Analytics Wednesday, January 16, 13
  • 42. Launch! • Test version upgrades, don’t leave too many logs, write nice blog post about it and push the LIVE button. • Monitor crash reports, user reviews & analytics. • 1st weekend is very crucial. • Beers and bragging Wednesday, January 16, 13
  • 43. Start Building OS version Target the mass Wednesday, January 16, 13
  • 45. OS version.. • Android Compatibility Library Wednesday, January 16, 13
  • 46. OS version.. • Android Compatibility Library • Reflections Wednesday, January 16, 13
  • 47. OS version.. • Android Compatibility Library • Reflections • Emulators Wednesday, January 16, 13
  • 48. Start Building Phone sizes Wednesday, January 16, 13
  • 49. Phone sizes... • Scrollview & Linear Layouts Wednesday, January 16, 13
  • 50. Phone sizes... • Fragments Wednesday, January 16, 13
  • 51. It’s a phone Phone processing power and memory- There are many fast selling and popular low end devices. Its a phone After all its a mobile phone so think about how will your app handle interruptions (incoming call) & poor network connectivity. Make Android work for you - Use Intents to use functionalities from other apps. - Use content providers to get information from OS. Wednesday, January 16, 13
  • 52. Give back to Android Wednesday, January 16, 13
  • 53. Give back to Android • Open up intents so that other apps can use it. Connect the apps. Wednesday, January 16, 13
  • 54. Android Tips Jess Anders janders@evernote.com Wednesday, January 16, 13
  • 55. Fragment Tips • Fragment.getActivity() (or null) • FragmentTransactions after onPause() • Keep track of state of onCreateView and onDestroyView Wednesday, January 16, 13
  • 56. Caution posting to Handlers mHandler.post(new Runnable() { public void run() { if (mIsExited) { return; } updateUI(mNote); } }); Wednesday, January 16, 13
  • 57. Expect the user not to save • Auto-save in Evernote client • Food auto-save • Meal Activity Wednesday, January 16, 13
  • 58. Small Heap & Images Analyze the problem and worst case scenarios. ◦ Calculations Spreadsheet for Food 1.0 • Determine if you can do the work in Java code • For Food, we came up with a piece-by-piece approach with BitmapRegionDecoder (2.3+) • For the multi-shot camera, we reused this, but then had a fallback of a native library to process the large photos on older devices. Wednesday, January 16, 13
  • 59. What we needed for Food 1.0 3MP - 2046 x 1536 ~ 12.5MB 1536 x 1536 ~ 9.2MB 5MP - 2560 x 1920 ~ 19.5MB 8MP - 3264 x 2448 ~ 31.8MB Worst Case all in-memory Using this method 8MP ~ 41MB 9.2MB + 1MB*2 = 11.2MB Wednesday, January 16, 13
  • 60. Resizing in Max Heap... <activity android:name=".MultiShotCameraActivity" android:process=":photosProcess" android:configChanges="keyboardHidden|screenLayout| orientation|screenSize" android:theme="@android:style/ Theme.NoTitleBar.Fullscreen" /> Wednesday, January 16, 13
  • 61. Building Evernote Ahmed El-Helw @ahmedre Wednesday, January 16, 13
  • 62. Difficulties • Many distribution channels                                                   • Multiple branches of development • Dependencies on other teams' libraries Wednesday, January 16, 13
  • 63. Goal • Security • Build History • Easy Distribution Wednesday, January 16, 13
  • 64. Process property Dependencies Property File apks Lint, testing, ... Wednesday, January 16, 13
  • 66. The Evernote Platform & Android SDK Ty Smith @tylersmithnet Wednesday, January 16, 13
  • 67. The Evernote Platform • The platform ties together all of our products - and it’s available to everybody. • We build great apps that help you capture and recall important information. • Third party developers add new and different ways to capture and recall information, and put your Evernote data in context with all of the other services you use. Wednesday, January 16, 13
  • 68. What’s in that cloud? • Six billion HTTP requests last month. • 20 thousand third party developers • 1.5 billion notes have been created to date • 380TB of user data • 40 million registered users Wednesday, January 16, 13
  • 71. Remember Everything • All of your notes live together in context. Search for a meal, and you’ll find related meetings, web clips, and more. • Every app that adds content to your Evernote account makes every other app smarter. Wednesday, January 16, 13
  • 72. The Platform Team • Develop APIs, SDKs, sample code and docs • Educate developer communities about the Evernote Platform • Support developers • Promote great apps to our user base Wednesday, January 16, 13
  • 74. Android SDK • Open Source and an open roadmap https://github.com/evernote/evernote-sdk-android • Library Project for easy integration • Maven Central for dependency management • OAuth2 for secure authentication • Thrift for server-client communication Wednesday, January 16, 13
  • 75. Android SDK: Authentication private static final String CONSUMER_KEY = "Your consumer key"; private static final String CONSUMER_SECRET = "Your consumer secret"; private static final String EVERNOTE_HOST = EvernoteSession.HOST_SANDBOX; private EvernoteSession mEvernoteSession; @Override public void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setContentView(R.layout.main);   mEvernoteSession = EvernoteSession.init(this, CONSUMER_KEY, CONSUMER_SECRET, EVERNOTE_HOST, null);   if (!mEvernoteSession.isLoggedIn())     mEvernoteSession.authenticate(this); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) {   super.onActivityResult(requestCode, resultCode, data);   if(requestCode == EvernoteSession.REQUEST_CODE_OAUTH && resultCode == Activity.RESULT_OK)     //Success, Update UI when OAuth activity returns result } Wednesday, January 16, 13
  • 76. Android SDK: Creating a note /** * This is a network request, call outside of main thread */ public void createNote(String title, String content) { Note note = new Note(); note.setTitle(title); String enmlContent = EvernoteUtil.NOTE_PREFIX +                   content +                   EvernoteUtil.NOTE_SUFFIX; note.setContent(enmlContent); note = mEvernoteSession.createNoteStore().createNote(mEvernoteSession.getAuthToken(), note); } Wednesday, January 16, 13
  • 77. Intent: Creating a note public static final String ACTION_NEW_NOTE = "com.evernote.action.CREATE_NEW_NOTE"; public void newNoteWithContent(View view) {   String text = "This is a sample text file.nThis is line two.";   String title = "New Note with Content";      Intent intent = new Intent();   intent.setAction(ACTION_NEW_NOTE);    // Set the note's title and plaintext content   intent.putExtra(Intent.EXTRA_TITLE, title);   intent.putExtra(Intent.EXTRA_TEXT, text);   startActivity(intent); } Wednesday, January 16, 13
  • 78. Intent: Viewing a note public static final String ACTION_VIEW_NOTE = "com.evernote.action.VIEW_NOTE"; public void viewNote(View view) {   String noteGuid = "63781605-3c3d-4e56-90a8-8be5e3ae7eee";   boolean hideTitleBar = true;      Intent intent = new Intent();   intent.setAction(ACTION_VIEW_NOTE);   intent.putExtra(EXTRA_NOTE_GUID, noteGuid);   intent.putExtra(EXTRA_FULL_SCREEN, hideTitleBar);    startActivity(intent); } Wednesday, January 16, 13
  • 79. Thanks! @evernote_dev http://dev.evernote.com Wednesday, January 16, 13