Aim: To know about GPU in Android 


Topic Covered:

  • What is GPU
  • Role of GPU
  • Rendering GPU  graph
  • Rendering Graph Explained 
  • Color Indications and its meaning



What is GPU:

GPU is graphical processing unit in the android operating system Since from the smartphone revolution with extensive use of the graphics in the normall phone led to evolution of the GPU
It is consider as the soul of the CPU.
GPU performs the various graphical and transformation calculation so the CPU does not have to burden by these operations.
GPU is mostly available in stand alone form with chip only where CPU has multiple cores.
Most popular brands manufacturing the Nvidea's Gforce and Adreno by qualcomm.


Rendering the GPU Profiling Graph :

  1. On your mobile device, go to Settings and Developer Options.
  2. In the Monitoring section, select Profile GPU Rendering.
  3. In the Profile GPU Rendering popup, choose On screen as bars to overlay the graphs on the screen of your mobile device.
  4. Go to the app that you want to profile.



 





Rendering Graph Explained :


  • After enabling the profile gpu rendering it will start to show the graph in the form of bars.
  • Bar graphs will be in the colored format of blue red green where as each color signifies the time taken to render the graphics
  • Vertical bar represents rendering of one frame against the time

Color Indications and its meaning :

  • Blue 
The blue section of the bar represents the time used to create and update the View's display lists. If this part of the bar is tall, there may be a lot of custom view drawing, or a lot of work in onDraw methods.

  • Purple
Android 4.0 and higher: The purple section of the bar represents the time spent transferring resources to the render thread.







  • Red
The red section of the bar represents the time spent by Android's 2D renderer issuing commands to OpenGL to draw and redraw display lists. The height of this bar is directly proportional to the sum of the time it takes each display list to execute—more display lists equals a taller red bar


  • Orange

The orange section of the bar represents the time the CPU is waiting for the GPU to finish its work. If this bar gets tall, it means the app is doing too much work on the GPU.



Aim :

This tutorial mainly aims to give the recommended way for doing the HTTP connection for new api changes after API 23.
As per the new changes Apache classes are removed from the API23 so this post gives one of the way by using HttpURLConnection class.


Topics Covered :

-How to make connection using URLCoonection classes
-Setting Properties
-Making request
-Getting the Response.
-Code Snippep



-How to make connection using URLCoonection classes:

Obtain the URL Connection by making URL.openconnection()

The stream can be called by URLConnection.getInputStream()

Use the Stream classes like inputStream or Buffer reader to read the stream


-Setting Properties
 Various Properties can be set in following way
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("USER-AGENT", "Mozilla/5.0");
connection.setRequestProperty("ACCEPT-LANGUAGE", "en-US,en;0.5");
connection.setDoOutput(true); 
-Making request
   

