Tuesday, December 29, 2015

Cara Membuat Custom Alert Dialog Android

tutorial cara membuat custom alert dialog android, alert dialog dengan button, alert dialog radiogroup, alert dialog radiobutton, alert dialog imageview, alert dialog edittext, mengatur tampilan alert dialog. Pada tutorial sebelumnya, ieuwelah telah membahas penggunaan Alert Dialog secara umum [cara membuat alert dialog]. Untuk tutorial kali ini, ieuwelah masih akan membahas mengenai penggunaan Alert Dialog pada Android. Namun, Alert Dialog yang akan digunakan kali ini adalah Alert Dialog dengan tampilan custom yang di desain sendiri. Selain untuk menampilkan informasi berupa text, alert dialog juga dapat dimanfaatkan untuk menampilkan inputan seperti dengan menggunakan RadioGroup dan EditText, ataupun menampilkan informasi lain dengan menggunakan gambar (ImageView) pada Alert Dialog. Berikut cara membuat custom alert dialog pada aplikasi android:

Langkah 1
Buatlah sebuah Project


Langkah 2
Edit Layout utama atau mainactivity.xml dengan kode berikut:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="ieuwelah.com.customalertdialog.MainActivity" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Alert Dialog RadioButton" />

            <Button
                android:id="@+id/btnRG"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Cek" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Alert Dialog EditText" />

            <Button
                android:id="@+id/btnET"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Cek" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Alert Dialog ImageView" />

            <Button
                android:id="@+id/btnIV"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Cek" />
        </LinearLayout>
    </LinearLayout>

</RelativeLayout>

Langkah 3
Tambahkan 3 Layout baru dengan nama, dialog_radiogroup, dialog_edittext, dan dialog_imageview. Lalu tambahkan kode berikut pada masing-masing layout.
dialog_radiogroup
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <RadioGroup
        android:id="@+id/rg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <RadioButton
            android:id="@+id/rb1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Pilihan 1"
            android:checked="true" />

        <RadioButton
            android:id="@+id/rb2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Pilihan 2"  />
      
    </RadioGroup>

    <Button
        android:id="@+id/btnRG_ok"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Pilih" />

</LinearLayout>

dialog_edittext
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/edt1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="Nama"/>

    <EditText
        android:id="@+id/edt2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="Alamat"/>
    
    <Button
        android:id="@+id/btnET_ok"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="OK" />

</LinearLayout>

dialog_imageview
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/img1"
        android:src="@drawable/ic_launcher"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_gravity="center"/>
    
    <Button
        android:id="@+id/btnIV_ok"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="OK" />

</LinearLayout>

Langkah 4
Buka Class Utama atau MainActivity lalu tuliskan kode program berikut:
package ieuwelah.com.customalertdialog;

import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;

public class MainActivity extends Activity {
    Button btnRG, btnET, btnIV, btnRG_ok, btnET_ok, btnIV_ok;
    RadioGroup rg;
    RadioButton rb1, rb2, pilihan;
    EditText edt1, edt2;
    ImageView img1;
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       
        btnRG = (Button)findViewById(R.id.btnRG);
        btnET = (Button)findViewById(R.id.btnET);
        btnIV = (Button)findViewById(R.id.btnIV);
       
        btnRG.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                alertDialog_RG();
            }
        });
       
        btnET.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                alertDialog_ET();
            }
        });
       
        btnIV.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                alertDialog_IV();
            }
        });
    }
   
    public void alertDialog_RG() {
        // TODO Auto-generated method stub
        final Dialog dialog = new Dialog(MainActivity.this);
        dialog.setContentView(R.layout.dialog_radiogroup);
        dialog.setCancelable(true);
        dialog.setTitle("Alert Dialog RadioGroup");
        rg = (RadioGroup)dialog.findViewById(R.id.rg);
        rb1 = (RadioButton)dialog.findViewById(R.id.rb1);
        rb2 = (RadioButton)dialog.findViewById(R.id.rb2);
        btnRG_ok = (Button)dialog.findViewById(R.id.btnRG_ok);
        dialog.show();
   
        btnRG_ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                int selectedId = rg.getCheckedRadioButtonId();
                pilihan = (RadioButton)dialog.findViewById(selectedId);
                Toast.makeText(MainActivity.this, pilihan.getText().toString(), Toast.LENGTH_LONG).show();
                dialog.cancel();
            }
        });
    }
   
    public void alertDialog_ET() {
        // TODO Auto-generated method stub
        final Dialog dialog = new Dialog(MainActivity.this);
        dialog.setContentView(R.layout.dialog_edittext);
        dialog.setCancelable(true);
        dialog.setTitle("Alert Dialog EditText");
        edt1 = (EditText)dialog.findViewById(R.id.edt1);
        edt2 = (EditText)dialog.findViewById(R.id.edt2);
        btnET_ok = (Button)dialog.findViewById(R.id.btnET_ok);
        dialog.show();
   
        btnET_ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Toast.makeText(MainActivity.this, edt1.getText().toString() + " dari " + edt2.getText().toString(), Toast.LENGTH_LONG).show();
                dialog.cancel();
            }
        });
    }
   
    public void alertDialog_IV() {
        // TODO Auto-generated method stub
        final Dialog dialog = new Dialog(MainActivity.this);
        dialog.setContentView(R.layout.dialog_imageview);
        dialog.setCancelable(true);
        dialog.setTitle("Alert Dialog ImageView");
        btnIV_ok = (Button)dialog.findViewById(R.id.btnIV_ok);
        dialog.show();
       
        btnIV_ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                dialog.cancel();
            }
        });
    }
}

