Tuesday, May 10, 2016

Swap Tabs / ViewPagers in Android

" Jai Saraswati Maa" 
Hi ... Dear All ..Today I am uploading a superb example of  Swap Tabs using View Pagers.
This example you can add with your app to give a look like our Phone Dial App.
I am using Android Studio 1.5.1
Minimun SDK API 19
Target SDK API 23
Please Like us & put your valuable suggestions in comment box.
***** Add Dependency in build.gradle file 
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'

    compile 'com.android.support:appcompat-v7:23.3.0'

    compile 'com.android.support:design:23.3.0'

    compile 'com.android.support:support-v4:23.3.0'}

A. ***** Create your own toolbar 
 My toolbar_lay.xml is as and add this with MainActivity Layout file 

<?xml version="1.0" encoding="utf-8"?><android.support.v7.widget.Toolbar

    xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    android:layout_width="match_parent" android:layout_height="wrap_content"

    android:background="?attr/colorPrimary"

    android:minHeight="?attr/actionBarSize"

    android:fitsSystemWindows="true"

    android:id="@+id/toolBar"

    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"    >
</android.support.v7.widget.Toolbar>

B. Output screen will be like this
a.     

b.    
    

c.
    

C. MainActivity.java is as 
1. Java Code 
package com.exam.ravi.swipetabsex1;
import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;

public class MainActivity extends AppCompatActivity {
    Toolbar toolbar;
    TabLayout tabLayout;
    ViewPager viewPager;
    PagerAdapter pagerAdapter;
    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        toolbar = (Toolbar) findViewById(R.id.toolBar);
        setSupportActionBar(toolbar);
        tabLayout = (TabLayout) findViewById(R.id.tabLay);
        viewPager = (ViewPager) findViewById(R.id.viewpager);
        pagerAdapter = new PagerAdapter(getSupportFragmentManager());
        pagerAdapter.addFrag(new Fragment1(), "Ravi");
        pagerAdapter.addFrag(new Fragment2(), "Kumar");
        pagerAdapter.addFrag(new Fragment3(), "Godara");
        viewPager.setAdapter(pagerAdapter);
        tabLayout.setupWithViewPager(viewPager);
    }
}

2. Its Layout file activity_main.xml is as 

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout    xmlns:app="http://schemas.android.com/apk/res-auto"

    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"

    tools:context="com.exam.ravi.swipetabsex1.MainActivity">
<android.support.design.widget.AppBarLayout

    android:layout_height="wrap_content"

    android:layout_width="match_parent"

    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" >
    <include        android:layout_height="wrap_content"

        android:layout_width="match_parent"

        layout="@layout/toolbar_lay"        ></include>
    <android.support.design.widget.TabLayout

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:id="@+id/tabLay"

        app:tabMode="fixed"        app:tabGravity="fill">
    </android.support.design.widget.TabLayout>
</android.support.design.widget.AppBarLayout>
    <android.support.v4.view.ViewPager

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:id="@+id/viewpager">

    </android.support.v4.view.ViewPager>
</RelativeLayout>

D. View Pager Adapter is as PagerAdapter.java

package com.exam.ravi.swipetabsex1;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import java.util.ArrayList;
public class PagerAdapter extends FragmentPagerAdapter {

    ArrayList<Fragment> fragments = new ArrayList<>();
    ArrayList<String> tabTitles = new ArrayList<>();
    public void addFrag(Fragment fragments,String title)
    {
        this.fragments.add(fragments);
        this.tabTitles.add(title);
    }
    public PagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override    public Fragment getItem(int position) {
        return fragments.get(position);
    }

    @Override    public int getCount() {
        return fragments.size();
    }

    @Override    public CharSequence getPageTitle(int position) {
        return tabTitles.get(position);
    }
}

E. Fragments attached with tabs are as 
1. First Fragment Fragment1.java is as 

package com.exam.ravi.swipetabsex1;


import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;


/** * A simple {@link Fragment} subclass. */public class Fragment1 extends Fragment {


    public Fragment1() {
        // Required empty public constructor    }


    @Override

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        return inflater.inflate(R.layout.fragment_fragment1, container, false);
    }

}

2. Second Fragment is as Fragment2.java 

package com.exam.ravi.swipetabsex1;


import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;


