if(((Activity) context).isFinishing()) { return; }
Tuesday, February 28, 2017
showing dialog after activity finished
android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@6346ff9 is not valid; is your activity running?
Tuesday, February 14, 2017
Java Interface callback example
***** Interface classpublic class ExtServiceCallback { static ExtServiceCallback.Callback sCallbacks = null; public void runServiceCallback(String path, String method, String query, HashMap<String, String> headers, String msgBody) { sCallbacks.downToExtService(path, method, query, headers, msgBody); } public void setCallback(ExtServiceCallback.Callback callback) { sCallbacks = callback; } public interface Callback { public void downToExtService(String path, String method, String query, HashMap<String, String> headers, String msgBody); } }
***** App usage
protected void onCreate(Bundle savedInstanceState) { ServerCallback callback = new ServerCallback(); }public class ServerCallback extends ExtServiceCallback implements ExtServiceCallback.Callback { private static final String TAG = "ServerCallback"; public ServerCallback() { Log.e(TAG, "ServerCallback"); setCallback(this); } @Override public void downToExtService(String path, String method, String query, HashMap<String, String> headers, String msgBody) { Log.e(TAG, "path: " + path + ", " + "method: " + method + ", " + "query: " + query + ", " + "msgBody: " + msgBody); } }
Android Studio - add new module
File -> New -> Import Module...
src/app/main/build.gradle
src/app/main/build.gradle
dependencies {
compile project (':apolloRegistry')
}
Thursday, February 9, 2017
customized list view and helper APIs
import android.app.Activity;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import java.util.List;
public class CustomListViewAdapter extends ArrayAdapter<RowItem> {
private static final String TAG = "ListAdapter";
Context mContext;
Activity mActivity;
public CustomListViewAdapter(Context context, Activity activity, int resourceId,
List<RowItem> items) {
super(context, resourceId, items);
this.mContext = context;
this.mActivity = activity;
}
/*private view holder class*/
private class ViewHolder {
ImageView imageView;
TextView txtTitle;
TextView txtDesc;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
RowItem rowItem = getItem(position);
LayoutInflater mInflater = (LayoutInflater) mContext
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.video_list_layout, null);
holder = new ViewHolder();
holder.imageView = (ImageView) convertView.findViewById(R.id.icon);
holder.txtTitle = (TextView) convertView.findViewById(R.id.title);
holder.txtDesc = (TextView) convertView.findViewById(R.id.desc);
convertView.setTag(holder);
} else
holder = (ViewHolder) convertView.getTag();
holder.imageView.setImageResource(rowItem.getImageId());
holder.txtTitle.setText(rowItem.getTitle());
holder.txtDesc.setText(rowItem.getDesc());
return convertView;
}
RowItem getRowItem(int index) {
ListView selectList = (ListView) mActivity.findViewById(R.id.video_list_view);
ListAdapter lAdapter = selectList.getAdapter();
RowItem item = (RowItem) lAdapter.getItem(index);
Log.i(TAG, "item.link:" + item.getLink());
return item;
}
int getItemIndex(String title) {
int index;
ListView selectList = (ListView) mActivity.findViewById(R.id.video_list_view);
ListAdapter adapter = selectList.getAdapter();
for (index = 0; index < adapter.getCount(); index++) {
RowItem item = (RowItem) adapter.getItem(index);
if (item.getTitle().matches(title)) {
break;
}
}
if (index == adapter.getCount())
return -1;
return index;
}
public void setImageByIndex(TypedArray images, int index, int image_index) {
ListView listView = (ListView) mActivity.findViewById(R.id.video_list_view);
ListAdapter adapter = listView.getAdapter();
int wantedPosition = index; // Whatever position you're looking for
int firstPosition = listView.getFirstVisiblePosition() - listView.getHeaderViewsCount(); // This is the same as child #0
int wantedChild = wantedPosition - firstPosition;
if (wantedChild < 0 || wantedChild >= listView.getChildCount()) {
Log.w(TAG, "Unable to get view for desired position, because it's not being displayed on screen.");
return;
}
View wantedView = listView.getChildAt(wantedChild);
ViewHolder holder = (ViewHolder) wantedView.getTag();
holder.imageView.setImageResource(images.getResourceId(image_index, 0));
}
}
import android.content.Context;
import android.content.res.TypedArray;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import java.util.List;
public class CustomListViewAdapter extends ArrayAdapter<RowItem> {
private static final String TAG = "ListAdapter";
Context mContext;
Activity mActivity;
public CustomListViewAdapter(Context context, Activity activity, int resourceId,
List<RowItem> items) {
super(context, resourceId, items);
this.mContext = context;
this.mActivity = activity;
}
/*private view holder class*/
private class ViewHolder {
ImageView imageView;
TextView txtTitle;
TextView txtDesc;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
RowItem rowItem = getItem(position);
LayoutInflater mInflater = (LayoutInflater) mContext
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.video_list_layout, null);
holder = new ViewHolder();
holder.imageView = (ImageView) convertView.findViewById(R.id.icon);
holder.txtTitle = (TextView) convertView.findViewById(R.id.title);
holder.txtDesc = (TextView) convertView.findViewById(R.id.desc);
convertView.setTag(holder);
} else
holder = (ViewHolder) convertView.getTag();
holder.imageView.setImageResource(rowItem.getImageId());
holder.txtTitle.setText(rowItem.getTitle());
holder.txtDesc.setText(rowItem.getDesc());
return convertView;
}
RowItem getRowItem(int index) {
ListView selectList = (ListView) mActivity.findViewById(R.id.video_list_view);
ListAdapter lAdapter = selectList.getAdapter();
RowItem item = (RowItem) lAdapter.getItem(index);
Log.i(TAG, "item.link:" + item.getLink());
return item;
}
int getItemIndex(String title) {
int index;
ListView selectList = (ListView) mActivity.findViewById(R.id.video_list_view);
ListAdapter adapter = selectList.getAdapter();
for (index = 0; index < adapter.getCount(); index++) {
RowItem item = (RowItem) adapter.getItem(index);
if (item.getTitle().matches(title)) {
break;
}
}
if (index == adapter.getCount())
return -1;
return index;
}
public void setImageByIndex(TypedArray images, int index, int image_index) {
ListView listView = (ListView) mActivity.findViewById(R.id.video_list_view);
ListAdapter adapter = listView.getAdapter();
int wantedPosition = index; // Whatever position you're looking for
int firstPosition = listView.getFirstVisiblePosition() - listView.getHeaderViewsCount(); // This is the same as child #0
int wantedChild = wantedPosition - firstPosition;
if (wantedChild < 0 || wantedChild >= listView.getChildCount()) {
Log.w(TAG, "Unable to get view for desired position, because it's not being displayed on screen.");
return;
}
View wantedView = listView.getChildAt(wantedChild);
ViewHolder holder = (ViewHolder) wantedView.getTag();
holder.imageView.setImageResource(images.getResourceId(image_index, 0));
}
}
Wednesday, December 14, 2016
Wednesday, December 7, 2016
android file path convert content:// into file://
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
Uri uri;
uri = resultData.getData();
String path = UriHelpers.getFileForUri(getContext(), uri).getAbsolutePath();
public static File getFileForUri(final Context context, final Uri uri) {
String path = null;
// DocumentProvider
if (DocumentsContract.isDocumentUri(context, uri)) {
// ExternalStorageProvider
if (isExternalStorageDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
if ("primary".equalsIgnoreCase(type)) {
path = Environment.getExternalStorageDirectory() + "/" + split[1];
}
} else if (isDownloadsDocument(uri)) {
// DownloadsProvider
final String id = DocumentsContract.getDocumentId(uri);
final Uri contentUri = ContentUris
.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
path = getDataColumn(context, contentUri, null, null);
} else if (isMediaDocument(uri)) {
// MediaProvider
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
Uri contentUri = null;
if ("image".equals(type)) {
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
} else if ("video".equals(type)) {
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
} else if ("audio".equals(type)) {
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
}
final String selection = "_id=?";
final String[] selectionArgs = new String[] {
split[1]
};
path = getDataColumn(context, contentUri, selection, selectionArgs);
}
} else if ("content".equalsIgnoreCase(uri.getScheme())) {
// MediaStore (and general)
path = getDataColumn(context, uri, null, null);
} else if ("file".equalsIgnoreCase(uri.getScheme())) {
// File
path = uri.getPath();
}
if (path != null) {
return new File(path);
}
return null;
}
private static String getDataColumn(Context context, Uri uri, String selection,
String[] selectionArgs) {
Cursor cursor = null;
final String column = "_data";
final String[] projection = {
column
};
try {
cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,
null);
if (cursor != null && cursor.moveToFirst()) {
final int column_index = cursor.getColumnIndexOrThrow(column);
return cursor.getString(column_index);
}
} finally {
if (cursor != null) {
cursor.close();
}
}
return null;
}
private static boolean isExternalStorageDocument(Uri uri) {
return "com.android.externalstorage.documents".equals(uri.getAuthority());
}
private static boolean isDownloadsDocument(Uri uri) {
return "com.android.providers.downloads.documents".equals(uri.getAuthority());
}
private static boolean isMediaDocument(Uri uri) {
return "com.android.providers.media.documents".equals(uri.getAuthority());
}
}
Uri uri;
uri = resultData.getData();
String path = UriHelpers.getFileForUri(getContext(), uri).getAbsolutePath();
public static File getFileForUri(final Context context, final Uri uri) {
String path = null;
// DocumentProvider
if (DocumentsContract.isDocumentUri(context, uri)) {
// ExternalStorageProvider
if (isExternalStorageDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
if ("primary".equalsIgnoreCase(type)) {
path = Environment.getExternalStorageDirectory() + "/" + split[1];
}
} else if (isDownloadsDocument(uri)) {
// DownloadsProvider
final String id = DocumentsContract.getDocumentId(uri);
final Uri contentUri = ContentUris
.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
path = getDataColumn(context, contentUri, null, null);
} else if (isMediaDocument(uri)) {
// MediaProvider
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
Uri contentUri = null;
if ("image".equals(type)) {
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
} else if ("video".equals(type)) {
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
} else if ("audio".equals(type)) {
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
}
final String selection = "_id=?";
final String[] selectionArgs = new String[] {
split[1]
};
path = getDataColumn(context, contentUri, selection, selectionArgs);
}
} else if ("content".equalsIgnoreCase(uri.getScheme())) {
// MediaStore (and general)
path = getDataColumn(context, uri, null, null);
} else if ("file".equalsIgnoreCase(uri.getScheme())) {
// File
path = uri.getPath();
}
if (path != null) {
return new File(path);
}
return null;
}
private static String getDataColumn(Context context, Uri uri, String selection,
String[] selectionArgs) {
Cursor cursor = null;
final String column = "_data";
final String[] projection = {
column
};
try {
cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,
null);
if (cursor != null && cursor.moveToFirst()) {
final int column_index = cursor.getColumnIndexOrThrow(column);
return cursor.getString(column_index);
}
} finally {
if (cursor != null) {
cursor.close();
}
}
return null;
}
private static boolean isExternalStorageDocument(Uri uri) {
return "com.android.externalstorage.documents".equals(uri.getAuthority());
}
private static boolean isDownloadsDocument(Uri uri) {
return "com.android.providers.downloads.documents".equals(uri.getAuthority());
}
private static boolean isMediaDocument(Uri uri) {
return "com.android.providers.media.documents".equals(uri.getAuthority());
}
}
Thursday, December 1, 2016
ubuntu git clone gnutls_handshake() failed: Illegal parameter
http://askubuntu.com/questions/186847/error-gnutls-handshake-failed-when-connecting-to-https-servers
Trouble shootings
* Unmet build dependencies: libcurl4-openssl-dev
add "-d" option to override
Trouble shootings
* Unmet build dependencies: libcurl4-openssl-dev
add "-d" option to override
sudo dpkg-buildpackage -rfakeroot -b -d
remove "NO_OPENSSL=1" from debian/rules
Subscribe to:
Posts (Atom)