SlideShare una empresa de Scribd logo
1 de 37
www.immobilienscout24.de




The Multi-Device Nightmare
- and how to clear the Elm Street

Droidcon | Berlin | 09.03.2013 | Hasan Hosgel
About me


             Hasan Hosgel


             Twitter:              @alosdev
             Github:               alosdev
             Google+:              Hasan Hosgel
             Slideshare: hosgel


             developer @ ImmobilienScout24
             CO-Organizer @ GDG Android in
             Berlin
             & community events




           Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
Fragmentation




                Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
Fragmentation




     > 2700 Android Devices




                Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
Here comes The Nightmare




Image source:                                          Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
http://www.flickr.com/photos/boogeyman13/4553188509/
Here comes The Nightmare




                               For developers

Image source:                                          Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
http://www.flickr.com/photos/boogeyman13/4553188509/
Device Classification




Images sources:                         Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
https://play.google.com/store/devices
Device Classification




Images sources:                         Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
https://play.google.com/store/devices
http://www.htc.com/de/
Device Classification




Images sources:                    Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
http://www.sony.de/hub/google-tv
Device Classification




Images Sources                Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
https://developer.ford.com/
Resource Folders


You can use several qualifiers in the resource folders name for serving
the best matching resource. Most used qualifiers:

●   Language (-en)
●   Language & Region (-en-rUS)
●   Smallest Width (-swXXXdp, e.g. –sw600dp)
●   Screensize (-small, -normal, -large)
●   Screen Orientation (-port, -land)
●   Screen Pixel Densitiy (-mdpi, -hdpi, -xhdpi, -xxhdpi)
●   Platform Version (-v11, -v13)




                                        Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
Resource Folders


If you have several resource folders, the one with the greatest
matching number qualifiers will be used. e.g. :

1.   res/values/strings.xml
2.   res/values-en-rUS/strings.xml
3.   res/values-large/strings.xml
4.   res/values-sw600dp/strings.xml




                                      Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
Resource Folders


If you have several resource folders, the one with the greatest
matching number qualifiers will be used. e.g. :

1.   res/values/strings.xml
2.   res/values-en-rUS/strings.xml
3.   res/values-large/strings.xml
4.   res/values-sw600dp/strings.xml

If two resources have the same number of matching qualifiers, the
ordering in the previous slide will rank the qualifiers.

e.g. Device configurations:
Nexus One: 1.
Galaxy Tab 7.0 in German: 3.
Nexus 7: 4.



                                      Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
Images


●   Use the different qualifiers for the screen pixel density (mdpi, hdpi,
    etc.)
●   If you are forced to use text on images use language and region
    (en, es-rUs, en-rUS, etc.)
●   Better approach is to use 9-patch drawables, which stretches
    automatically depending on the content inside.
       More about it: developer.android.com
●   You must provide different launcher icons for Froyo, Honeycomb
    and above? Use the platform version. (v4, v11, v14)




                                      Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
Classifications For Layouts


If your minimum SDK is at least platform version 13 (Honeycomb MR2)


project-folder/res/
   layout/                         small phones
   layout-sw320dp/                 other phones
   layout-sw600dp/                 tablets 7”
   layout-sw720dp/                 tablets 10”




You should also use orientation


                                    Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
Classifications For Layouts


If your minimum SDK is lower than platform version 11 (Honeycomb)
project-folder/res/
   layout/                        phones
   layout-v11/                    tablets 10”
   layout-v13/                    small phones
   layout-sw320dp/                other phones
   layout-sw600dp/                tablets 7”
   layout-sw720dp/                tablets 10”


The smallest width qualifier gets automatically platform version “v13”
through the packager, for avoiding problems with the number of
matching qualifiers.
You can also use the screen size qualifier, if you want to reach
small, medium and large screens previous to Honeycomb.


                                    Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
Classifications In Code


You can read the configurations from the device.

Smarter Approach: use boolean resources

