Samsung Mobile SDK Look Package

Written by Super User. Posted in Android Anlatımlar

Önceki yazım Samsung Mobile SDK içerisindeki Pen Package hakkındaydı, bu yazımda ise Mobile SDK içerisindeki Look Package'dan bahsedeceğim.

Look Package Android View sistemi için SPen'le daha kolay etkileşime girilmesi için özelleştirilmiş widgetlar sağlamakta. Tüm Look API fonksiyonları SPen'e ihtiyaç duymaktadır ve tüm bu fonksiyonlar sadece Look desteği olan cihazlarda kullanılabilmektedir.

Look package'ın desteklediği işlevleri 4 ana başlığa ayıracak olursak;

  • WritingBuddy
  • AirButton
  • SmartClip
  • PointerIcon

şeklinde ayırabiliriz. Bu 4 ana işleve göz atalım. İşlevlerin isimlendirmeleri aslında az çok işlevin ne işe yaradığı hakkında bilgi veriyor.

WritingBuddy

Adından da anlaşılacağı üzere bu işlev, SPen kullanılarak uygulamaya sağlanabilecek inputların daha kolay alınabilmesini destekleyen bir işlevdir. Android view sistemindeki built-in herhangi bir widget'a bir "WritingBuddy" ekleyerek Spen ile girişleri daha kolay alabilirsiniz. Spen hedef view yakınına geldiğinde bir editör açılarak el yazısı girdisi bekler. Bu editör üzerine yazabilirsiniz. WritingBuddy tanınan textleri, numaraları ve resimleri okuyacaktır. 

Amacı : Android View sistemine SPen ile giriş yapılmasını kolaylaştıracak yeni özellikler sağlamak.

WritingBuddy

Air Button

Air button içeriklere veya menülere SPen ile daha kolay erişmek için kullanılabilecek genişletilmiş bir view'dır. Bununla SPen'e içeriklere hızlı erişim imkanı sunularak, içerik görüntülemek, menü seçimi yapmak ve resimler eklemek için işlevler sağlanabilir. Air Button size nerede ve ne zaman isterseniz bilgilendirmeler sunabilir, SPen ile üzerine gelip yan tuşa tıkladığınızda ek işlevlerin gerçekleştirilebilmesine imkan sağlar. Yani gravity, direction gibi özellikleri ayarlanabilir şekilde, uygun içeriği ve uygun etkileşimi Air Button'a atayabilirsiniz.

Amacı : SPen ile uygun işlev ve içeriklere erişimin kolaylaştırılmasını sağlamak.

Air Button

Pointer Icon

SPen'in istenen bir view üzerindeyken pointer iconunun değişebilmesine imkan tanır. Buna şu şekilde örnek verebiliriz. Örneğin bir çizim uygulamasında kırmızı renk seçili, Spen çizim yapılabilecek canvas üzerine geldiğinde pointer icon kırmızı renk ile çizim yapılabileceğini belirten bir pointer şeklinde görüntülenebilir.

Amacı : Pointer icon'unun değiştirilerek SPen kullanımı için daha iyi bir deneyim sunulması.

Pointer Icon

SmartClip

SmartClip işlevi ile SPen kullanırken, yazı ve link gibi metadatalar yakalayıp, bunları uygulama dışına aktarabilir ve ekran görüntülerini kolaylıkla kırpabilirsiniz. SPen'i hedef view'ınız yakınına getirip, yan tuşa basarak Pen Mode'u seçtiğinizde görüntülenen ekrandan metadata toplamak için çizim yapabilirsiniz. Basit ekran görüntüsü yakalama işlevlerine ek olarak, ekranda gösterilen içerikten veya uygulamalar tarafından sağlanan bilgilendirmelerden veri toplayabilirsiniz. Bu veriler text hâline dönüştürülebilir. Kırpma işlemi yapılarak elde edilmiş içerikleri arayabilir veya seçili yazıları başka uygulamalara gönderebilirsiniz. Aynı zamanda PinBoard uygulaması ile bu kırpılmış içerikleri yönetebilirsiniz.

SPen ile yapılan kırpma işlemi sonucu ortaya çıkan veriden resimler ve yazılar dışa alınabilir. Fakat uygulama eğer custom view'lar kullanıyorsa ve bu viewlara ait bazı verilerin dışarıya alınması isteniyorsa bu mümkün olmayacaktır. Look api aynı zamanda dışa alınan seçimlere extra bilgi girişi yapabilme imkanı da sunabilmektedir. SmartClip işlevi seçilen viewlara direk olarak metatag ekleyebilme imkanı sunduğu gibi metadata ekleyebilmek için ekran kırpıldığında girilecek bir callback'le bu işlemi yönetebilir.

 

 

 SmartClip Crop işlemi