/** * A simple {@link Fragment} subclass. */public class Fragment2 extends Fragment {


    public Fragment2() {
        // Required empty public constructor    }


    @Override

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        return inflater.inflate(R.layout.fragment_fragment2, container, false);
    }

}

3. Fragment Third is as 

package com.exam.ravi.swipetabsex1;


import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;


/** * A simple {@link Fragment} subclass. */public class Fragment3 extends Fragment {


    public Fragment3() {
        // Required empty public constructor    }


    @Override


    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        return inflater.inflate(R.layout.fragment_fragment3, container, false);
    }

}

4. Fragment1 Layout file is as 
<FrameLayout 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"

    tools:context="com.exam.ravi.swipetabsex1.Fragment1">

      <TextView
        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:text="His Blog is androidclue4u.blodspot.in"

        android:gravity="center"

        android:textSize="30sp"/>

</FrameLayout>

5. Fragment2 Layout file is as 
<FrameLayout 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"

    tools:context="com.exam.ravi.swipetabsex1.Fragment2">

    <TextView        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:text="He is a Android Trainer"

        android:textSize="30sp"

        android:gravity="center"/>

</FrameLayout>

6. Fragment3 Layout file is as 

<FrameLayout 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"

    tools:context="com.exam.ravi.swipetabsex1.Fragment3">

    <TextView        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:text="He is a i-Phone Trainer"

        android:textSize="30sp"

        android:gravity="center"/>

</FrameLayout>
  





Friday, May 6, 2016

Android Instrumentation Testing

" Jai Saraswati Maa" 
Hi ... Dear All ..Today I am uploading a superb example of Android Instrumentation Test.
It will l test your code with your emulator or physical device.
In MainActivity i am inserting simple text in edit text and on button click i will display text inserted into TextView.
Its also known as Activity Test. 
I am using Android Studio 1.5.1
Minimun SDK API 19
Target SDK API 23
Please Like us & put your valuable suggestions in comment box.
Just Read Carefully ........ There is some configuration tips required.
**** Nothing added in manifest file or build gradle file so don't worry its very easy.
********* See when you run this test your application runs and disappear.
A.  Layout will be like ....


  
B.    xml code   activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<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="com.exam.ravi.junittestex1.MainActivity">

    <EditText        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:id="@+id/editText"

        android:layout_alignParentTop="true"

        android:layout_alignParentStart="true"

        android:layout_alignParentEnd="true" />

    <Button        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="Click Me"

        android:id="@+id/button"        android:layout_below="@+id/editText"

        android:layout_centerHorizontal="true"

        android:layout_marginTop="42dp"

        android:onClick="clickButton" />

    <TextView        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:textAppearance="?android:attr/textAppearanceLarge"

        android:text="Large Text"

        android:id="@+id/textView"

        android:layout_centerVertical="true"

        android:layout_centerHorizontal="true" />
</RelativeLayout>

C.  Java code  MainActivity.java is as 

package com.exam.ravi.junittestex1;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void clickButton(View view) {
        EditText editText =
                (EditText) findViewById(R.id.editText);

        String name = editText.getText().toString();
        String setData = String.format("Hello, %s!", name);

        TextView textView =
                (TextView) findViewById(R.id.textView);

        textView.setText(setData);
    }
}

*************  Now Test Procedure started .....

1.  Create a Java Class under androidTest Package to test your MainActivity
****** i had created MainActTest which is as 

package com.exam.ravi.junittestex1;

import android.test.ActivityInstrumentationTestCase2;
import android.test.TouchUtils;
import android.widget.Button;
import android.widget.TextView;

public class MainActTest extends ActivityInstrumentationTestCase2<MainActivity> {
    public MainActTest() {
        super(MainActivity.class);
    }

    public void testActivityExists() {
        MainActivity activity = getActivity();
        assertNotNull(activity);
    }
    public void testApply() {
        MainActivity activity = getActivity();
        getInstrumentation().waitForIdleSync();
        getInstrumentation().sendStringSync("Ravi");
        Button button =
                (Button) activity.findViewById(R.id.button);

        TouchUtils.clickView(this, button);
        TextView message = (TextView) activity.findViewById(R.id.textView);
        String actualText = message.getText().toString();
        assertEquals("Hello, Ravi!", actualText);

    }
} 
2.  How configure ......
step 1. Select Android Instrumentation Tests in Build Variant  as  

step 2. configure your AndroidTest Package using Edit Configuration with Run 


step 3 Run your Test 
3.1   Successful ..... when inserted and expected are same Text .... 