project-folder/res/values/layouts.xml
<resources>
   <bool name="is_phone_small”>false</bool>
   <bool name="is_phone_other">true</bool>
   <bool name="is_tablet_7”>false</bool>
   <bool name="is_tablet_10”>false</bool>
</resources>




                                   Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
Classifications In Code


You can read the configurations from the device.

Smarter Approach: use boolean resources

project-folder/res/values/layouts.xml
<resources>
   <bool name="is_phone_small”>false</bool>
   <bool name="is_phone_other">true</bool>
   <bool name="is_tablet_7”>false</bool>
   <bool name="is_tablet_10”>false</bool>
</resources>

Usage in code:
Context.getResources().getBoolean(R.bool.is_phone_small)




                                   Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
Current Layout File Structure


project-folder/res/
   layout/main.xml
   layout-v11/main.xml
   layout-v13/main.xml
   layout-sw320dp/main.xml
   layout-sw600dp/main.xml
   layout-sw720dp/main.xml




                             Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
Current Layout File Structure


project-folder/res/
   layout/main.xml
   layout-v11/main.xml
   layout-v13/main.xml
   layout-sw320dp/main.xml
   layout-sw600dp/main.xml
   layout-sw720dp/main.xml


     Fixing one bug in the 10“ layout has to be done in two files.




                                   Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
Current Layout File Structure


project-folder/res/
   layout/main.xml
   layout-v11/main.xml
   layout-v13/main.xml
   layout-sw320dp/main.xml
   layout-sw600dp/main.xml
   layout-sw720dp/main.xml


     Fixing one bug in the 10“ layout has to be done in two files.
      error prone




                                   Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
Resource Alias


1. Put your layout files in the default folder.

    project-folder/res/
        layout/main.xml
        layout/main_phone_other.xml
        layout/main_tablet_7.xml
        layout/main_tablet_10.xml




                                      Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
Resource Alias


1. Put the needed layout files in the default folder.

    project-folder/res/
        layout/main.xml
        layout/main_phone_other.xml
        layout/main_tablet_7.xml
        layout/main_tablet_10.xml

2. Declare another resource file in the values folder and create an item
   with the needed classification.

    project-folder/res/values-sw600dp/layouts.xml
        <item name=“main” type=“layout”>@layout/main_tablet7</item>




                                     Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
Sample Screen




                Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
Sample Screen




                       Use <includes>

                Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
Sample Screen

                   Create custom view




                       Use <includes>

                Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
Custom View
public class CustomView extends LinearLayout {
  public CustomView(Context context, AttributeSet attrs) {
    super(context, attrs);
    LayoutParams lp = …
    addView(getText(context, "label"), lp);
    addView(getText(context, "value"), lp);
    if (context.getResources().getBoolean(R.bool.is_phone) ||
       context.getResources().getBoolean(R.bool.is_phone_other)) {
        setOrientation(VERTICAL);
    } else {
       setOrientation(HORIZONTAL);
    }
}
    private TextView getText(Context context, String text) {
      TextView textView = new TextView(context);
      textView.setText(text);
      return textView;
    }
}
                                   Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
Sample Screen

                   Create custom view




                       Use <includes>

                Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
Sample Screen

                          Create custom view




      If custom view has much more
      business logic and need lifecycles
       Create a Fragment




                              Use <includes>

                       Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
Custom XML Attribute (attrs.xml)

<resources>
 <declare-styleable name=”CustomView">
    <attr name="label" format="reference|string" />
    <attr name="value" format="reference|string" />
    <attr name="orientation" format="enum">
      <enum name="horizontal" value="0" />
      <enum name="vertical" value="1" />
    </attr>
  </declare-styleable>
<resources>




                                 Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
Custom XML Attribute (main.xml)

Add to root XML node
xmlns:app="http://schemas.android.com/apk/res/de.alosdev"

Usage in custom view

<de.alosdev.CustomView
    android:id="@+id/customView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:label="label 1"
    app:orientation="vertical"
    app:value="value 1" />




                                 Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
