Thursday, November 27, 2014

Intro To Material Design


These days, UI designers need to be thinking about phones, tablets, laptops, TVs, smartwatches, and beyond. In this DesignByte talk about how Google designers have been working on making cross-platform and multi-screen design easier. We wanted to build a design system that felt at home on every screen, from the smallest watch to the largest TV.

DesignBytes: Intro To Material Design

App Indexing for Google Search



The App Indexing API provides a way for developers to notify Google about deep links in their native apps and allows the Google app, version 3.6 and above, to drive re-engagement through Google Search query autocompletions, providing fast and easy access to inner pages in apps. The deep links reported using the App Indexing API are also used by Google to index app content and are surfaced in Google Search results.

In this video, product manager Lawrence Chang presents an overview of the new App Indexing API for Android that lets you specify links -- through your app itself -- for App Indexing. It also gives you a way to re-engage users through Google Search App autocompletions. We'll provide step-by-step guidelines for how to get started. Take a few minutes and find out how to increase user engagement using the App Indexing API.
 

Visit: https://developers.google.com/app-indexing/

Html.ImageGetter load image from internet, in AsyncTask

This example code use Html.ImageGetter load image from internet, in AsyncTask, to solve error of android.os.NetworkOnMainThreadException in the old example Html.ImageGetter load image from internet.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
package com.example.androidhtmltextview;
 
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
 
import android.support.v7.app.ActionBarActivity;
import android.text.Html;
import android.text.method.LinkMovementMethod;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
 
public class MainActivity extends ActionBarActivity {
 
 public class HttpGetDrawableTask extends AsyncTask<String, Void, Drawable> {
 
  TextView taskTextView;
  String taskHtmlString;
 
  HttpGetDrawableTask(TextView v, String s) {
   taskTextView = v;
   taskHtmlString = s;
  }
 
  @Override
  protected Drawable doInBackground(String... params) {
   Drawable drawable = null;
   URL sourceURL;
   try {
    sourceURL = new URL(params[0]);
    URLConnection urlConnection = sourceURL.openConnection();
    urlConnection.connect();
    InputStream inputStream = urlConnection.getInputStream();
    BufferedInputStream bufferedInputStream = new BufferedInputStream(
      inputStream);
    Bitmap bm = BitmapFactory.decodeStream(bufferedInputStream);
 
    // convert Bitmap to Drawable
    drawable = new BitmapDrawable(getResources(), bm);
 
    drawable.setBounds(0, 0, bm.getWidth(), bm.getHeight());
 
   } catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
 
   return drawable;
  }
 
  @Override
  protected void onPostExecute(Drawable result) {
 
   final Drawable taskDrawable = result;
 
   if (taskDrawable != null) {
    taskTextView.setText(Html.fromHtml(taskHtmlString,
     new Html.ImageGetter() {
 
      @Override
      public Drawable getDrawable(String source) {
       return taskDrawable;
      }
     }, null));
   }
 
  }
 
 }
 
 TextView htmlTextViewRemote;
 
 String htmlStringRemote = "Image load from internet"
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
 
  htmlTextViewRemote = new TextView(this);
  setContentView(htmlTextViewRemote);
 
  htmlTextViewRemote.setText(Html.fromHtml(htmlStringRemote,
   new Html.ImageGetter() {
 
    @Override
    public Drawable getDrawable(String source) {
 
     Toast.makeText(getApplicationContext(), source,
       Toast.LENGTH_LONG).show();
 
     HttpGetDrawableTask httpGetDrawableTask = new HttpGetDrawableTask(
       htmlTextViewRemote, htmlStringRemote);
     httpGetDrawableTask.execute(source);
 
     return null;
    }
 
   }, null));
 
  htmlTextViewRemote.setMovementMethod(LinkMovementMethod.getInstance());
 
 }
 
}

In order to load image from internet, permission of "android.permission.INTERNET" have to be added in AndroidManifest.xml.