3.2   Failed ....  when inserted and expected are not same  Text .... 

   




Android Testing - JUnit Test

" Jai Saraswati Maa" 
Hi ... Dear All ..Today I am uploading a superb example of JUnit test.
JUnit test will test your code on JVM basis.
I had created one simple class NumAdder with a method addNumber which returns only addition of two numbers..

I am using Android Studio 1.5.1
Minimun SDK API 19
Target SDK API 23
Please Like us & put your valuable suggestions in comment box.
Just Read Carefully ........ There is some configuration tips required.
**** No layout file required for this example.
**** Nothing added in manifest file or build gradle file so don't worry its very easy.

A. My Java class look like this -  in my package

package com.exam.ravi.junittestex1;

public class NumAdder
{
 public static  int addNumber(int first,int second)
 {
     return first+second;
 }
}

B. My Test class .... i am using default created class by AndroidStudio
which is ExampleUnitTest.java  in test folder(with same package name).

package com.exam.ravi.junittestex1;

import org.junit.Test;
import static org.junit.Assert.*;
public class ExampleUnitTest {
    @Test    public void addition_isCorrect() throws Exception
    {
        int result = NumAdder.addNumber(2,3);
        assertEquals(5, result);
    }
}

C. How configure ..... 


step 1. please select option Unit Tests in build variant see below 
        



step 2. Edit Run configuration  like 

step 3. Run ExampleUnitTest and see the result 

1. successful ------ see It's Green  
 

2. Fail ---- Please change expected result and actual result in ExampleUnitTest  
  

Thursday, April 28, 2016

Registration & Login Simple One

" Jai Saraswati Maa" 
Hi ... Dear All ..Today I am uploading a superb example of Creating Registration Form with FirstName LastName and Password field. 
FirstName i am taken as userName for login Purpose.Please check.
I am using Android Studio 1.5.1
Minimun SDK API 19
Target SDK API 23
Please Like us & put your valuable suggestions in comment box.

A. Output Will be like 
a.        


b.       
            


B. XML files

a.  activity_main.xml   is as 

<?xml version="1.0" encoding="utf-8"?>

<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="com.exam.ravi.customlistwithbutton.MainActivity">

    <EditText        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:id="@+id/logUser"

        android:layout_alignParentTop="true"

        android:layout_alignParentStart="true"

        android:layout_marginTop="54dp"        android:hint="UserName"

        android:layout_alignParentEnd="true" />

    <EditText        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:id="@+id/logPass"

        android:layout_below="@+id/logUser"

        android:layout_alignParentStart="true"

        android:layout_marginTop="40dp"

        android:hint="Password"        android:inputType="textPassword"

        android:layout_alignEnd="@+id/logUser" />

    <Button        android:layout_width="wrap_content"

        android:layout_height="wrap_content"        android:text="Login"

        android:id="@+id/logBut"

        android:onClick="loginUser"

        android:layout_centerVertical="true"

        android:layout_alignParentStart="true" />

    <Button        android:layout_width="wrap_content"

        android:layout_height="wrap_content"        android:text="New User"

        android:id="@+id/newuserBut"

        android:onClick="registerUser"

        android:layout_centerVertical="true"

        android:layout_alignParentEnd="true" />
</RelativeLayout>

b.  reguser.xml is as 

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical" android:layout_width="match_parent"

    android:layout_height="match_parent">

    <EditText        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:id="@+id/fName"

        android:layout_alignParentTop="true"

        android:layout_alignParentStart="true"

        android:layout_marginTop="58dp"

        android:hint="First Name"

        android:layout_alignParentEnd="true" />

    <EditText        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:id="@+id/lName"        android:layout_below="@+id/fName"

        android:layout_alignParentStart="true"

        android:layout_marginTop="42dp"

        android:hint="Last Name"

        android:layout_alignParentEnd="true" />

    <EditText        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:inputType="textPassword"

        android:ems="10"

        android:id="@+id/userPass"

        android:layout_centerVertical="true"

        android:hint=" Password "

        android:layout_alignParentStart="true"

        android:layout_alignParentEnd="true" />

    <Button        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="Register"

        android:id="@+id/regist"

        android:layout_below="@+id/userPass"

        android:layout_centerHorizontal="true"

        android:layout_marginTop="50dp"

        android:onClick="regMe"/>
</RelativeLayout>

