Wednesday, 31 January 2018

Get current location with address Android example

MainActivity.java

package com.getcurrentlonglat;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.location.Address;
import android.location.Geocoder;
import android.net.Uri;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.io.IOException;
import java.util.List;
import java.util.Locale;

public class Main2Activity extends AppCompatActivity implements View.OnClickListener {

    private static final int REQUEST_CODE_PERMISSION = 2;
    List<Address> addresses;
    Button btnShowLocation,buttonshow;
    Geocoder geocoder;
    GPSTracker gps;
    String mPermission = "android.permission.ACCESS_FINE_LOCATION";
    TextView txt_add;
    TextView txt_lat;
    TextView txt_long;

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

        txt_lat = (TextView) findViewById(R.id.txt_lat);
        txt_long = (TextView) findViewById(R.id.txt_long);
        txt_add = (TextView) findViewById(R.id.txt_add);
        try {
            if (ContextCompat.checkSelfPermission(this, this.mPermission) != 0) {
                ActivityCompat.requestPermissions(this, new String[]{this.mPermission}, 2);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        btnShowLocation = (Button) findViewById(R.id.button);
        buttonshow = (Button)findViewById(R.id.buttonshow);
        buttonshow.setOnClickListener(new View.OnClickListener() {
            @Override            public void onClick(View view) {


                gps = new GPSTracker(Main2Activity.this);
                if (gps.canGetLocation()) {
                    double latitude = gps.getLatitude();
                    double longitude = gps.getLongitude();
                    try {
                        getCompleteAddressString(latitude, longitude);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    final String lat = String.valueOf(latitude);
                    final String lang = String.valueOf(longitude);
                    txt_lat.setText(lat);
                    txt_long.setText(lang);

                    String tempid="google.navigation:q="+"23.0734262,72.6243823";
                    //String tempid="google.navigation?q="+lat+","+lang;                    Uri gmmIntentUri = Uri.parse(tempid);
                    Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
                    mapIntent.setPackage("com.google.android.apps.maps");
                    if (mapIntent.resolveActivity(getPackageManager()) != null) {
                        startActivity(mapIntent);
                    }
                    return;
                }
                gps.showSettingsAlert();


               /* gps = new GPSTracker(Main2Activity.this);                if (gps.canGetLocation()) {                    double latitude = gps.getLatitude();                    double longitude = gps.getLongitude();                    try {                        getCompleteAddressString(latitude, longitude);                    } catch (IOException e) {                        e.printStackTrace();                    }                    final String lat = String.valueOf(latitude);                    final String lang = String.valueOf(longitude);                    txt_lat.setText(lat);                    txt_long.setText(lang);                    String tempid="geo:0,0?q="+lat+","+lang;                    //String tempid="google.navigation?q="+lat+","+lang;                    Uri gmmIntentUri = Uri.parse(tempid);                    Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);                    mapIntent.setPackage("com.google.android.apps.maps");                    if (mapIntent.resolveActivity(getPackageManager()) != null) {                        startActivity(mapIntent);                    }                    return;                }                gps.showSettingsAlert();*/
            }
        });
        btnShowLocation.setOnClickListener(this);
    }

    @Override    public void onClick(View view) {
        gps = new GPSTracker(Main2Activity.this);
        if (gps.canGetLocation()) {
            double latitude = gps.getLatitude();
            double longitude = gps.getLongitude();
            try {
               getCompleteAddressString(latitude, longitude);
            } catch (IOException e) {
                e.printStackTrace();
            }
            final String lat = String.valueOf(latitude);
            final String lang = String.valueOf(longitude);
            txt_lat.setText(lat);
           txt_long.setText(lang);
            return;
        }
       gps.showSettingsAlert();
    }

    @SuppressLint("LongLogTag")
    private String getCompleteAddressString(double LATITUDE, double LONGITUDE) throws IOException {
        String strAdd = "";
        try {
            List<Address> addresses = new Geocoder(this, Locale.getDefault()).getFromLocation(LATITUDE, LONGITUDE, 1);
            if (addresses != null) {
                Address returnedAddress = (Address) addresses.get(0);
                StringBuilder strReturnedAddress = new StringBuilder("");
                for (int i = 0; i <= returnedAddress.getMaxAddressLineIndex(); i++) {
                    strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n");
                }
                strAdd = strReturnedAddress.toString();
                txt_add.setText(strAdd);
                Log.w("My Current loction address", strReturnedAddress.toString());
                return strAdd;
            }
            Log.w("My Current loction address", "No Address returned!");
            return strAdd;
        } catch (Exception e) {
            e.printStackTrace();
            Log.w("My Current loction address", "Canont get Address!");
            return strAdd;
        }
    }
}

GPSTracker.java

package com.getcurrentlonglat;

import android.app.AlertDialog.Builder;
import android.app.Service;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;

public class GPSTracker extends Service implements LocationListener {
    private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10;
    private static final long MIN_TIME_BW_UPDATES = 60000;
    boolean canGetLocation = false;
    boolean isGPSEnabled = false;
    boolean isNetworkEnabled = false;
    double latitude;
    Location location;
    protected LocationManager locationManager;
    double longitude;
    private final Context mContext;

    class C01931 implements OnClickListener {
        C01931() {
        }

        public void onClick(DialogInterface dialog, int which) {
            GPSTracker.this.mContext.startActivity(new Intent("android.settings.LOCATION_SOURCE_SETTINGS"));
        }
    }

    class C01942 implements OnClickListener {
        C01942() {
        }

        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    }

    public GPSTracker(Context context) {
        this.mContext = context;
        getLocation();
    }

    public Location getLocation() {
        try {
            this.locationManager = (LocationManager) this.mContext.getSystemService("location");
            this.isGPSEnabled = this.locationManager.isProviderEnabled("gps");
            this.isNetworkEnabled = this.locationManager.isProviderEnabled("network");
            if (this.isGPSEnabled || this.isNetworkEnabled) {
                this.canGetLocation = true;
                if (this.isNetworkEnabled) {
                    this.locationManager.requestLocationUpdates("network", MIN_TIME_BW_UPDATES, 10.0f, this);
                    Log.d("Network", "Network");
                    if (this.locationManager != null) {
                        this.location = this.locationManager.getLastKnownLocation("network");
                        if (this.location != null) {
                            this.latitude = this.location.getLatitude();
                            this.longitude = this.location.getLongitude();
                        }
                    }
                }
                if (this.isGPSEnabled && this.location == null) {
                    this.locationManager.requestLocationUpdates("gps", MIN_TIME_BW_UPDATES, 10.0f, this);
                    Log.d("GPS Enabled", "GPS Enabled");
                    if (this.locationManager != null) {
                        this.location = this.locationManager.getLastKnownLocation("gps");
                        if (this.location != null) {
                            this.latitude = this.location.getLatitude();
                            this.longitude = this.location.getLongitude();
                        }
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return this.location;
    }

    public void stopUsingGPS() {
        if (this.locationManager != null) {
            this.locationManager.removeUpdates(this);
        }
    }

    public double getLatitude() {
        if (this.location != null) {
            this.latitude = this.location.getLatitude();
        }
        return this.latitude;
    }

    public double getLongitude() {
        if (this.location != null) {
            this.longitude = this.location.getLongitude();
        }
        return this.longitude;
    }

    public boolean canGetLocation() {
        return this.canGetLocation;
    }

    public void showSettingsAlert() {
        Builder alertDialog = new Builder(this.mContext);
        alertDialog.setTitle("GPS is settings");
        alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?");
        alertDialog.setPositiveButton("Settings", new C01931());
        alertDialog.setNegativeButton("Cancel", new C01942());
        alertDialog.show();
    }

    public void onLocationChanged(Location location) {
    }

    public void onProviderDisabled(String provider) {
    }

    public void onProviderEnabled(String provider) {
    }

    public void onStatusChanged(String provider, int status, Bundle extras) {
    }

    public IBinder onBind(Intent arg0) {
        return null;
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res-auto"    xmlns:app="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    app:layout_width="match_parent"    app:layout_height="match_parent"    app:layout_margin="10dp"    tools:ignore="NamespaceTypo">
    <LinearLayout        app:orientation="vertical"        app:id="@+id/linearLayout"        app:layout_width="match_parent"        app:layout_height="wrap_content">
        <TextView app:padding="5dp"            app:layout_width="match_parent"            app:layout_height="wrap_content"            app:text="Latitude" />
        <TextView app:id="@+id/txt_lat"            app:padding="5dp"            app:layout_width="match_parent"            app:layout_height="wrap_content"            app:hint="Lat" />
    </LinearLayout>
    <LinearLayout        app:orientation="vertical"        app:id="@+id/linearLayout2"        app:layout_width="match_parent"        app:layout_height="wrap_content"        app:layout_below="@+id/linearLayout"        app:layout_alignParentLeft="true">
        <TextView app:padding="5dp"            app:layout_width="match_parent"            app:layout_height="wrap_content"            app:text="Longitude" />
        <TextView app:id="@+id/txt_long"            app:padding="5dp"            app:layout_width="match_parent"            app:layout_height="wrap_content"            app:hint="Long" />
    </LinearLayout>
    <LinearLayout        app:orientation="vertical"        app:layout_width="match_parent"        app:layout_height="wrap_content"        app:layout_below="@+id/linearLayout2"        app:layout_alignParentLeft="true">
        <TextView app:padding="5dp"            app:layout_width="match_parent"            app:layout_height="wrap_content"            app:text="Address" />
        <TextView            app:id="@+id/txt_add"            app:padding="5dp"            app:layout_width="match_parent"            app:layout_height="wrap_content"            app:hint="Address" />
    </LinearLayout>

    <Button        app:id="@+id/button"        app:layout_width="match_parent"        app:layout_height="wrap_content"        app:layout_alignParentBottom="true"        app:layout_alignParentLeft="true"        app:layout_alignParentStart="true"        app:text="get location" />

    <Button        app:id="@+id/buttonshow"        app:layout_width="match_parent"        app:layout_height="wrap_content"        app:layout_above="@+id/button"        app:layout_alignParentLeft="true"        app:layout_alignParentStart="true"        app:text="Show location" />
</RelativeLayout>

Saturday, 20 January 2018

Android Vimeo Integration

Android Vimeo Video View Integration Example/Tutorial

MainActivity.java



package com.vimeoandroidintegration;

import android.Manifest;
import android.app.Activity;
import android.graphics.Bitmap;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.FrameLayout;

public class MainActivity extends Activity {

    WebView webView;
    FrameLayout customViewContainer;
    myWebChromeClient mWebChromeClient;
    WebChromeClient.CustomViewCallback customViewCallback;
    myWebViewClient mWebViewClient;
    View mCustomView;
    String vimeolink ="http://player.vimeo.com/video/24577973";
    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        customViewContainer = (FrameLayout) findViewById(R.id.customViewContainer);
        webView = (WebView) findViewById(R.id.webView);

        mWebViewClient = new myWebViewClient();
        webView.setWebViewClient(mWebViewClient);
        mWebChromeClient = new myWebChromeClient();
        webView.setWebChromeClient(mWebChromeClient);
        WebSettings settings = webView.getSettings();
        settings.setJavaScriptEnabled(true);
        settings.setDomStorageEnabled(true);
        settings.setMinimumFontSize(10);
        settings.setLoadWithOverviewMode(true);
        settings.setUseWideViewPort(true);
        settings.setBuiltInZoomControls(true);
        settings.setDisplayZoomControls(false);
        webView.setVerticalScrollBarEnabled(false);

        webView.loadUrl(vimeolink+"?player_id=player&autoplay=1&title=0&byline=0&portrait=0&api=1&maxheight=480&maxwidth=800");
    }

    class myWebChromeClient extends WebChromeClient {
        private Bitmap mDefaultVideoPoster;
        private View mVideoProgressView;

        @Override        public void onShowCustomView(View view, int requestedOrientation,CustomViewCallback callback) {
            onShowCustomView(view, callback); //To change body of overridden methods use File | Settings | File Templates.        }

        @Override        public void onShowCustomView(View view,CustomViewCallback callback) {

            // if a view already exists then immediately terminate the new one            if (mCustomView != null) {
                callback.onCustomViewHidden();
                return;
            }
            mCustomView = view;
            webView.setVisibility(View.GONE);
            customViewContainer.setVisibility(View.VISIBLE);
            customViewContainer.addView(view);
            customViewCallback = callback;
        }

        @Override        public View getVideoLoadingProgressView() {

            if (mVideoProgressView == null) {
                LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
                //mVideoProgressView = inflater.inflate(R.layout.video_progress, null);            }
            return mVideoProgressView;
        }

        @Override        
public void onHideCustomView() {
            super.onHideCustomView(); 
   //To change body of overridden methods use File | Settings | File Templates.  
          if (mCustomView == null)
                return;

            webView.setVisibility(View.VISIBLE);
            customViewContainer.setVisibility(View.GONE);

            // Hide the custom view.           
 mCustomView.setVisibility(View.GONE);

            // Remove the custom view from its container.            
customViewContainer.removeView(mCustomView);
            customViewCallback.onCustomViewHidden();

            mCustomView = null;
        }
    }

    class myWebViewClient extends WebViewClient {
        @Override      
  public boolean shouldOverrideUrlLoading(WebView view, String url) {
            url =vimeolink;
            return super.shouldOverrideUrlLoading(view, url);
        }
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android"    
xmlns:app="http://schemas.android.com/apk/res-auto"    
xmlns:tools="http://schemas.android.com/tools"   
 android:layout_width="match_parent"    
android:layout_height="match_parent"    
tools:context="com.vimeoandroidintegration.MainActivity"    
android:gravity="center">

    <WebView        
android:layout_width="match_parent"        
android:layout_height="fill_parent"        
android:id="@+id/webView"        
android:layout_gravity="center"       
 android:background="#000000"        />
    <FrameLayout        
android:id="@+id/customViewContainer"        
android:layout_width="match_parent"        
android:layout_height="fill_parent"        
android:visibility="visible"        />

</RelativeLayout>

Saturday, 25 November 2017

Android MathView Example

AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />

MainActivity.java
package com.mathviewandroid;

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    String
tex = "This come from string. You can insert inline formula:" +
           
" \\(ax^2 + bx + c = 0\\) " +
           
"or displayed formula: $$\\sum_{i=0}^n i^2 = \\frac{(n^2+n)(2n+1)}{6}$$";

   
private WebView webView;

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

       
webView = (WebView) findViewById(R.id.webView1);
       
webView.addJavascriptInterface(new WebAppInterface(this), "android");
        WebSettings ws =
webView.getSettings();
        ws.setJavaScriptEnabled(
true);
       
webView.setWebViewClient(new WebViewClient() {

           
public void onPageFinished(WebView view, String url){
                
// do your stuff here

           
}
        });

       
webView.loadDataWithBaseURL(null, "<style type=text/css>img{display: inline;height: auto;max-width: 100%;} @font-face{font-family: \"chantelli_antiqua\";src: url('file:///android_asset/fonts/MavenPro-Regular.ttf');}body{font-family: \"Chantelli_Antiqua\";}\n</style> <script type=\"text/javascript\"\n" +
               
"        src=\"http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_SVG\">\n" +
               
"</script>" + tex, "text/html", "UTF-8", null);
    }

   
public class WebAppInterface {
        Context
mContext;

       
/** Instantiate the interface and set the context */
       
WebAppInterface(Context c) {
           
mContext = c;
        }

       
/** Show a toast from the web page */
       
@JavascriptInterface
       
public void showToast(String toast) {
            Toast.makeText(
mContext, toast, Toast.LENGTH_SHORT).show();
        }
    }
}

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

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

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

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context="com.mathviewandroid.MainActivity">



    <WebView

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

        android:id="@+id/webView1"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        android:visibility="visible"

        android:layout_margin="10dp"/>



</LinearLayout>

import android.content.Context;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

import android.webkit.JavascriptInterface;

import android.webkit.WebSettings;

import android.webkit.WebView;

import android.webkit.WebViewClient;

import android.widget.ProgressBar;

import android.widget.Toast;



public class PDFViewActivity extends AppCompatActivity {



    WebView webView;

    String pdf_file = "http://integrityinitiative.com/wp-content/uploads/2017/06/Lorem-Ipsum.pdf";



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_pdfview);



        webView = (WebView)findViewById(R.id.webView1);

        WebSettings ws = webView.getSettings();

        ws.setJavaScriptEnabled(true);

        webView.setWebViewClient(new WebViewClient() {



            public void onPageFinished(WebView view, String url){

                // do your stuff here

                webView.loadUrl("javascript:(function() { " +

                        "document.getElementsByClassName('ndfHFb-c4YZDc-GSQQnc-LgbsSe ndfHFb-c4YZDc-to915-LgbsSe VIpgJd-TzA9Ye-eEGnhe ndfHFb-c4YZDc-LgbsSe')[0].style.display='none'; })()");

            }

        });

        webView.loadUrl("http://docs.google.com/gview?embedded=true&url=" + pdf_file);

    }

}


Monday, 20 November 2017

Pinch To Zoom Android Tutorial

TouchImageView.java

package com.pinchtozoom;

import android.content.Context;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.view.View;

public class TouchImageView extends android.support.v7.widget.AppCompatImageView {

    Matrix matrix;

    // We can be in one of these 3 states    static final int NONE = 0;
    static final int DRAG = 1;
    static final int ZOOM = 2;
    int mode = NONE;

    // Remember some things for zooming    PointF last = new PointF();
    PointF start = new PointF();
    float minScale = 1f;
    float maxScale = 3f;
    float[] m;

    int viewWidth, viewHeight;
    static final int CLICK = 3;
    float saveScale = 1f;
    protected float origWidth, origHeight;
    int oldMeasuredWidth, oldMeasuredHeight;

    ScaleGestureDetector mScaleDetector;

    Context context;

    public TouchImageView(Context context) {
        super(context);
        sharedConstructing(context);
    }

    public TouchImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        sharedConstructing(context);
    }

    private void sharedConstructing(Context context) {
        super.setClickable(true);
        this.context = context;
        mScaleDetector = new ScaleGestureDetector(context, new ScaleListener());
        matrix = new Matrix();
        m = new float[9];
        setImageMatrix(matrix);
        setScaleType(ScaleType.MATRIX);

        setOnTouchListener(new OnTouchListener() {

            @Override            public boolean onTouch(View v, MotionEvent event) {
                mScaleDetector.onTouchEvent(event);
                PointF curr = new PointF(event.getX(), event.getY());

                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        last.set(curr);
                        start.set(last);
                        mode = DRAG;
                        break;

                    case MotionEvent.ACTION_MOVE:
                        if (mode == DRAG) {
                            float deltaX = curr.x - last.x;
                            float deltaY = curr.y - last.y;
                            float fixTransX = getFixDragTrans(deltaX, viewWidth,
                                    origWidth * saveScale);
                            float fixTransY = getFixDragTrans(deltaY, viewHeight,
                                    origHeight * saveScale);
                            matrix.postTranslate(fixTransX, fixTransY);
                            fixTrans();
                            last.set(curr.x, curr.y);
                        }
                        break;

                    case MotionEvent.ACTION_UP:
                        mode = NONE;
                        int xDiff = (int) Math.abs(curr.x - start.x);
                        int yDiff = (int) Math.abs(curr.y - start.y);
                        if (xDiff < CLICK && yDiff < CLICK)
                            performClick();
                        break;

                    case MotionEvent.ACTION_POINTER_UP:
                        mode = NONE;
                        break;
                }

                setImageMatrix(matrix);
                invalidate();
                return true; // indicate event was handled            }

        });
    }

    public void setMaxZoom(float x) {
        maxScale = x;
    }

    private class ScaleListener extends            ScaleGestureDetector.SimpleOnScaleGestureListener {
        @Override        public boolean onScaleBegin(ScaleGestureDetector detector) {
            mode = ZOOM;
            return true;
        }

        @Override        public boolean onScale(ScaleGestureDetector detector) {
            float mScaleFactor = detector.getScaleFactor();
            float origScale = saveScale;
            saveScale *= mScaleFactor;
            if (saveScale > maxScale) {
                saveScale = maxScale;
                mScaleFactor = maxScale / origScale;
            } else if (saveScale < minScale) {
                saveScale = minScale;
                mScaleFactor = minScale / origScale;
            }

            if (origWidth * saveScale <= viewWidth                    || origHeight * saveScale <= viewHeight)
                matrix.postScale(mScaleFactor, mScaleFactor, viewWidth / 2,
                        viewHeight / 2);
            else                matrix.postScale(mScaleFactor, mScaleFactor,
                        detector.getFocusX(), detector.getFocusY());

            fixTrans();
            return true;
        }
    }

    void fixTrans() {
        matrix.getValues(m);
        float transX = m[Matrix.MTRANS_X];
        float transY = m[Matrix.MTRANS_Y];

        float fixTransX = getFixTrans(transX, viewWidth, origWidth * saveScale);
        float fixTransY = getFixTrans(transY, viewHeight, origHeight                * saveScale);

        if (fixTransX != 0 || fixTransY != 0)
            matrix.postTranslate(fixTransX, fixTransY);
    }

    float getFixTrans(float trans, float viewSize, float contentSize) {
        float minTrans, maxTrans;

        if (contentSize <= viewSize) {
            minTrans = 0;
            maxTrans = viewSize - contentSize;
        } else {
            minTrans = viewSize - contentSize;
            maxTrans = 0;
        }

        if (trans < minTrans)
            return -trans + minTrans;
        if (trans > maxTrans)
            return -trans + maxTrans;
        return 0;
    }

    float getFixDragTrans(float delta, float viewSize, float contentSize) {
        if (contentSize <= viewSize) {
            return 0;
        }
        return delta;
    }

    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        viewWidth = MeasureSpec.getSize(widthMeasureSpec);
        viewHeight = MeasureSpec.getSize(heightMeasureSpec);

        //        // Rescales image on rotation        //        if (oldMeasuredHeight == viewWidth && oldMeasuredHeight == viewHeight                || viewWidth == 0 || viewHeight == 0)
            return;
        oldMeasuredHeight = viewHeight;
        oldMeasuredWidth = viewWidth;

        if (saveScale == 1) {
            // Fit to screen.            float scale;

            Drawable drawable = getDrawable();
            if (drawable == null || drawable.getIntrinsicWidth() == 0                    || drawable.getIntrinsicHeight() == 0)
                return;
            int bmWidth = drawable.getIntrinsicWidth();
            int bmHeight = drawable.getIntrinsicHeight();

            Log.d("bmSize", "bmWidth: " + bmWidth + " bmHeight : " + bmHeight);

            float scaleX = (float) viewWidth / (float) bmWidth;
            float scaleY = (float) viewHeight / (float) bmHeight;
            scale = Math.min(scaleX, scaleY);
            matrix.setScale(scale, scale);

            // Center the image            float redundantYSpace = (float) viewHeight                    - (scale * (float) bmHeight);
            float redundantXSpace = (float) viewWidth                    - (scale * (float) bmWidth);
            redundantYSpace /= (float) 2;
            redundantXSpace /= (float) 2;

            matrix.postTranslate(redundantXSpace, redundantYSpace);

            origWidth = viewWidth - 2 * redundantXSpace;
            origHeight = viewHeight - 2 * redundantYSpace;
            setImageMatrix(matrix);
        }
        fixTrans();
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.pinchtozoom.MainActivity">

    <com.pinchtozoom.TouchImageView        android:layout_width="match_parent"        android:layout_height="fill_parent"        android:id="@+id/image"        android:src="@drawable/image_bg"/>

</LinearLayout>

MainActivity.java

package com.pinchtozoom;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    TouchImageView image;

    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        image = (TouchImageView)findViewById(R.id.image);
    }
}

Monday, 15 May 2017

Android YouTube Integration Example

My title
Android Studio YouTube Integration Example



Create Application

First step in registering application is create a new application developer console. So, go to Google Developer Console. Create a new project, named Youtube Video.

Enable YouTube API

To use API, first you need to enable them in the dashboard. So, click on the Enable and manage APIs.
This will redirect you to list of all the Google APIs. Here, click on the YouTube Data API to enable YouTube API for your project.


In the resulting screen, click on Enable button which will enable the API and will ask you to create credentials for your application.


After enabling the API, you need to create the credentials to authenticate app. To create credentials, click on Go To Credentials button in the dashboard.


This will redirect you to create Android Key form.



Download Library

First step in integrating YouTube Player API is downloading the YouTube Android Player API Library. Use YouTube Android Player API link to download the latest library and move it to app’s libs folder. Now, you need to add the library as application dependency. To do so, open app’s build.gradle file and add the below line as dependency :

compile fileTree(dir: 'libs', include: ['*.jar'])

androidTestCompile 'com.android.support.test:runner:0.5'
androidTestCompile 'com.android.support:support-annotations:25.2.0'



AndroidManjfest.xml

<uses-permission android:name="android.permission.INTERNET"/>

Activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.youtubevideo.MainActivity">

    <com.google.android.youtube.player.YouTubePlayerView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/youtube_player_view">

    </com.google.android.youtube.player.YouTubePlayerView>

</RelativeLayout>


MainActivity.java

package com.youtubevideo;

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

import com.google.android.youtube.player.YouTubeBaseActivity;
import com.google.android.youtube.player.YouTubeInitializationResult;
import com.google.android.youtube.player.YouTubePlayer;
import com.google.android.youtube.player.YouTubePlayerView;


public class MainActivity extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener {

    //AIzaSyB6dzPRjIZNe_OE6kJRes6370TV4vrTnL0
    public static final String API_KEY = "AIzaSyB6dzPRjIZNe_OE6kJRes6370TV4vrTnL0";

    //https://www.youtube.com/watch?v=<VIDEO_ID>
    public static final String VIDEO_ID = "3VxWcqo2sqs";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Initializing YouTube player view
        YouTubePlayerView youTubePlayerView = (YouTubePlayerView) findViewById(R.id.youtube_player_view);
        youTubePlayerView.initialize(API_KEY, this);
    }

    @Override
    public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) {
        if(null== player) return;

        // Start buffering
        if (!wasRestored) {
            player.cueVideo(VIDEO_ID);
        }

        // Add listeners to YouTubePlayer instance
        player.setPlayerStateChangeListener(new YouTubePlayer.PlayerStateChangeListener() {
            @Override public void onAdStarted() { }
            @Override public void onError(YouTubePlayer.ErrorReason arg0) { }
            @Override public void onLoaded(String arg0) { }
            @Override public void onLoading() { }
            @Override public void onVideoEnded() { }
            @Override public void onVideoStarted() { }
        });


        player.setPlaybackEventListener(new YouTubePlayer.PlaybackEventListener() {
            @Override public void onBuffering(boolean arg0) { }
            @Override public void onPaused() { }
            @Override public void onPlaying() { }
            @Override public void onSeekTo(int arg0) { }
            @Override public void onStopped() { }
        });
    }

    @Override
    public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
        Toast.makeText(this, "Failed to initialize.", Toast.LENGTH_LONG).show();

    }
}



CCAvenue Payment Gateway Android Integration

CCAvenue Payment Gateway Android Integration CCAvenue payment gateway android integration using PHP RSA and Response Handling. An...