android meetup

Post on 12-May-2015

1.136 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

SVAndroid Meetup @Evernote Presentation

TRANSCRIPT

Android Meetup

Wednesday, January 16, 13

Designing a Useful and Sexy ProductMiki 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 patternsExample: 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 placesExample: home screen explorations before v4 launch

Wednesday, January 16, 13

Sexy: Focus aesthetics in the right placesExample: home screen explorations before v4 launch

Wednesday, January 16, 13

Useful: Go through the flows

Wednesday, January 16, 13

Useful: Go through the flowsExample: 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 clearExample: redesigned note composer

Wednesday, January 16, 13

Useful: Think all sizes and orientations

Wednesday, January 16, 13

Useful: Think all sizes and orientationsExample: layout change

Wednesday, January 16, 13

Useful: Think all sizes and orientationsExample: layout change

Wednesday, January 16, 13

Useful: Think all sizes and orientations

Wednesday, January 16, 13

Useful: Think all sizes and orientationsExample: cues rather than layout change

Wednesday, January 16, 13

Useful: Think all sizes and orientationsExample: cues rather than layout change

Wednesday, January 16, 13

Useful: Test with real users

Wednesday, January 16, 13

Useful: Test with real usersExample: discovering flaws

Wednesday, January 16, 13

Useful: Test with real users

Wednesday, January 16, 13

Useful: Test with real usersExample: eliminating flaws

Wednesday, January 16, 13

Inside EvernoteHemant 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

• Define the feature objectives and goals

Process

Wednesday, January 16, 13

• Define the feature objectives and goals

• Architect the feature

Process

Wednesday, January 16, 13

• Define the feature objectives and goals

• Architect the feature

• Break into small features

Process

Wednesday, January 16, 13

• Define the feature objectives and goals

• Architect the feature

• Break into small features

• Design, Develop & Test

Process

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

• 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

Launch!

Wednesday, January 16, 13

OS version Target the mass

Start Building

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

Phone sizes

Start Building

Wednesday, January 16, 13

Phone sizes...

• Scrollview & Linear Layouts

Wednesday, January 16, 13

Phone sizes...• Fragments

Wednesday, January 16, 13

Phone processing power and memory- There are many fast selling and popular low end devices.

Its a phoneAfter 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.

It’s a phone

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 TipsJess 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

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.

Small Heap & Images

Wednesday, January 16, 13

1536 x 1536 ~ 9.2MB3MP - 2046 x 1536 ~ 12.5MB5MP - 2560 x 1920 ~ 19.5MB8MP - 3264 x 2448 ~ 31.8MB

Worst Case all in-memory8MP ~ 41MB

Using this method9.2MB + 1MB*2 = 11.2MB

What we needed for Food 1.0

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 EvernoteAhmed El-Helw

@ahmedre

Wednesday, January 16, 13

Difficulties

• Many distribution channels                                                  

• Multiple branches of development

• Dependencies on other teams' libraries

Wednesday, January 16, 13

• Security

• Build History

• Easy Distribution

Goal

Wednesday, January 16, 13

Property File

apks

property

Lint, testing, ...

Dependencies

Process

Wednesday, January 16, 13

Benefits

Wednesday, January 16, 13

The Evernote Platform & Android SDKTy 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 roadmaphttps://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;

@Overridepublic 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);}

@Overridepublic 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

top related