Penjelasan:
Pada Class ini terdapat 3 buah Button untuk menampilkan masing-masing custom dialog. Button pertama btnRG ketika di klik akan mengeksekusi procedure alertDialog_RG().
alertDialog_RG akan menampilkan Alert Dialog dimana, Alert Dialog ini menggunakan tampilan yang telah dibuat pada layout dialog_radiogroup. Begitupun untuk alert dialog lainnya.

Langkah 5
Running program dan klik masing-masing Button, maka akan muncul tampilan Alert Dialog berdarkan tampilan layout yang telah dibuat sebelumnya.

membuat custom alert dialog android
Alert Dialog RadioGroup
membuat custom alert dialog android
Alert Dialog EditText
membuat custom alert dialog android
AlertDialogImageView
Dengan begini, penggunaan Alert Dialog dapat dimanfaatkan untuk berbagai kebutuhan. Sekian untuk tutorial ieuwelah kali ini. Terimakasih, Semoga Bermanfaat :)

Monday, December 28, 2015

Cara Membuat Alert Dialog Keluar Pada Aplikasi Android

android tutorial ieuwelah

tutorial cara membuat alert dialog pesan keluar pada aplikasi android. Selain menggunakan Toast [tutorial cara menampilkan pesan toast android] cara lain untuk memberikan informasi kepada user adalah dengan menggunakan Alert Dialog. Alert Dialog adalah sebuah tampilan informasi yang muncul kepada user yang biasanya merupakan pesan informasi, konfirmasi, ataupun untuk mengisi inputan tertentu. Secara umum tampilan Alert Dialog pada Android adalah sebagai berikut:

membuat alert dialog pada aplikasi android

Pada umumnya alert dialog digunakan untuk menampilkan pilihan konfirmasi pada action tertentu. Untuk tutorial kali ini, ieuwelah akan mencoba membuat Alert Dialog untuk melakukan konfirmasi ketika user menekan back button untuk keluar aplikasi. Berikut cara membuat alert dialog konfirmasi keluar pada aplikasi android:

Langkah 1
Buatlah sebuah Project 

membuat alert dialog pada aplikasi android

Langkah 2
Pada MainActivity tambahkan method onBackPressed() dengan kode program berikut ini:
package ieuwelah.com.alertdialogexit;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
 
    public void onBackPressed(){ 
      AlertDialog.Builder builder = new AlertDialog.Builder(this);
      //pesan keluar
         builder.setMessage("Keluar dari Aplikasi ?")
                .setCancelable(false)
                //Button Keluar
                .setPositiveButton("Keluar", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        finish();       
                        moveTaskToBack(true);
                         System.exit(0);
                    }
                })
                //Button Batal
                .setNegativeButton("Tidak", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                         dialog.cancel();
                    }
                });
         AlertDialog alert = builder.create();
         alert.show();
    }
}

penjelasan:
Method onBackPressed() adalah method yang akan dijalankan ketika user menekan button back pada ponsel Android. Pada method ini terdapat perintah untuk menampilkan alert dialog konfirmasi.

Langkah 3
Jalankan program maka akan muncul Alert Dialog ketika user menekan back button. Tekan Tidak untuk tetap berada pada aplikasi, dan tekan Keluar untuk keluar dari aplikasi.

membuat alert dialog pada aplikasi android

Cukup mudah bukan cara membuat alert konfimasi pada Android ? Alert Dialog juga bisa Anda gunakan untuk melakukan perintah lainnya seperti ketika user akan menyimpan data di database SQLite [cara membuat aplikasi CRUD dengan SQLite] ataupun keperluan lainnya. Selain itu tampilan Alert Dialog bisa pula disesuaikan dengan kebutuhan, seperti menambahkan EditText, RadioButton, ImageView pada Alert Dialog, ataupun widget lainnya [cara membuat custom alert dialog android].