C. Java Files
a.   MainActivity.java ias as

package com.exam.ravi.customlistwithbutton;

import android.content.Intent;
import android.database.Cursor;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    EditText EdLogUser,EdLogPass;
    String user,pass;
    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        EdLogUser = (EditText) findViewById(R.id.logUser);
        EdLogPass = (EditText) findViewById(R.id.logPass);
    }
    public void loginUser(View view)
    {
        user = EdLogUser.getText().toString();
        pass = EdLogPass.getText().toString();
        MyHelp myHelp = new MyHelp(this);
        Cursor crob = myHelp.getInfo(myHelp);
        crob.moveToFirst();
        boolean logstatus = false;
        String NAME = "";
        do {
         if((user.equals(crob.getString(0))) && (pass.equals(crob.getString(1)))) {
                logstatus = true;
                NAME = crob.getString(0);
            }
        } while (crob.moveToNext());
        if (logstatus) {
            Toast.makeText(getBaseContext(), "Login Success .. . \n Welcome " + NAME, 
                                Toast.LENGTH_LONG).show();
           EdLogUser.setText("");
           EdLogPass.setText("");
        } else {
            Toast.makeText(getBaseContext(), "Login Failed..Please Check your detail",
                                Toast.LENGTH_LONG).show();
            EdLogUser.setText("");
            EdLogPass.setText("");
        }
    }


    public void  registerUser(View view)
      {
        startActivity(new Intent(this,RegUser.class));
      }
}

b. RegUser.java is as 

package com.exam.ravi.customlistwithbutton;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

/** * Created by Ravi on 4/28/2016. */public class RegUser extends AppCompatActivity
{
   EditText EdFname,EdLname,EdPass;
    String sFname,sLname,sPass;
    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.reguser);
        EdFname = (EditText) findViewById(R.id.fName);
        EdLname = (EditText) findViewById(R.id.lName);
        EdPass = (EditText) findViewById(R.id.userPass);
    }
    public void regMe(View view)
    {
        sFname = EdFname.getText().toString();
        sLname = EdLname.getText().toString();
        sPass = EdPass.getText().toString();
        MyHelp myob = new MyHelp(this);
        myob.putInfo(myob, sFname, sLname,sPass);
        Toast.makeText(RegUser.this, "Registered Successfully....", 
                                              Toast.LENGTH_SHORT).show();
        finish();

    }
}

c. MyHelp.java is as 
package com.exam.ravi.customlistwithbutton;

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

/** * Created by Ravi on 4/28/2016. */public class MyHelp  extends SQLiteOpenHelper {
    public static final String KEY_ID="_id";
    private static final String DB_NAME="cont.db";
    private static final String TAB_NAME="info";
    private static final int DB_VER=1;
    private static final  String CREATE_QUERY = "create table " + TAB_NAME + 
            " ( " + KEY_ID + " integer primary key autoincrement, " +
            UserInfo.F_NAME + " text not null, " + UserInfo.L_NAME + " text not null, 
            " + UserInfo.PASS + " text not null);";

    public MyHelp(Context context)
    {
        super(context,DB_NAME,null,DB_VER);
    }
    @Override    public void onCreate(SQLiteDatabase sdb) {

        sdb.execSQL(CREATE_QUERY);
        Log.d("rrrr", "oncreate");
    }

    @Override

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TAB_NAME);
        Log.d("rrrr", "onupgrade");
        onCreate(db);

    }
    public  void putInfo(MyHelp mob,String fname,String lname,String pass)
    {
        SQLiteDatabase SQ= mob.getWritableDatabase();
        ContentValues CV=new ContentValues();
        CV.put(UserInfo.F_NAME, fname);
        CV.put(UserInfo.L_NAME, lname);
        CV.put(UserInfo.PASS, pass);
        SQ.insert(TAB_NAME, null, CV);
    }
    public Cursor getInfo(MyHelp mob)
    {
        SQLiteDatabase SQ= mob.getWritableDatabase();
        String cols[]={UserInfo.F_NAME,UserInfo.PASS};
        Cursor CR= SQ.query(TAB_NAME,cols,null,null,null,null,null); 
        return  CR;
    }
}

d. UserInfo.java is as

package com.exam.ravi.customlistwithbutton;


public class UserInfo {
    public static final String F_NAME="f_name";
    public static final String L_NAME="l_name";
    public static final String PASS="pass";

}