Thursday, June 23, 2016

AES Encryption Decryption in Android



This is the easiest way of implementing AES Encryption and Decryption in Android.



import javax.crypto.Cipher;
 import javax.crypto.SecretKey;
 import javax.crypto.spec.SecretKeySpec;

public class AESEncryptionDecryption {

private static final byte[] keyValue =
        new byte[]{'c', 'o', 'd', 'i', 'n', 'g', 'a', 'f', 'f', 'a', 'i', 'r', 's', 'c', 'o', 'm'};


public static String encrypt(String cleartext)
        throws Exception {
    byte[] rawKey = getRawKey();
    byte[] result = encrypt(rawKey, cleartext.getBytes());
    return toHex(result);
}

public static String decrypt(String encrypted)
        throws Exception {

    byte[] enc = toByte(encrypted);
    byte[] result = decrypt(enc);
    return new String(result);
}

private static byte[] getRawKey() throws Exception {
    SecretKey key = new SecretKeySpec(keyValue, "AES");
    byte[] raw = key.getEncoded();
    return raw;
}

private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
    SecretKey skeySpec = new SecretKeySpec(raw, "AES");
    Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
    byte[] encrypted = cipher.doFinal(clear);
    return encrypted;
}

private static byte[] decrypt(byte[] encrypted)
        throws Exception {
    SecretKey skeySpec = new SecretKeySpec(keyValue, "AES");
    Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.DECRYPT_MODE, skeySpec);
    byte[] decrypted = cipher.doFinal(encrypted);
    return decrypted;
}

public static byte[] toByte(String hexString) {
    int len = hexString.length() / 2;
    byte[] result = new byte[len];
    for (int i = 0; i < len; i++)
        result[i] = Integer.valueOf(hexString.substring(2 * i, 2 * i + 2),
                16).byteValue();
    return result;
}

public static String toHex(byte[] buf) {
    if (buf == null)
        return "";
    StringBuffer result = new StringBuffer(2 * buf.length);
    for (int i = 0; i < buf.length; i++) {
        appendHex(result, buf[i]);
    }
    return result.toString();
}

private final static String HEX = "0123456789ABCDEF";

private static void appendHex(StringBuffer sb, byte b) {
    sb.append(HEX.charAt((b >> 4) & 0x0f)).append(HEX.charAt(b & 0x0f));
}
String encrypted = "";
try {
    encrypted = AESEncryptionDecryption.encrypt(plain_text);
    Log.d(Constants.firebase_app, "encrypted:" + encrypted);
} catch (Exception e) {
    e.printStackTrace();
}
*********************************************************************
String decrypted = "";
try {
    decrypted = AESEncryptionDecryption.decrypt(encrypted);
    Log.d(Constants.firebase_app, "decrypted:" + decrypted);
} catch (Exception e) {
    e.printStackTrace();
}

Author:
Hammad Tariq
Android Developer

Monday, June 20, 2016

Allatori obfuscator android mapping file location






If you are using Allatori for obfuscation and want to get non obfuscated stack track in crash reporting or your app logs than use mapping files generataed by Allatori during obfuscation.


From following address
Project\AppName\build\intermediates\classes\allatori-log-debug.xml
Project\AppName\app\build\intermediates\classes\allatori-log-release.xml


Use stack trace utility and stack trace and mapping file from above location
to get non obfuscated stack trace. so that you can fix issues :)




Author:
Hammad Tariq

Android Developer

Friday, June 17, 2016

How to Convert Drawable to Bitmap in Android




In this tutorial I will explain how to read Drawable from resources as Bitmap and than I will write down some common techniques for processing Bitmaps.


public final static Integer[] imageResIds = new Integer[]{
R.drawable.a, R.drawable.b, R.drawable.c,
R.drawable.d, R.drawable.e, R.drawable.f,
R.drawable.k, R.drawable.l, R.drawable.m};


loadBitmap(imageResIds[index], mImageView);



public void loadBitmap(int resId, ImageView imageView) {
 //Now we have bitmap object from drawable resource. we can scale this bitmap
 //according to device screen density.
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), data);

}

Note: This method can cause out of memory error.
- If you want to avoid this exception use scaled down version of bitmap in memory.
- Process Bitmaps Off the UI thread (Use Async Task).