Sekian untuk tutorial kali ini. Terimakasih, Semoga Bermanfaat. :)

Sunday, December 27, 2015

Fungsi dan Cara Penggunaan SQLite OnUpgrade Untuk Update Aplikasi Android

cara penggunaan sqlite onupgrade, fungsi sqlite onupgrade dan penggunaan sqlite onupgrade saat update aplikasi android.  SQLite merupakan database management system yang populer untuk penyimpanan lokal / client pada aplikasi perangkat lunak. SQLite juga dapat diimplementasikan untuk database internal pada aplikasi berbasis Android. Karena data-data SQLite ini tersimpan pada perangkat lokal / client maka timbul sebuah pertanyaan ketika terjadi update / perubahan aplikasi. Apakah data-data pada aplikasi sebelumnya akan hilang ketika aplikasi diupdate ? Bagaimana cara mengupdate data-data pada aplikasi dulu dengan data update terbaru ? Bagaimana cara menambah, menghapus, atau melalukan perubahan lainnya pada table aplikasi ? Nah mungkin seperti itulah pertanyaan-pertanyaan yang akan dicoba dijawab pada tutorial ieuwelah kali ini.

Sebenarnya pada SQLite Android telah terdapat suatu method yang bisa digunakan untuk melakukan perubahan data pada database SQLite. Method itu ialah onUpgrade(). Secara default, struktur SQLite pada Android adalah sebagai berikut:
package ieuwelah.com.latihansqlite1;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBAdapter extends SQLiteOpenHelper {
private SQLiteDatabase db;

public DBAdapter(Context context) {
super(context, database_name, null, database_version);
// TODO Auto-generated constructor stub
}

@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}

Untuk lebih mempermudah pemahaman, buatlah sebuah Project yang terdiri dari 2 Class. 1 Class MainActivity dan 1 lagi Class untuk pengolahan database SQLite, beri nama DBAdapter. 


Dalam kasus ini, saya mencoba membuat sebuah aplikasi dengan struktur database SQLite berikut ini:
Class DBAdapter:
package fajarms.appupdate;

import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBAdapter extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "dbapp.db";
public static final int DATABASE_VERSION = 1;
public static final String TABLE_MAHASISWA = "tbl_mhs";
public static final String ROW_ID = "_id";
public static final String ROW_NAMA = "nama";
public static final String ROW_JENIS_KELAMIN = "jk";
public static final String CREATE_TABLE_MAHASISWA = "CREATE TABLE " + TABLE_MAHASISWA
+ " ( " + ROW_ID + " TEXT, " + ROW_NAMA + " TEXT, " + ROW_JENIS_KELAMIN + " TEXT);";

public DBAdapter(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
}

@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(CREATE_TABLE_MAHASISWA);

ContentValues isiData = new ContentValues();
isiData.put(ROW_ID, "1");
isiData.put(ROW_NAMA, "Ani");
isiData.put(ROW_JENIS_KELAMIN, "P");
db.insert(TABLE_MAHASISWA, null, isiData);

isiData.put(ROW_ID, "2");
isiData.put(ROW_NAMA, "Bude");
isiData.put(ROW_JENIS_KELAMIN, "L");
db.insert(TABLE_MAHASISWA, null, isiData);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS " + TABLE_MAHASISWA);
onCreate(db);
}
}


Catatan:
DATABASE_VERSION pada aplikasi ini adalah = 1
Terdiri dari 1 Table dengan nama "tbl_mhs" dengan field _id, nama, dan jk
Dimana ketika dijalankan, data pada "tbl_mhs" adalah sebagai berikut:

penggunaan onupgrade update sqlite android

Kita asumsikan bahwa data-data diatas adalah data pada aplikasi versi pertama. Lalu kemudian terjadi perubahan pada aplikasi yang kita buat. Bagaimana cara mengupdate data-data pada aplikasi sebelumnya dengan data update terbaru ?
Langkah 1
Ubahlah DATABASE_VERSION menjadi = 2
public static final int DATABASE_VERSION = 2;

Langkah 2
Tambah / Insert data baru.
                        isiData.put(ROW_ID, "3");
isiData.put(ROW_NAMA, "Cepi");
isiData.put(ROW_JENIS_KELAMIN, "L");
db.insert(TABLE_MAHASISWA, null, isiData);

Langkah 3
Tambahkan baris kode berikut pada method onUpgrade()
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS " + TABLE_MAHASISWA);
onCreate(db);
}

Langkah 4
Running aplikasi, maka data pada "tbl_mhs" akan bertambah menjadi 3 record.

penggunaan onupgrade update sqlite android

Bagaimana cara menambah, menghapus, atau melalukan perubahan lainnya pada table aplikasi ?