Custom XML Attribute (CustomView.java)

public class CustomView extends LinearLayout {
static final int[] ORIENTATION = new int[] { HORIZONTAL, VERTICAL
};
   public CustomView(Context context, AttributeSet attrs) {
     super(context, attrs);
        …
        TypedArray a = context.obtainStyledAttributes(attrs,
           R.styleable.CustomView);
     try {
       setOrientation(ORIENTATION[
          a.getInt(R.styleable.CustomView_orientation, 0)]);
     } finally {
        a.recycle();
     }
  }
    …
}
                                 Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
Best Practices
which learned painfully



●   You have already an application
       Remove orientation fixation and suppressing of orientation
       change from manifest to avoid long bug analyzing.
●   You start from the scratch
       Focus on main classification for faster time to market
         But create an overall concept for better modularization
●   If you support both orientations, save the instance state while
    orientation changes for more responsiveness
       Especially for states, need a long computation for creation.
       Make the state object Parcelable for faster write & read




                                      Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
Mission Accomplished




http://www.flickr.com/photos/ianaberle/5729561934/   Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
Mission Accomplished




http://www.flickr.com/photos/ianaberle/5729561934/   Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
Q&A




                                                                                                              Page 36
Source: http://www.flickr.com/photos/21496790@N06/5065834411/   Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
www.immobilienscout24.de


Thanks for your attention!

Contact:

Hasan Hosgel               Multidevice Nightmare
Twitter: @alosdev          Repo:        https://github.com/alosdev/multidevice-nightmare-demo
Github: alosdev            SlideShare: http://de.slideshare.net/hosgel/droidcon-2013-multidevice-nightmare

Más contenido relacionado

Similar a Droidcon 2013 Multidevice Nightmare

Mtc spring 2014 best practices to develop for different android device classi...
Mtc spring 2014 best practices to develop for different android device classi...Mtc spring 2014 best practices to develop for different android device classi...
Mtc spring 2014 best practices to develop for different android device classi...Hasan Hosgel
 
AdaptTo 2013 Device Detection with Apache DeviceMap
AdaptTo 2013 Device Detection with Apache DeviceMapAdaptTo 2013 Device Detection with Apache DeviceMap
AdaptTo 2013 Device Detection with Apache DeviceMapConrad Woeltge
 
AdaptTo 2013: Slinging multichannel content the BrowserMap way / Device Detec...
AdaptTo 2013: Slinging multichannel content the BrowserMap way / Device Detec...AdaptTo 2013: Slinging multichannel content the BrowserMap way / Device Detec...
AdaptTo 2013: Slinging multichannel content the BrowserMap way / Device Detec...Andrew Savory
 
Android Embedded - Smart Hubs als Schaltzentrale des IoT
Android Embedded - Smart Hubs als Schaltzentrale des IoTAndroid Embedded - Smart Hubs als Schaltzentrale des IoT
Android Embedded - Smart Hubs als Schaltzentrale des IoTinovex GmbH
 
Going to Mars with Groovy Domain-Specific Languages
Going to Mars with Groovy Domain-Specific LanguagesGoing to Mars with Groovy Domain-Specific Languages
Going to Mars with Groovy Domain-Specific LanguagesGuillaume Laforge
 
Get ready for new nexus devices
Get ready for new nexus devicesGet ready for new nexus devices
Get ready for new nexus devicesKetan Raval
 
