Monday, 29 May 2017

Volley in Android

Login webservice volley demo :


private void login() {
    nm = uname.getText().toString().trim();
    pass = password.getText().toString().trim();
    pdialog = new ProgressDialog(Login.this);
    pdialog.setMessage("Please wait...");
    if (nm.equals("")) {
        uname.setError("email required");
    } else if (pass.equals("")) {
        password.setError("password required");
    } else {
        isInternet = ie.isInternetAvailable();
        if (isInternet) {
            pdialog.show();
            JSONObject jsonObject = new JSONObject();
            try {
                JSONObject login_info = new JSONObject();
                login_info.put("user_name", nm);
                login_info.put("password", pass);
                login_info.put("device_token", regid);
                login_info.put("device_type", "0");
                jsonObject.accumulate("method", "sign_in");
                jsonObject.accumulate("params", login_info);

            } catch (Exception e) {
                Log.d("InputStream", e.getLocalizedMessage());
            }
            JsonObjectRequest stringRequest = new JsonObjectRequest(Request.Method.POST, Config.URL, jsonObject,
                    new Response.Listener<JSONObject>() {
                        @Override
                        public void onResponse(JSONObject response) {
                            try {
                                String loginresult = response.optString("success").toString();
                                if (loginresult.equals("true")) {
                                    JSONObject businessObject = response.getJSONObject("params");
                                    JSONObject businessObject1 = businessObject.getJSONObject("user_details");
                                    String salesmanid = businessObject1.getString("sales_id");
                                    // Toast.makeText(Login.this, "sales man id :- "+salesmanid , Toast.LENGTH_SHORT).show();
                                    //Toast.makeText(Login.this, "login success", Toast.LENGTH_SHORT).show();
                                    pref = new preference(getApplicationContext());
                                    pref.setLoginStatus(true);
                                    pref.setUserName(nm);
                                    pref.setSalesId(salesmanid);
                                    pdialog.dismiss();
                                    startActivity(new Intent(getApplicationContext(), Home.class));
                                    finish();
                                } else if (loginresult.equals("false")){
                                    Toast.makeText(getApplicationContext(), "Invalid Username or Password", Toast.LENGTH_SHORT).show();
                                    pdialog.dismiss();
                                }

                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            pdialog.dismiss();
                            Toast.makeText(Login.this, "Response error", Toast.LENGTH_SHORT).show();
                            error.printStackTrace();
                        }
                    }) {
                @Override
                public Map<String, String> getHeaders() throws AuthFailureError {
                    HashMap<String, String> headers = new HashMap<String, String>();
                    headers.put("Content-Type", "application/json; charset=utf-8");
                    return headers;
                }
            };
            RequestQueue requestQueue = Volley.newRequestQueue(this);
            requestQueue.add(stringRequest);
        } else {
            Toast.makeText(this, "Internet not available.", Toast.LENGTH_SHORT).show();
        }
    }
}

Friday, 31 March 2017

Custom Toolbar in Android

STEP 1 : Create toolbar.xml in layout folder

<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:fitsSystemWindows="true"
    android:minHeight="?attr/actionBarSize"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    android:background="?attr/colorPrimary">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Custom Toolbar"
            android:textSize="@dimen/toolbartext"
            android:textColor="@android:color/white"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true"
            />

    </RelativeLayout>

</android.support.v7.widget.Toolbar>

STEP 2 : Include toolbar in xml file where ever you want.

  <include
            android:id="@+id/toolbar"
            layout="@layout/toolbar" />

STEP 3 : Add this lines in java file

setContentView(R.layout.activity_home);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

ITS DONE !!!

Android Working with Google Maps


Step 1 : Install the Google Play services SDK



Step 2 : Get a Google Maps API key

Login into Google API Console, click on Credentials, then click on Create a project.

 





Then click on Create credentials and the click on API KEY


Next you will get your api key just copy it you will need this next in this project.


Now click on Libraries, Click on Google Maps Android API and ENABLE it.








STEP 3 : Creating new Project

STEP 4 : Add the line shown below in build.gradle (Module: app)



dependencies {
    .....
    compile 'com.google.android.gms:play-services:10.2.0'
    .....
}

and click on Sync Now



STEP 5 : Create activity_main.xml in layout folder

<?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:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MapsActivity" />

</RelativeLayout>

STEP 6 : Modify your AndroidManifest.xml as shown below.

You need to add permission for location and you need to declare API Key in meta-data.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.app.mapexamplebymiraj">

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="PUT YOUR API KEY HERE" />
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>


STEP 7 : Create MainActivity.java and put the below code in it.

import android.content.pm.PackageManager;
import android.location.Location;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MainActivity extends AppCompatActivity implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {

    GoogleMap mMap;
    Double latitude, longitude;
    Location mLastLocation;
    GoogleApiClient googleApiClient;

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

        googleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    @Override
    protected void onStart() {
        googleApiClient.connect();
        super.onStart();
    }

    @Override
    protected void onStop() {
        googleApiClient.disconnect();
        super.onStop();
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
        if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        mMap.setMyLocationEnabled(true);
    }

    @Override
    public void onConnected(@Nullable Bundle bundle) {
        if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        mLastLocation = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
        latitude = mLastLocation.getLatitude();
        longitude = mLastLocation.getLongitude();
        MarkerOptions markerOptions = new MarkerOptions().position(new LatLng(latitude, longitude)).title("Current Location");
        mMap.addMarker(markerOptions);
        mMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(latitude, longitude)));
        mMap.animateCamera(CameraUpdateFactory.zoomTo(16));
        Toast.makeText(this, "onConnected", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onConnectionSuspended(int i) {
        Toast.makeText(this, "connection suspended", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
        Toast.makeText(this, "connection failed", Toast.LENGTH_SHORT).show();
    }
}

Now Just run the Project you are Done.

Note : You need to turn on your Location and Internet otherwise you app will crash. You can put permission check to overcome that problem.

Thursday, 30 March 2017

Button Material Design in Android



STEP 1 : Create org_one.xml under drawable folder

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:startColor="#f99100"
        android:endColor="#f99100"
        android:angle="45"/>
    <padding android:left="6dp"
        android:top="6dp"
        android:right="6dp"
        android:bottom="6dp" />
    <corners android:radius="30dp" />

</shape>

STEP 2 : Create org_two.xml under drawable folder

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:startColor="#c77400"
        android:endColor="#c77400"
        android:angle="45"/>
    <padding android:left="6dp"
        android:top="6dp"
        android:right="6dp"
        android:bottom="6dp" />
    <corners android:radius="30dp" />

</shape>

STEP 3 : Create org_btn_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/org_one" android:state_pressed="false" android:state_selected="false"/>
    <item android:drawable="@drawable/org_two" android:state_pressed="true"/>
</selector>

STEP 4 : Set org_btn_selector.xml in background of button

<Button
                android:id="@+id/btnregistorfree"
                android:layout_width="match_parent"
                android:layout_height="35dp"
                android:layout_marginBottom="10dp"
                android:layout_marginTop="10dp"
                android:background="@drawable/org_btn_selector"
                android:text="Register for Free"
                android:textColor="@color/white"
                android:textSize="12sp"/>

EditText material Design Android





STEP 1 : Create edittext.xml under drawable folder

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Background Color
    <solid android:color="#ffffff" />-->
    <!-- Border Color -->
    <stroke android:width="1dp" android:color="#5c6f7b" />
    <!-- Round Corners -->
    <corners android:radius="30dp" />
    <padding android:left="16dp"
        android:top="10dp"
        android:right="6dp"
        android:bottom="10dp" />
</shape>

STEP 2 : Set edittext.xml in background of EditText

You can also set drawable icon left or right if you want.

<EditText
   android:id="@+id/etunm"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:background="@drawable/edittext"
   android:drawableLeft="@drawable/user_icon"
   android:drawablePadding="15dp"
   android:drawableStart="@drawable/user_icon"
   android:hint="@string/uname"
   android:inputType="textEmailAddress"
   android:singleLine="true"
   android:textSize="13sp" />

Scrolling increases when you set background to SCROLLVIEW

Solution :

<ScrollView
    ......
    android:background="@drawable/signup_background"
    android:fillViewport="true"  >

Animation activity transition in android



STEP 1 : Create anim folder under res folder




STEP 2 : Create fade_in.xml under anim folder

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="500"
    android:fromAlpha="0.0"
    android:interpolator="@android:anim/accelerate_interpolator"
    android:toAlpha="1.0" />

STEP 3 : Create fade_out.xml under anim folder

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="500"
    android:fillAfter="true"
    android:fromAlpha="1.0"
    android:interpolator="@android:anim/accelerate_interpolator"
    android:toAlpha="0.0" />

STEP 4 : Write the below code when you change from one activity to another

startActivity(new Intent(getApplicationContext(),YourActivity.class));
overridePendingTransition(R.anim.fade_in,R.anim.fade_out);