SmartClip Metadata yönetimi



Amacı : Spen ile diğer uygulamalardan kolaylıkla veri toplanabilmesine ve bunların dışarıya aktarılabilmesine imkan sağlanması.

Look Package işlevlerine alttaki resimleri inceleyerek de göz atabilirsiniz, görseller konunun anlaşılması için her zaman iyidir. :)

Ve bahsettiğim işlevlerden AirButton'un nasıl kullanılacağını anlatan bir sample code ile postu noktalayalım. Kod içerisinde yorumlar ile açıklamaları da elimden geldiğince vermeye çalıştım.

public class AirButtonSimpleActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Set layout for content
        setContentView(R.layout.activity_airbutton_simple);

        // Create views and use it for AirButtons with funcs
        Button btnMenu = (Button) findViewById(R.id.btn_menu);
        createMenuWidgetFromView(btnMenu);
        Button btnRecipient = (Button) findViewById(R.id.btn_recipient);
        createRecipientListWidgetFromView(btnRecipient);
        Button btnImage = (Button) findViewById(R.id.btn_image);
        createImageListWidgetFromView(btnImage);
        Button btnText = (Button) findViewById(R.id.btn_text);
        createTextListWidgetFromView(btnText);

        // Notify user
        Toast.makeText(this, "Please hover and press the S-pen side-button on each button", Toast.LENGTH_SHORT).show();
    }

    // When an item selected using Spen write item's index to screen
    private ItemSelectListener mCallback = new ItemSelectListener() {
        public void onItemSelected(View arg0, int arg1, Object arg2) {
            Toast.makeText(AirButtonSimpleActivity.this, "Item index = " + arg1, Toast.LENGTH_SHORT).show();
        }
    };

    // Create AirButton for image list using arg view
    // Set AirButton props
    public SlookAirButton createImageListWidgetFromView(View v) {

        SlookAirButton airButtonWidget = new SlookAirButton(v, getAdapterImageList(), SlookAirButton.UI_TYPE_LIST);

        airButtonWidget.setItemSelectListener(mCallback);
        airButtonWidget.setGravity(SlookAirButton.GRAVITY_LEFT);
        airButtonWidget.setDirection(SlookAirButton.DIRECTION_UPPER);
        airButtonWidget.setPosition(0, -50);

        return airButtonWidget;
    }

    // Create AirButton for text list using arg view
    // Set AirButton props
    public SlookAirButton createTextListWidgetFromView(View v) {
        SlookAirButton airButtonWidget = new SlookAirButton(v, getAdapterStringList(), SlookAirButton.UI_TYPE_LIST);
        airButtonWidget.setItemSelectListener(mCallback);

        airButtonWidget.setPosition(0, 50);

        return airButtonWidget;
    }

    // Create AirButton for text with image list using arg view
    // Set AirButton props
    public SlookAirButton createRecipientListWidgetFromView(View v) {
        SlookAirButton airButtonWidget = new SlookAirButton(v, getAdapterRecipientList(), SlookAirButton.UI_TYPE_LIST);
        airButtonWidget.setDirection(SlookAirButton.DIRECTION_LOWER);
        airButtonWidget.setItemSelectListener(mCallback);

        return airButtonWidget;
    }

    // Create AirButton for menu selection using arg view
    // Set AirButton props
    public SlookAirButton createMenuWidgetFromView(View v) {
        SlookAirButton airButtonWidget = new SlookAirButton(v, getAdapterMenuList(), SlookAirButton.UI_TYPE_MENU);
        airButtonWidget.setDirection(SlookAirButton.DIRECTION_RIGHT);
        airButtonWidget.setItemSelectListener(mCallback);

        return airButtonWidget;
    }

    // Create adapter of imageList
    public SlookAirButtonAdapter getAdapterImageList() {
        ArrayList<AirButtonItem> itemList = new ArrayList<AirButtonItem>();
        itemList.add(new AirButtonItem(getResources().getDrawable(R.drawable.pic01), null, null));
        itemList.add(new AirButtonItem(getResources().getDrawable(R.drawable.pic02), null, null));
        itemList.add(new AirButtonItem(getResources().getDrawable(R.drawable.pic03), null, null));
        itemList.add(new AirButtonItem(getResources().getDrawable(R.drawable.pic04), null, null));
        itemList.add(new AirButtonItem(getResources().getDrawable(R.drawable.pic05), null, null));
        itemList.add(new AirButtonItem(getResources().getDrawable(R.drawable.pic06), null, null));
        itemList.add(new AirButtonItem(getResources().getDrawable(R.drawable.pic07), null, null));
        itemList.add(new AirButtonItem(getResources().getDrawable(R.drawable.pic08), null, null));
        itemList.add(new AirButtonItem(getResources().getDrawable(R.drawable.pic09), null, null));
        itemList.add(new AirButtonItem(getResources().getDrawable(R.drawable.pic10), null, null));
        itemList.add(new AirButtonItem(getResources().getDrawable(R.drawable.pic11), null, null));
        itemList.add(new AirButtonItem(getResources().getDrawable(R.drawable.pic12), null, null));

        return new SlookAirButtonAdapter(itemList);
    }

    // Create adapter of textList
    public SlookAirButtonAdapter getAdapterStringList() {
        ArrayList<AirButtonItem> stringList = new ArrayList<AirButtonItem>();
        stringList.add(new AirButtonItem(null, "You can come here at 5:00", null));
        stringList.add(new AirButtonItem(null, "Why?", null));
        stringList.add(new AirButtonItem(null, "Please send your e-mail address", null));
        stringList.add(new AirButtonItem(null, "Ok. No problem", null));
        stringList.add(new AirButtonItem(null, "kkkkkkk", null));
        stringList.add(new AirButtonItem(null, "I'm a boy", null));
        stringList.add(new AirButtonItem(null, "You are a girl", null));
        stringList.add(new AirButtonItem(null, "How about this weekend?", null));
        stringList.add(new AirButtonItem(null, "You are so sexy!", null));
        stringList.add(new AirButtonItem(null, "Haha it's really good", null));
        stringList.add(new AirButtonItem(null, "What you really want to?", null));
        stringList.add(new AirButtonItem(null, "I wanna watch movie", null));
        stringList.add(new AirButtonItem(null, "No...", null));
        stringList.add(new AirButtonItem(null, "ASAP", null));
        stringList.add(new AirButtonItem(null, "Really? I can't agree with you", null));

        return new SlookAirButtonAdapter(stringList);
    }

    // Create adapter of textWithImageList
    public SlookAirButtonAdapter getAdapterRecipientList() {
        ArrayList<AirButtonItem> itemList = new ArrayList<AirButtonItem>();
        itemList.add(new AirButtonItem(getResources().getDrawable(R.drawable.recipient), "Alexander Hamilton", null));
        itemList.add(new AirButtonItem(getResources().getDrawable(R.drawable.recipient), "Oliver Wolcott Jr", null));
        itemList.add(new AirButtonItem(getResources().getDrawable(R.drawable.recipient), "Samuel Dexter", null));
        itemList.add(new AirButtonItem(getResources().getDrawable(R.drawable.recipient), "Albert Gallatin", null));
        itemList.add(new AirButtonItem(getResources().getDrawable(R.drawable.recipient), "George W. Campbell", null));
        itemList.add(new AirButtonItem(getResources().getDrawable(R.drawable.recipient), "Richard Rush", null));
        itemList.add(new AirButtonItem(getResources().getDrawable(R.drawable.recipient), "Richard Rush", null));
        itemList.add(new AirButtonItem(getResources().getDrawable(R.drawable.recipient), "William J. Duane", null));
        itemList.add(new AirButtonItem(getResources().getDrawable(R.drawable.recipient), "Thomas Ewing", null));
        itemList.add(new AirButtonItem(getResources().getDrawable(R.drawable.recipient), "George M. Bibb", null));
        itemList.add(new AirButtonItem(getResources().getDrawable(R.drawable.recipient), "William M. Meredith", null));
        itemList.add(new AirButtonItem(getResources().getDrawable(R.drawable.recipient), "Howell Cobb", null));
        itemList.add(new AirButtonItem(getResources().getDrawable(R.drawable.recipient), "Salmon P. Chase", null));

        return new SlookAirButtonAdapter(itemList);
    }

    // Create adapter of menuList
    public SlookAirButtonAdapter getAdapterMenuList() {
        ArrayList<AirButtonItem> itemList = new ArrayList<AirButtonItem>();
        itemList.add(new AirButtonItem(getResources().getDrawable(R.drawable.ic_menu_add), "Add", null));
        itemList.add(new AirButtonItem(getResources().getDrawable(R.drawable.ic_menu_archive), "Help", null));
        itemList.add(new AirButtonItem(getResources().getDrawable(R.drawable.ic_menu_edit), "Edit", null));
        itemList.add(new AirButtonItem(getResources().getDrawable(R.drawable.ic_menu_help), "Help", null));
        ;

        return new SlookAirButtonAdapter(itemList);
    }
}

Samsung Smart App Challenge 2013 for Galaxy Note

This article is sponsored by Samsung