Tuesday, 19 November 2013

Android pushNotification badge ICON similar to IOS


1.    Create a appwidget-provider xml name it as widget_badge_icon.xml and add it in xml folder
2.    Create a widget_badge_layout .xml as per need.
3.    Create a receiver in manifest file.
4.    Create BadgeNotificationWidget Class:


package com.example.testwidget;

import java.util.Timer;

import java.util.TimerTask;

import android.app.IntentService;
import android.appwidget.AppWidgetManager;
import android.content.ComponentName;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.widget.RemoteViews;

/**
 * BadgeService is a worker thread used to send the badge number as a broadcast
 * message to change the app icon.
 *
 *
 */
public class BadgeService extends IntentService {

    int count = 0;

    Timer timer;

    int randomNo = 10;

    public BadgeService() {
        super("BadgeService");
        timer = new Timer();
    }

    /**
     * This method is invoked on the worker thread with a request to process.
     */
    @Override
    protected void onHandleIntent(final Intent intent) {

        RemoteViews remoteView = new RemoteViews(getApplicationContext()
                .getPackageName(), R.layout.widget_badge_layout);

        ComponentName componentName = new ComponentName(
                getApplicationContext(), BadgeNotificationWidgetActivity.class);

        AppWidgetManager appWidgetManager = AppWidgetManager
                .getInstance(getApplicationContext());

        Log.d("BadgeNotificationWidgetActivity", "BadgeService randomNo"
                + randomNo);
        if (randomNo == 0) {
            remoteView.setViewVisibility(R.id.badgeNum, View.GONE);
        } else {
            remoteView.setViewVisibility(R.id.badgeNum, View.VISIBLE);
        }

        remoteView.setTextViewText(R.id.badgeNum, String.valueOf(randomNo));
        // apply changes to widget
        appWidgetManager.updateAppWidget(componentName, remoteView);

    }
}






package com.example.testwidget;




import android.os.Bundle;

import android.app.Activity;
import android.content.Intent;
import android.view.Menu;

public class MainActivity extends Activity {

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

   
   
    @Override
    protected void onStart() {
        super.onStart();
        startService(new Intent(this, BadgeService.class));
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}




package com.example.testwidget;

import android.appwidget.AppWidgetManager;

import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.util.Log;
import android.widget.RemoteViews;

public class BadgeNotificationWidgetActivity extends AppWidgetProvider {

   

   

   

}





<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.testwidget"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/image"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.testwidget.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
       
        <service android:name=".BadgeService" >
        </service>
       
       
         <receiver
            android:name="com.example.testwidget.BadgeNotificationWidgetActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>

            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/widget_badge_icon" />
        </receiver>
    </application>

</manifest>



badge_circle.xml


<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval" >

    <corners android:radius="10dip" />

    <solid android:color="#F00" />

    <stroke
        android:width="5dp"
        android:color="#FFF" />

    <padding
        android:bottom="8dp"
        android:left="10dp"
        android:right="10dp"
        android:top="8dp" />

</shape>

widget_badge_icon.xml


<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:initialLayout="@layout/widget_badge_layout"
    android:minHeight="40dp"
    android:minWidth="40dp"
    android:updatePeriodMillis="30000" >

</appwidget-provider>


Following link contains source code   Sample Source

HTML Report using Lint

The following command is used to generate lint error report in android

On the command prompt redirect to the android---->sdk---->tools
Then type lint --html --sample pathoftheproject

HTML report gets generated in the sdk--->tools with the name --sample



TreeMap is an example of a SortedMap, which means that the order of the keys can be sorted, and when iterating over the keys, you can expect that they will be in order.

HashMap on the other hand, makes no such guarantee. Therefore, when iterating over the keys of a HashMap, you can't be sure what order they will be in.

HashMap will be more efficient in general, so use it whenever you don't care about the order of the keys.


Daemon thread in Java are those thread which runs in background and mostly created by JVM for performing background task like Garbage collection and other house keeping tasks. Difference between Daemon and Non Daemon(User Threads)  is also an interesting multi-threading interview question, which asked mostly on fresher level java interviews. In one line main difference between daemon thread and user thread is that as soon as all user thread finish execution java program or JVM terminates itself, JVM doesn't wait for daemon thread to finish there execution. As soon as last non daemon thread finished JVM terminates no matter how many Daemon thread exists or running inside JVM.


Read more: http://javarevisited.blogspot.com/2012/03/what-is-daemon-thread-in-java-and.html#ixzz2pyQBJtx4


 1) JVM doesn't wait for any daemon thread to finish before existing.

2) Daemon Thread are treated differently than User Thread when JVM terminates, finally blocks are not called, Stacks are not unwounded and JVM just exits.

Read more: http://javarevisited.blogspot.com/2012/03/what-is-daemon-thread-in-java-and.html#ixzz2pyR6S9Kt
 

Friday, 8 November 2013

Package name and App name

System.out.println("print here "+getApplicationContext().getPackageName());
        System.out.println("print here complete name "+getApplicationContext().getPackageName().concat("."+getApplicationContext().getString(getApplicationContext().getApplicationInfo().labelRes)));

Pass a HashMap from Angular Client to Spring boot API

This example is for the case where fileData is very huge and in json format   let map = new Map<string, string>()      map.set(this.ge...