URL url;
    HttpURLConnection urlConnection = null;
    try {
        url = new URL("http://www.yoursite.com");

        urlConnection = (HttpURLConnection) url
                .openConnection();

        InputStream in = urlConnection.getInputStream();

        InputStreamReader isw = new InputStreamReader(in);

        int data = isw.read();
        while (data != -1) {
            char current = (char) data;
            data = isw.read();
            System.out.print(current);
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (urlConnection != null) {
            urlConnection.disconnect();
        }    
    }

wfrrsdfa








Aim: To know the use of selector and its implementation 

Topics Covered:
-What is Selector
-How to write
-Implementation of Selectors
-How to Apply to Button


What is selector :
Android allows different states of the button to be changed as per the users action to identify 
various action getting performed on the Button by modifying it visual appearance .The state are
pressed,selected and Normall the visual representation of these changes is manged through the Selectors  .
Selectors are basically xml part of the android project which are written in xml and placed in the drawable folder of the project.


How to write :
Selectors are written in xml and are placed in the draw-able directory of the project. 

Implementation of Selectors:


 



    
    
    




Here in this case

    



this line will pick the image with name numpad_button_bg_selected n when the state of the button is selected similarly it will work for rest of the states.



How to Apply to Button:


The Selector which you have written can be applied to button in following way
   
   



This is how you can implement the selector for the button in android it can be implemented in simillar way for image view and imagebutton as well.


Understanding SQLITE DataBase in Android

Aim: TO know about SQLITE database in android Application.

Topics: Introduction to SQLITE
             Architecture of SQLITE
             Creating Simple Model
             OPerations in SQLITE Database :
             CodeSnnipets


Introduction to SQLITE :

Sqlite is OPen-Source portable database in android .It is an inbuilt database which can be accessible
from the device OS without any external libraries .
These support many operation as like normal database like upgrade,create ,delete,insert etc.
there are certain set of stander ed API to query the database which we will cover further in the post .


Architecture of SQLITE :



The Figure shows the architecture of the SQLITE database in android which is comprise of various parts like CORE,SQL Compiler,Backend.

The SQLITE database is in the package android.database.sqlite.*

If your application creates a database, this database is by default saved in the directoryDATA/data/APP_NAME/databases/FILENAME.
SQLiteOpenHelper class provides the functionality to use the SQLite database.


Creating Simple Model :
For creating and accessing the SQLite database a standard step is to Extend a class with SQLiteOpenHelper.After that have to provide the implementation of onCreate() and onUpgrade() methods of SQLiteOpenHelper class.

package sqlite.blazin.in.sqlite;
/**
 * Created by bhushan on 29/2/16.
 */
public class Contact {
    int _id;
    String _name;
    String _phone_number;

    public Contact() {
    }

    public Contact(int id, String name, String _phone_number) {
        this._id = id;
        this._name = name;
        this._phone_number = _phone_number;
    }

    public Contact(String name, String _phone_number) {
        this._name = name;
        this._phone_number = _phone_number;
    }

    public int getID() {
        return this._id;
    }

    public void setID(int id) {
        this._id = id;
    }

    public String getName() {
        return this._name;
    }

    public void setName(String name){
        this._name = name;
    }

    public String getPhoneNumber(){
        return this._phone_number;
    }

    public void setPhoneNumber(String phone_number){
        this._phone_number = phone_number;
    }
}

This the Model class for making the contact object which are going to use for data operation. Now this is how the way is to write the OPENHelper Class for the database related operations
package sqlite.blazin.in.sqlite;

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

import java.util.ArrayList;
import java.util.List;

/**
 * Created by bhushan on 29/2/16.
 */
public class DatabaseHandler extends SQLiteOpenHelper {
    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "contactsManager";
    private static final String TABLE_CONTACTS = "contacts";
    private static final String KEY_ID = "id";
    private static final String KEY_NAME = "name";
    private static final String KEY_PH_NO = "phone_number";

    public DatabaseHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        //3rd argument to be passed is CursorFactory instance
    }

    // Creating Tables
    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
                + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"
                + KEY_PH_NO + " TEXT" + ")";
        db.execSQL(CREATE_CONTACTS_TABLE);
    }

    // Upgrading database
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Drop older table if existed
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);

        // Create tables again
        onCreate(db);
    }

    // code to add the new contact
    void addContact(Contact contact) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME, contact.getName()); // Contact Name
        values.put(KEY_PH_NO, contact.getPhoneNumber()); // Contact Phone

        // Inserting Row
        db.insert(TABLE_CONTACTS, null, values);
        //2nd argument is String containing nullColumnHack
        db.close(); // Closing database connection
    }

    // code to get the single contact
    Contact getContact(int id) {
        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
                        KEY_NAME, KEY_PH_NO }, KEY_ID + "=?",
                new String[] { String.valueOf(id) }, null, null, null, null);
        if (cursor != null)
            cursor.moveToFirst();

        Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
                cursor.getString(1), cursor.getString(2));
        // return contact
        return contact;
    }

    // code to get all contacts in a list view
    public List getAllContacts() {
        List contactList = new ArrayList();
        // Select All Query
        String selectQuery = "SELECT  * FROM " + TABLE_CONTACTS;

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        // looping through all rows and adding to list
        if (cursor.moveToFirst()) {
            do {
                Contact contact = new Contact();
                contact.setID(Integer.parseInt(cursor.getString(0)));
                contact.setName(cursor.getString(1));
                contact.setPhoneNumber(cursor.getString(2));
                // Adding contact to list
                contactList.add(contact);
            } while (cursor.moveToNext());
        }

        // return contact list
        return contactList;
    }

    // code to update the single contact
    public int updateContact(Contact contact) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME, contact.getName());
        values.put(KEY_PH_NO, contact.getPhoneNumber());

        // updating row
        return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?",
                new String[] { String.valueOf(contact.getID()) });
    }

    // Deleting single contact
    public void deleteContact(Contact contact) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(TABLE_CONTACTS, KEY_ID + " = ?",
                new String[] { String.valueOf(contact.getID()) });
        db.close();
    }

    // Getting contacts Count
    public int getContactsCount() {
        String countQuery = "SELECT  * FROM " + TABLE_CONTACTS;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(countQuery, null);
        cursor.close();

        // return count
        return cursor.getCount();
    }

}
Your main Activity class looks like this.
package sqlite.blazin.in.sqlite;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import java.util.List;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

         Button insert,Print;
        final TextView info;


        insert=(Button)findViewById(R.id.btnInsert);
        Print=(Button)findViewById(R.id.btnPrint);
        info=(TextView)findViewById(R.id.tvInfo);

        final DatabaseHandler databaseHelper = new DatabaseHandler(this);

        insert.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Inserting Contacts
                Log.d("Insert: ", "Inserting ..");
                databaseHelper.addContact(new Contact("BlazinRavi", "9100000000"));
                databaseHelper.addContact(new Contact("BlazinGanesh", "88888888"));
                databaseHelper.addContact(new Contact("Amnda", "56897566"));
                databaseHelper.addContact(new Contact("stephy", "123456"));
                Toast.makeText(MainActivity.this,"DATA INserted ",Toast.LENGTH_SHORT).show();
            }
        });



        Print.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // Reading all contacts
                Log.d("Reading: ", "Reading all contacts..");
                StringBuilder sb= new StringBuilder();

                List contacts = databaseHelper.getAllContacts();

                for (Contact cn : contacts) {
                    String log = "Id: "+cn.getID()+" ,Name: " + cn.getName() + " ,Phone: " +
                            cn.getPhoneNumber();
                    // Writing Contacts to log
                 sb.append(log);
                    sb.append("\n");
                    sb.append("\n");
                    Log.d("Name: ", log);
                }
                info.setText(sb);
            }
        });
    }
}
This is how the Code looks when we run