Author:
Hammad Tariq
Android Developer




Tuesday, May 24, 2016

Check if your Android app is in foreground or background


Now I have my Own Blog. Follow Link to learn more about Android Development.


In this example I will explain how to check if your Android Application is running in foreground or it is in background.

Note: we do not need to add any permission for this code. we will be using ActivityManager class
and its method getRunningAppProcesses()
getRunningAppProcesses() Returns a list of application processes that are running on the device.

Also I am using AsyncTask because we should not call ActivityManager.getRunningAppProcesses()
from UI thread it will return importance IMPORTANCE_FOREGROUND for your task no matter whether it is actually in the foreground or not.


 private class CheckIfForeground extends AsyncTask<Void, Void, Void> {
    @Override
    protected Void doInBackground(Void... voids) {

        ActivityManager activityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
        for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {
            if (appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                Log.i("Foreground App", appProcess.processName);

                if (mContext.getPackageName().equalsIgnoreCase(appProcess.processName)) {
                    Log.i(Constants.TAG, "foreground true:" + appProcess.processName);
                    foreground = true;
                    // close_app();
                }
            }
        }
        Log.d(Constants.TAG, "foreground value:" + foreground);
        if (foreground) {
            foreground = false;
            close_app();
            Log.i(Constants.TAG, "Close App and start Login Activity:");

        } else {
            //if not foreground
            close_app();
            foreground = false;
            Log.i(Constants.TAG, "Close App");

        }

        return null;
    }
}
and execute AsyncTask like this.
new CheckIfForeground().execute();
Please Note this code is tested on Android Version 5.0.2


Author:
Hammad Tariq
Android Developer

Wednesday, May 18, 2016

android-material-design-small-rating-bar


Hello Guys, Now I have my own Blog Site. please visit Link for more Android and Kotlin Tutorials.







In this example I will teach you how to add Material Design and smaller Rating Bar in your Android Application.
Resulting smaller and material design rating bar can be seen in attached image.

Add this in your layout XML file.


                    <RatingBar
                    style="@style/RatingBar"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:numStars="5"
                    android:rating="3.5"
                    android:stepSize="0.5" />

Open styles.xml file and add below code in styles file for styling rating bar.
Basic idea is to set parent to material rating bar to smaller.

<style name="RatingBar"   
parent="android:style/Widget.Material.RatingBar.Small">
<item name="colorControlNormal">@color/primary_light</item>
<item name="colorControlActivated">@color/primary_dark</item>
</style>


This style can only be used as indicator. it do not support user interaction. If you need to support user interaction use Default Rating Bar. i.e 

"Base.Widget.AppCompat.RatingBar" as parent. Also num of stars property only works with
 width wrap content when working with default Rating Bar.

You can customise rating bar to make it look like standard yellow rating bar using below
properties in xml.



android:progressBackgroundTint="@color/primary_light"
android:progressTint="@color/rating_star"
android:secondaryProgressTint="@color/primary_light"



"progressTint" is rating color (yellow)"progressBackgroundTint" is default color (when no rating)
"secondaryProgressTint" is remaining color of partially filled rating star.


Note: Application theme is AppCompat and donot forget to add appcompat support dependency 
in build.gradle file.
Author:
Hammad Tariq
Android Developer



Friday, May 6, 2016

Pakistan News Papers Android Application



Pakistan news papers gives you access to all local and international news papers. It also has top technology and sports blogs. All e-Newspapers are added in this application. All Pakistan and International famous news papers are available in this application.
Read any newspaper in the world immediately. whether you want to check Score of any ongoing match or just want to check any local newspaper in Pakistan. Read Top National newspapers and International Newspapers free.
Designed for all android devices.
No pop up ads are added in application.
Jobs newspapers will be added soon.
List of available sites:
These are few of them.
BBC NEWS
AL JAZEERA
NY TIMES
CNN
THE NEWS
DAWN
EXPRESS
TRIBUNE
SKY SPORTS
ESPN
TEN SPORTS
CRIC INFO
LIFE HACKER
VALLEY VAG
ZDNET
GIZMODO

Kotlin Android MVP Dagger 2 Retrofit Tutorial

http://developine.com/building-android-mvp-app-in-kotlin-using-dagger-retrofit/