Langkah 1
Ubahlah DATABASE_VERSION menjadi = 3
public static final int DATABASE_VERSION = 3;

Langkah 2
Tambahkan variable untuk field baru "ket"
public static final String ROW_KETERANGAN = "ket";

Langkah 3
Tambahkan query ALTER
public static final String ALTER_TABLE_MAHASISWA = "ALTER TABLE " + TABLE_MAHASISWA
+ " ADD COLUMN " + ROW_KETERANGAN + " TEXT;";

Langkah4
Tambahkan baris kode berikut pada method onUpgrade()
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL(ALTER_TABLE_MAHASISWA);
}

Sehingga kode program seluruhnya menjadi seperti berikut ini:
package fajarms.appupdate;

import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBAdapter extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "dbapp.db";
public static final int DATABASE_VERSION = 3;
public static final String TABLE_MAHASISWA = "tbl_mhs";
public static final String ROW_ID = "_id";
public static final String ROW_NAMA = "nama";
public static final String ROW_JENIS_KELAMIN = "jk";
public static final String ROW_KETERANGAN = "ket";

public static final String CREATE_TABLE_MAHASISWA = "CREATE TABLE " + TABLE_MAHASISWA
+ " ( " + ROW_ID + " TEXT, " + ROW_NAMA + " TEXT, " + ROW_JENIS_KELAMIN + " TEXT);";

public static final String ALTER_TABLE_MAHASISWA = "ALTER TABLE " + TABLE_MAHASISWA
+ " ADD COLUMN " + ROW_KETERANGAN + " TEXT;";

public DBAdapter(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
}

@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(CREATE_TABLE_MAHASISWA);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL(ALTER_TABLE_MAHASISWA);
}
}


Langkah5
Running aplikasi, maka data pada "tbl_mhs" akan bertambah menjadi 4 field dengan data yang sama.

penggunaan onupgrade update sqlite android

Nah bagaimana ? Sudah mengerti tentang method onUpgrade pada SQLite ? Secara umum method ini digunakan ketika terjadi perubahan data atau struktur pada database ketika aplikasi melakukan perubahan (update). Hanya saja bagaimana jika aplikasi yang kita buat telah melakukan update sebanyak 3 kali atau lebih ? Sedangkan beberapa pengguna masih menggunakan versi pertama. Apakah aplikasi versi pertama bisa langsung diupdate ke aplikasi versi terakhir (3 atau lebih) ? Pembahasan ini akan ieuwelah bahas pada tutorial selanjutnya.

Sekian untuk tutorial kali ini. Terimakasih, Semoga Bermanfaat :)

Tuesday, May 12, 2015

Cara Membuat Class Baru di Android

android tutorial ieuwelah
cara membuat class baru di android. Tutorial ieuwelah.com kali ini akan membahas mengenai pembuatan class baru pada aplikasi android. Sebenarnya caranya sangatlah mudah, namun bagi Anda yang baru mempelajari pemrograman Android mungkin akan mengalami sedikit kendala. Apalagi untuk Anda yang mempelajarinya secara otodidak (seperti saya sendiri). Class merupakan suatu blueprint atau cetakan untuk menciptakan suatu instant dari  object. class juga merupakan grup suatu object dengan kemiripan attributes atau properties, behaviour dan relasi ke object lain. Berikut cara membuat class baru pada android:

Langkah 1
Klik kanan pada Folder scr lalu pilih New > Class

membuat class baru di android

Langkah 2
Beri nama Class sesuai dengan fungsi dari class yang akan digunakan. Pada contoh ini nama class adalah NamaClass.


membuat class baru di android

Langkah 3
Jika Class baru yang dibuat berfungsi sebagai activity. Activity adalah komponen pada aplikasi Android yang menampilkan dan mengatur halaman aplikasi sebagai tempat interaksi antara pengguna dengan aplikasi. Maka class ini harus ditambahkan pada AndroidManifest.xml. Caranya, klik ganda pada AndroidManifest.xml lalu tambahkan baris kode berikut diakhir </activity>

membuat class baru di android

Tetapi jika class yang dibuat hanya berisi fungsi-fungsi khusus (tidak menangani tampilan) maka class tersebut tidak perlu ditambahkan pada AndroidManifest.xml.

Harap diingat, jika Anda membuat sebuah Class yang menangani tampilan (activity) maka jangan lupa menambahkan pula layout untuk membuat interface pada class tersebut. Lihat cara membuat layout baru pada aplikasi Android.

Sekian tutorial singkat dari ieuwelah,com kali ini. Terimakasih, semoga bermanfaat :)

TUTIPTRIK TERBARU

© 2014 ieuwelah.com | Published By Kaizen Template | Created By BloggerTheme9
TOP