[Ultracode Munich #4] Short introduction to the new Android build system incl...
[Ultracode Munich #4] Short introduction to the new Android build system incl...[Ultracode Munich #4] Short introduction to the new Android build system incl...
[Ultracode Munich #4] Short introduction to the new Android build system incl...BeMyApp
 
Extending Spring MVC with Spring Mobile and JavaScript
Extending Spring MVC with Spring Mobile and JavaScriptExtending Spring MVC with Spring Mobile and JavaScript
Extending Spring MVC with Spring Mobile and JavaScriptRoy Clarkson
 
The specs behind the sex, mobile-friendly layout beyond the desktop
The specs behind the sex, mobile-friendly layout beyond the desktopThe specs behind the sex, mobile-friendly layout beyond the desktop
The specs behind the sex, mobile-friendly layout beyond the desktopbetabeers
 
[Droidcon Paris 2013]Multi-Versioning Android Tips
[Droidcon Paris 2013]Multi-Versioning Android Tips[Droidcon Paris 2013]Multi-Versioning Android Tips
[Droidcon Paris 2013]Multi-Versioning Android TipsKenichi Kambara
 
Using Composer with Drupal and Drush
Using Composer with Drupal and DrushUsing Composer with Drupal and Drush
Using Composer with Drupal and DrushPantheon
 
Jenkins entwined with deployment and pragmatism
Jenkins entwined with deployment and pragmatismJenkins entwined with deployment and pragmatism
Jenkins entwined with deployment and pragmatismEric Ritchie
 
Groovy Domain Specific Languages - SpringOne2GX 2012
Groovy Domain Specific Languages - SpringOne2GX 2012Groovy Domain Specific Languages - SpringOne2GX 2012
Groovy Domain Specific Languages - SpringOne2GX 2012Guillaume Laforge
 
Drupal as a Framework for Mobile Development
Drupal as a Framework for Mobile DevelopmentDrupal as a Framework for Mobile Development
Drupal as a Framework for Mobile DevelopmentRachel Jaro
 
Android Development project
Android Development projectAndroid Development project
Android Development projectMinhaj Kazi
 
Exploring composer in drupal 8 with drupal project - salva molina
Exploring composer in drupal 8 with drupal project - salva molinaExploring composer in drupal 8 with drupal project - salva molina
Exploring composer in drupal 8 with drupal project - salva molinaSalvador Molina (Slv_)
 
Best Practices for Android UI by RapidValue Solutions
Best Practices for Android UI by RapidValue SolutionsBest Practices for Android UI by RapidValue Solutions
Best Practices for Android UI by RapidValue SolutionsRapidValue
 
Pinkoi Mobile Web
Pinkoi Mobile WebPinkoi Mobile Web
Pinkoi Mobile Webmikeleeme
 

Similar a Droidcon 2013 Multidevice Nightmare (20)

Mtc spring 2014 best practices to develop for different android device classi...
Mtc spring 2014 best practices to develop for different android device classi...Mtc spring 2014 best practices to develop for different android device classi...
Mtc spring 2014 best practices to develop for different android device classi...
 
Multi Screen Hell
Multi Screen HellMulti Screen Hell
Multi Screen Hell
 
AdaptTo 2013 Device Detection with Apache DeviceMap
AdaptTo 2013 Device Detection with Apache DeviceMapAdaptTo 2013 Device Detection with Apache DeviceMap
AdaptTo 2013 Device Detection with Apache DeviceMap
 
AdaptTo 2013: Slinging multichannel content the BrowserMap way / Device Detec...
AdaptTo 2013: Slinging multichannel content the BrowserMap way / Device Detec...AdaptTo 2013: Slinging multichannel content the BrowserMap way / Device Detec...
AdaptTo 2013: Slinging multichannel content the BrowserMap way / Device Detec...
 
Android Embedded - Smart Hubs als Schaltzentrale des IoT
Android Embedded - Smart Hubs als Schaltzentrale des IoTAndroid Embedded - Smart Hubs als Schaltzentrale des IoT
Android Embedded - Smart Hubs als Schaltzentrale des IoT
 
Going to Mars with Groovy Domain-Specific Languages
Going to Mars with Groovy Domain-Specific LanguagesGoing to Mars with Groovy Domain-Specific Languages
Going to Mars with Groovy Domain-Specific Languages
 
Get ready for new nexus devices
Get ready for new nexus devicesGet ready for new nexus devices
Get ready for new nexus devices
 
[Ultracode Munich #4] Short introduction to the new Android build system incl...
[Ultracode Munich #4] Short introduction to the new Android build system incl...[Ultracode Munich #4] Short introduction to the new Android build system incl...
[Ultracode Munich #4] Short introduction to the new Android build system incl...
 
Extending Spring MVC with Spring Mobile and JavaScript
Extending Spring MVC with Spring Mobile and JavaScriptExtending Spring MVC with Spring Mobile and JavaScript
Extending Spring MVC with Spring Mobile and JavaScript
 
The specs behind the sex, mobile-friendly layout beyond the desktop
The specs behind the sex, mobile-friendly layout beyond the desktopThe specs behind the sex, mobile-friendly layout beyond the desktop
The specs behind the sex, mobile-friendly layout beyond the desktop
 
[Droidcon Paris 2013]Multi-Versioning Android Tips
[Droidcon Paris 2013]Multi-Versioning Android Tips[Droidcon Paris 2013]Multi-Versioning Android Tips
[Droidcon Paris 2013]Multi-Versioning Android Tips
 
Using Composer with Drupal and Drush
Using Composer with Drupal and DrushUsing Composer with Drupal and Drush
Using Composer with Drupal and Drush
 
Jenkins entwined with deployment and pragmatism
Jenkins entwined with deployment and pragmatismJenkins entwined with deployment and pragmatism
Jenkins entwined with deployment and pragmatism
 
Android TCJUG
Android TCJUGAndroid TCJUG
Android TCJUG
 
Groovy Domain Specific Languages - SpringOne2GX 2012
Groovy Domain Specific Languages - SpringOne2GX 2012Groovy Domain Specific Languages - SpringOne2GX 2012
Groovy Domain Specific Languages - SpringOne2GX 2012
 
Drupal as a Framework for Mobile Development
Drupal as a Framework for Mobile DevelopmentDrupal as a Framework for Mobile Development
Drupal as a Framework for Mobile Development
 
Android Development project
Android Development projectAndroid Development project
Android Development project
 
Exploring composer in drupal 8 with drupal project - salva molina
Exploring composer in drupal 8 with drupal project - salva molinaExploring composer in drupal 8 with drupal project - salva molina
Exploring composer in drupal 8 with drupal project - salva molina
 
Best Practices for Android UI by RapidValue Solutions
Best Practices for Android UI by RapidValue SolutionsBest Practices for Android UI by RapidValue Solutions
Best Practices for Android UI by RapidValue Solutions
 
Pinkoi Mobile Web
Pinkoi Mobile WebPinkoi Mobile Web
Pinkoi Mobile Web
 

Último

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
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
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
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesBernd Ruecker
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
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
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...itnewsafrica
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observabilityitnewsafrica
 
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
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integrationmarketing932765
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesManik S Magar
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
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
 

Último (20)

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
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
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.
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architectures
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
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
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
 
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
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
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
 

Droidcon 2013 Multidevice Nightmare

  • 1. www.immobilienscout24.de The Multi-Device Nightmare - and how to clear the Elm Street Droidcon | Berlin | 09.03.2013 | Hasan Hosgel
  • 2. About me Hasan Hosgel Twitter: @alosdev Github: alosdev Google+: Hasan Hosgel Slideshare: hosgel developer @ ImmobilienScout24 CO-Organizer @ GDG Android in Berlin & community events Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
  • 3. Fragmentation Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
  • 4. Fragmentation > 2700 Android Devices Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
  • 5. Here comes The Nightmare Image source: Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel http://www.flickr.com/photos/boogeyman13/4553188509/
  • 6. Here comes The Nightmare For developers Image source: Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel http://www.flickr.com/photos/boogeyman13/4553188509/
  • 7. Device Classification Images sources: Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel https://play.google.com/store/devices
  • 8. Device Classification Images sources: Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel https://play.google.com/store/devices http://www.htc.com/de/
  • 9. Device Classification Images sources: Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel http://www.sony.de/hub/google-tv
  • 10. Device Classification Images Sources Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel https://developer.ford.com/
  • 11. Resource Folders You can use several qualifiers in the resource folders name for serving the best matching resource. Most used qualifiers: ● Language (-en) ● Language & Region (-en-rUS) ● Smallest Width (-swXXXdp, e.g. –sw600dp) ● Screensize (-small, -normal, -large) ● Screen Orientation (-port, -land) ● Screen Pixel Densitiy (-mdpi, -hdpi, -xhdpi, -xxhdpi) ● Platform Version (-v11, -v13) Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
  • 12. Resource Folders If you have several resource folders, the one with the greatest matching number qualifiers will be used. e.g. : 1. res/values/strings.xml 2. res/values-en-rUS/strings.xml 3. res/values-large/strings.xml 4. res/values-sw600dp/strings.xml Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
  • 13. Resource Folders If you have several resource folders, the one with the greatest matching number qualifiers will be used. e.g. : 1. res/values/strings.xml 2. res/values-en-rUS/strings.xml 3. res/values-large/strings.xml 4. res/values-sw600dp/strings.xml If two resources have the same number of matching qualifiers, the ordering in the previous slide will rank the qualifiers. e.g. Device configurations: Nexus One: 1. Galaxy Tab 7.0 in German: 3. Nexus 7: 4. Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
  • 14. Images ● Use the different qualifiers for the screen pixel density (mdpi, hdpi, etc.) ● If you are forced to use text on images use language and region (en, es-rUs, en-rUS, etc.) ● Better approach is to use 9-patch drawables, which stretches automatically depending on the content inside. More about it: developer.android.com ● You must provide different launcher icons for Froyo, Honeycomb and above? Use the platform version. (v4, v11, v14) Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
  • 15. Classifications For Layouts If your minimum SDK is at least platform version 13 (Honeycomb MR2) project-folder/res/ layout/  small phones layout-sw320dp/  other phones layout-sw600dp/  tablets 7” layout-sw720dp/  tablets 10” You should also use orientation Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
  • 16. Classifications For Layouts If your minimum SDK is lower than platform version 11 (Honeycomb) project-folder/res/ layout/  phones layout-v11/  tablets 10” layout-v13/  small phones layout-sw320dp/  other phones layout-sw600dp/  tablets 7” layout-sw720dp/  tablets 10” The smallest width qualifier gets automatically platform version “v13” through the packager, for avoiding problems with the number of matching qualifiers. You can also use the screen size qualifier, if you want to reach small, medium and large screens previous to Honeycomb. Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
  • 17. Classifications In Code You can read the configurations from the device. Smarter Approach: use boolean resources project-folder/res/values/layouts.xml <resources> <bool name="is_phone_small”>false</bool> <bool name="is_phone_other">true</bool> <bool name="is_tablet_7”>false</bool> <bool name="is_tablet_10”>false</bool> </resources> Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
  • 18. Classifications In Code You can read the configurations from the device. Smarter Approach: use boolean resources project-folder/res/values/layouts.xml <resources> <bool name="is_phone_small”>false</bool> <bool name="is_phone_other">true</bool> <bool name="is_tablet_7”>false</bool> <bool name="is_tablet_10”>false</bool> </resources> Usage in code: Context.getResources().getBoolean(R.bool.is_phone_small) Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
  • 19. Current Layout File Structure project-folder/res/ layout/main.xml layout-v11/main.xml layout-v13/main.xml layout-sw320dp/main.xml layout-sw600dp/main.xml layout-sw720dp/main.xml Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
  • 20. Current Layout File Structure project-folder/res/ layout/main.xml layout-v11/main.xml layout-v13/main.xml layout-sw320dp/main.xml layout-sw600dp/main.xml layout-sw720dp/main.xml Fixing one bug in the 10“ layout has to be done in two files. Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
  • 21. Current Layout File Structure project-folder/res/ layout/main.xml layout-v11/main.xml layout-v13/main.xml layout-sw320dp/main.xml layout-sw600dp/main.xml layout-sw720dp/main.xml Fixing one bug in the 10“ layout has to be done in two files.  error prone Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
  • 22. Resource Alias 1. Put your layout files in the default folder. project-folder/res/ layout/main.xml layout/main_phone_other.xml layout/main_tablet_7.xml layout/main_tablet_10.xml Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
  • 23. Resource Alias 1. Put the needed layout files in the default folder. project-folder/res/ layout/main.xml layout/main_phone_other.xml layout/main_tablet_7.xml layout/main_tablet_10.xml 2. Declare another resource file in the values folder and create an item with the needed classification. project-folder/res/values-sw600dp/layouts.xml <item name=“main” type=“layout”>@layout/main_tablet7</item> Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
  • 24. Sample Screen Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
  • 25. Sample Screen Use <includes> Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
  • 26. Sample Screen Create custom view Use <includes> Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
  • 27. Custom View public class CustomView extends LinearLayout { public CustomView(Context context, AttributeSet attrs) { super(context, attrs); LayoutParams lp = … addView(getText(context, "label"), lp); addView(getText(context, "value"), lp); if (context.getResources().getBoolean(R.bool.is_phone) || context.getResources().getBoolean(R.bool.is_phone_other)) { setOrientation(VERTICAL); } else { setOrientation(HORIZONTAL); } } private TextView getText(Context context, String text) { TextView textView = new TextView(context); textView.setText(text); return textView; } } Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
  • 28. Sample Screen Create custom view Use <includes> Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
  • 29. Sample Screen Create custom view If custom view has much more business logic and need lifecycles  Create a Fragment Use <includes> Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
  • 30. Custom XML Attribute (attrs.xml) <resources> <declare-styleable name=”CustomView"> <attr name="label" format="reference|string" /> <attr name="value" format="reference|string" /> <attr name="orientation" format="enum"> <enum name="horizontal" value="0" /> <enum name="vertical" value="1" /> </attr> </declare-styleable> <resources> Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
  • 31. Custom XML Attribute (main.xml) Add to root XML node xmlns:app="http://schemas.android.com/apk/res/de.alosdev" Usage in custom view <de.alosdev.CustomView android:id="@+id/customView" android:layout_width="wrap_content" android:layout_height="wrap_content" app:label="label 1" app:orientation="vertical" app:value="value 1" /> Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
  • 32. Custom XML Attribute (CustomView.java) public class CustomView extends LinearLayout { static final int[] ORIENTATION = new int[] { HORIZONTAL, VERTICAL }; public CustomView(Context context, AttributeSet attrs) { super(context, attrs); … TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomView); try { setOrientation(ORIENTATION[ a.getInt(R.styleable.CustomView_orientation, 0)]); } finally { a.recycle(); } } … } Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
  • 33. Best Practices which learned painfully ● You have already an application Remove orientation fixation and suppressing of orientation change from manifest to avoid long bug analyzing. ● You start from the scratch Focus on main classification for faster time to market But create an overall concept for better modularization ● If you support both orientations, save the instance state while orientation changes for more responsiveness Especially for states, need a long computation for creation. Make the state object Parcelable for faster write & read Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
  • 34. Mission Accomplished http://www.flickr.com/photos/ianaberle/5729561934/ Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
  • 35. Mission Accomplished http://www.flickr.com/photos/ianaberle/5729561934/ Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
  • 36. Q&A Page 36 Source: http://www.flickr.com/photos/21496790@N06/5065834411/ Droidcon 2013 | Mutli-Device Nightmare | Hasan Hosgel
  • 37. www.immobilienscout24.de Thanks for your attention! Contact: Hasan Hosgel Multidevice Nightmare Twitter: @alosdev Repo: https://github.com/alosdev/multidevice-nightmare-demo Github: alosdev SlideShare: http://de.slideshare.net/hosgel/droidcon-2013-multidevice-nightmare