Pages

Tuesday 28 April 2015

Uninstall android studio from mac

Execute these commands from the terminal in mac
rm -Rf /Applications/Android\ Studio.app
rm -Rf ~/Library/Caches/AndroidStudio*
rm -Rf ~/Library/Logs/AndroidStudio*
rm -Rf ~/Library/Preferences/AndroidStudio*
rm ~/Library/Preferences/com.google.android.studio.plist
rm -Rf ~/Library/Application\ Support/AndroidStudio*

Extra commands. please read carefully before execute following
if you would like to delete all projects:
rm -Rf ~/AndroidStudioProjects
to remove gradle related files (caches & wrapper)
rm -Rf ~/.gradle
use the below command to delete all Android Virtual Devices(AVDs) and *.keystore. note: this folder is used by others Android IDE as well, so if you still using other IDE you may not want to delete this folder)
rm -Rf ~/.android
to delete Android SDK tools

rm -Rf ~/Library/Android*

Monday 27 April 2015

Same-named attributes in attrs.xml for custom view

Simply extract common attributes from both views and add them directly as children of the <resources>  node:
For Example

<resources>
    <attr format="string" name="myattr1">
    <attr format="integer" name="myattr2">

    <declare-styleable name="customView1">
        <attr name="myattr1">
        <attr name="myattr2">
        ...
    </attr></attr></declare-styleable>

    <declare-styleable name="customView2">
        <attr name="myattr1">
        <attr name="myattr2">
        ...
    </attr></attr></declare-styleable>

<!-- if want to use one attar -->
 <declare-styleable name="customView3">
        <attr name="myattr1">
      
        ...
    </attr></declare-styleable>
</attr></attr></resources>

Saturday 18 April 2015

Android get image, audio , video file list quickly

Android have inbuilt functions to retrive list.

Following is demo for Image list. for audio , video and even for other types of file you can use similar functions.

/**
* Used to get images from whole phone
*/
public void get_all_image_folders() {
// which image properties are we querying

String[] projection = new String[] { MediaStore.Images.Media._ID,
MediaStore.Images.Media.BUCKET_DISPLAY_NAME,
MediaStore.Images.Media.DATE_TAKEN
 };

Uri images = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;

// Make the query.

String sortOrder = MediaStore.Images.Media.DATE_TAKEN + " Desc";

Cursor cur = getContentResolver().query(images, projectionnull,null, sortOrder);
if (cur.moveToFirst()) {
String bucket;
String date;
int bucketColumn = cur
.getColumnIndex(MediaStore.Images.Media.BUCKET_DISPLAY_NAME);

int dateColumn = cur
.getColumnIndex(MediaStore.Images.Media.DATE_TAKEN);


do {
// Get the field values
bucket = cur.getString(bucketColumn);
date = cur.getString(dateColumn);

// Do something with the values.
Log.i("ListingImages", " bucket=" + bucket + "  date_taken="
+ date + "" );
} while (cur.moveToNext());

}

}

How to get size of all mounted or unmounted devices

StorageUtils class to find storage card info


import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.StringTokenizer;

import android.os.Environment;
import android.util.Log;

public class StorageUtils {

private static final String TAG = "StorageUtils";

public static class StorageInfo {

public final String path;
public final boolean readonly;
public final boolean removable;
public final int number;

StorageInfo(String path, boolean readonly, boolean removable, int number) {
this.path = path;
this.readonly = readonly;
this.removable = removable;
this.number = number;
}

public String getDisplayName() {
StringBuilder res = new StringBuilder();
if (!removable) {
res.append("Internal SD card");
} else if (number > 1) {
res.append("SD card " + number);
} else {
res.append("SD card");
}
if (readonly) {
res.append(" (Read only)");
}
return res.toString();
}
}

public static List<StorageInfo> getStorageList() {

List<StorageInfo> list = new ArrayList<StorageInfo>();
String def_path = Environment.getExternalStorageDirectory().getPath();
boolean def_path_removable = Environment.isExternalStorageRemovable();
String def_path_state = Environment.getExternalStorageState();
boolean def_path_available = def_path_state
.equals(Environment.MEDIA_MOUNTED)
|| def_path_state.equals(Environment.MEDIA_MOUNTED_READ_ONLY);
boolean def_path_readonly = Environment.getExternalStorageState()
.equals(Environment.MEDIA_MOUNTED_READ_ONLY);

HashSet<String> paths = new HashSet<String>();
int cur_removable_number = 1;

if (def_path_available) {
paths.add(def_path);
list.add(0, new StorageInfo(def_path, def_path_readonly,
def_path_removable,
def_path_removable ? cur_removable_number++ : -1));
}

BufferedReader buf_reader = null;
try {
buf_reader = new BufferedReader(new FileReader("/proc/mounts"));
String line;
Log.d(TAG, "/proc/mounts");
while ((line = buf_reader.readLine()) != null) {
Log.d(TAG, line);
if (line.contains("vfat") || line.contains("/mnt")
|| line.contains("/sdcard")) {
StringTokenizer tokens = new StringTokenizer(line, " ");
String unused = tokens.nextToken(); // device
String mount_point = tokens.nextToken(); // mount point
if (paths.contains(mount_point)) {
continue;
}
unused = tokens.nextToken(); // file system
List<String> flags = Arrays.asList(tokens.nextToken()
.split(",")); // flags
boolean readonly = flags.contains("ro");

if (line.contains("/dev/block/vold") || line.contains("/dev/fuse")) {
if (!line.contains("/mnt/secure")
&& !line.contains("/mnt/asec")
&& !line.contains("/mnt/obb")
&& !line.contains("/dev/mapper")
&& !line.contains("tmpfs")) {
paths.add(mount_point);
list.add(new StorageInfo(mount_point, readonly,
true, cur_removable_number++));
}
}
}
}

} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} finally {
if (buf_reader != null) {
try {
buf_reader.close();
} catch (IOException ex) {
}
}
}
return list;
}



}

----------------------------------------
In activity add following code.

private float[] getMemInfo(String path) {
StatFs statFs = new StatFs(path);
long blockSize = statFs.getBlockSize();
float totalSize = statFs.getBlockCount() * blockSize
/ (1024f * 1024f * 1024f);
float availableSize = statFs.getAvailableBlocks() * blockSize
/ (1024f * 1024f * 1024f);
float freeSize = statFs.getFreeBlocks() * blockSize
/ (1024f * 1024f * 1024f);

return new float[] { totalSize, availableSize, freeSize };

}

Print sd-card detail using following code
// sd card data

String storage = "";
List<StorageInfo> mList = StorageUtils.getStorageList();
for (int i = 0; i < mList.size(); i++) {
try {
StorageInfo mStorageInfo = mList.get(i);
float[] mInfo = getMemInfo(mStorageInfo.path);

storage += "\n External " + mStorageInfo.number + " : total = "
+ String.format("%.2f GB", mInfo[0])
+ " , available = "
+ String.format("%.2f GB", mInfo[1]);
} catch (Exception e) {
e.printStackTrace();
}

}
---------------------------
get RAM information

/**
* RAM related functions
*/

private int getFreeRamPercentage() {
MemoryInfo mi = new MemoryInfo();
ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
activityManager.getMemoryInfo(mi);
double raminfo[] = getTotalRAM();
int percentAvail = -1;
if (raminfo[0] != 0) {
percentAvail = (int) (mi.availMem * 100 / raminfo[0]);
}

return percentAvail;

}

public double[] getTotalRAM() {

RandomAccessFile reader = null;
String load = null;
DecimalFormat twoDecimalForm = new DecimalFormat("#.##");
double raminfo[] = new double[2];
String lastValue = "";
try {
reader = new RandomAccessFile("/proc/meminfo", "r");
load = reader.readLine();
Log.i("ram-info", load);
String total = parseInfoFromCommand(load);

load = reader.readLine();
Log.i("freee-ram-info", load);
String free = parseInfoFromCommand(load);

reader.close();

raminfo[0] = Double.parseDouble(total) * 1024;
raminfo[1] = Double.parseDouble(free) * 1024;
return raminfo;

} catch (IOException ex) {
ex.printStackTrace();
} finally {
}

return raminfo;
}

private String parseInfoFromCommand(String load) {
Pattern p = Pattern.compile("(\\d+)");
Matcher m = p.matcher(load);
String value = "";
while (m.find()) {
value = m.group(1);
}
return value;

}

Tuesday 14 April 2015

android list view row animation reference links

This is nice library.

just did minor changes in adapter like set duration etc and animation will work .
There are many animations like fade in ,fade out , wave, shake and many more.

https://github.com/karnshah8890/tech_andy/tree/master/ListviewAnimationDemo