Friday, December 30, 2011

Kindle Fire with Android 4.0 Ice Cream Sandwich

Research shows Android keeps climbing, BlackBerry keeps shrinking

Research shows Android keeps climbing, BlackBerry keeps shrinking:

'via Blog this'

Wednesday, August 31, 2011

Islam & Android: A Fusion of Technology & Theology




Religion plays a pivotal role in the way how people think, behave and lead their day to day lives. Islam is no doubt the fastest growing religion in the United States and the 2nd largest religion in the world. With the advent of smartphones, a modern Muslim can always be  at ease to perform their prayers, and other religious practices. There are a number of Android apps on the market that are a great mentor for Muslims, a few of which i would like to mention here:


Islamic Prayer Times.  An Android app with azan and prayer time alarms.

Quran Android.  This app provides the text of the Quran in Arabic along with translations in a number of languages.

Muslims Pro.  For Android phones, this app has an Islamic calendar, qibla direction and Julian dates of Islamic holidays, in addition to the Quran in Arabic and Roman English text along with an English translation.  

Tuesday, June 21, 2011

Things That Cannot Change by Dianne Hackborn

Sometimes a developer will make a change to an application that has surprising results when installed as an update to a previous version — shortcuts break, widgets disappear, or it can’t even be installed at all. There are certain parts of an application that are immutable once you publish it, and you can avoid surprises by understanding them.


For more information read Dianne Hacborn's article at:
http://android-developers.blogspot.com/index.html

Thursday, March 17, 2011

Google Translate "Conversation Mode" in action

Tutorial: Using Google Translate API In Android

main.xml:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    />
</LinearLayout>



Translator.java:


package com.myapps.translate;


import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;


import com.google.api.translate.Language;
import com.google.api.translate.Translate;


public class Translator extends Activity {
    /** Called when the activity is first created. */
String translatedText;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        TextView tv = new TextView(this);
        Translate t = new Translate();
        
        try {
translatedText = t.execute("Bonjour le monde", Language.FRENCH, Language.ENGLISH);


//tv.setText(translatedText);
        } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


        Toast.makeText(this, translatedText, Toast.LENGTH_SHORT).show();
        
        tv.setText(translatedText);
        
        setContentView(tv);
    }
}



Note: Download google-api-translate-java-0.95.jar from http://code.google.com/p/google-api-translate-java/downloads/list and import it as an external jar file. (Right-click project->Properties->Java Build Path-> Libraries->Add External JARS...).

Monday, March 14, 2011

Source Code To Display Battery Info & Chart



Following code displays battery-related details on Android phones. I programmed it on Android 1.6. The code still needs some refinement though. And the following code is inspired and extracted from the android sample code for drawings and shapes. 
Visitors and members of the blog are warmly welcomed to play with it and refine it further.


ShapeDrawable1.java


package com.myapps.batterystatus;

import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.ComposePathEffect;
import android.graphics.CornerPathEffect;
import android.graphics.DiscretePathEffect;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PathEffect;
import android.graphics.RectF;
import android.graphics.Shader;
import android.graphics.SweepGradient;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.ArcShape;
import android.graphics.drawable.shapes.OvalShape;
import android.graphics.drawable.shapes.PathShape;
import android.graphics.drawable.shapes.RectShape;
import android.graphics.drawable.shapes.RoundRectShape;
import android.graphics.drawable.shapes.Shape;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class ShapeDrawable1 extends GraphicsActivity {

 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
       // setContentView(R.layout.main);
        setContentView(new SampleView(this));
        
       //startActivity(new Intent(ShapeDrawable1.this,ShapeDrawable1.class));
    }
    
    
    
    private static class SampleView extends View {
        private ShapeDrawable[] mDrawables;
        
        private TextView tv;
        private static Shader makeSweep() {
            return new SweepGradient(150, 50,
                new int[] { 0xFFFF0000, 0xFF00FF00, 0xFF0000FF, 0xFFFF0000 },
                null);
        }
        
        private static Shader makeLinear() {
            return new LinearGradient(0, 0, 100, 100,
                              new int[] { 0xFFFF0000, 0xFF00FF00, 0xFF0000FF },
                              null, Shader.TileMode.REPEAT);
        }
        
        private static Shader makeTiling() {
            int[] pixels = new int[] { 0xFFFF0000, 0xFF00FF00, 0xFF0000FF, 0};
            Bitmap bm = Bitmap.createBitmap(pixels, 2, 2,
                                            Bitmap.Config.ARGB_8888);
            
            return new BitmapShader(bm, Shader.TileMode.REPEAT,
                                        Shader.TileMode.REPEAT);
        }
        
        private static class MyShapeDrawable extends ShapeDrawable {
            private Paint mStrokePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
            
            public MyShapeDrawable(Shape s) {
                super(s);
                mStrokePaint.setStyle(Paint.Style.STROKE);
            }
            
            public Paint getStrokePaint() {
                return mStrokePaint;
            }
            
            @Override protected void onDraw(Shape s, Canvas c, Paint p) {
                s.draw(c, p);
                s.draw(c, mStrokePaint);
            }
            
          private void setText(String s)
          {
         this.setText(s);  
          }
            
          private String getText()
          {  
          return this.getText(); 
          }

        }
        
        public SampleView(Context context) {
            super(context);
            setFocusable(true);

            float[] outerR = new float[] { 12, 12, 12, 12, 0, 0, 0, 0 };
            RectF   inset = new RectF(6, 6, 6, 6);
            float[] innerR = new float[] { 12, 12, 0, 0, 12, 12, 0, 0 };
            
            Path path = new Path();
            path.moveTo(50, 0);
            path.lineTo(0, 50);
            path.lineTo(50, 100);
            path.lineTo(100, 50);
            path.close();
            
            mDrawables = new ShapeDrawable[8];
            mDrawables[0] = new ShapeDrawable(new RectShape());
            mDrawables[1] = new ShapeDrawable(new OvalShape());
            mDrawables[2] = new ShapeDrawable(new RoundRectShape(outerR, null,
                                                                 null));
            mDrawables[3] = new ShapeDrawable(new RoundRectShape(outerR, inset,
                                                                 null));
            mDrawables[4] = new ShapeDrawable(new RoundRectShape(outerR, inset,
                                                                 innerR));
            mDrawables[5] = new ShapeDrawable(new PathShape(path, 100, 100));
            
            //Complete circle
            mDrawables[6] = new MyShapeDrawable(new ArcShape(0, -365));
            
            //Setting percentage
            mDrawables[7] = new MyShapeDrawable(new ArcShape(0, BatteryLevel.perc * 365/100));
            
            
            mDrawables[0].getPaint().setColor(0xFFFF0000);
            mDrawables[1].getPaint().setColor(0xFF00FF00);
            mDrawables[2].getPaint().setColor(0xFF0000FF);
            mDrawables[3].getPaint().setShader(makeSweep());
            mDrawables[4].getPaint().setShader(makeLinear());
            mDrawables[5].getPaint().setShader(makeTiling());
            mDrawables[6].getPaint().setColor(0xFF0000FF);
            mDrawables[7].getPaint().setColor(0xFF00FF00);
            
            PathEffect pe = new DiscretePathEffect(10, 4);
            PathEffect pe2 = new CornerPathEffect(4);
            mDrawables[3].getPaint().setPathEffect(
                                                new ComposePathEffect(pe2, pe));
        
            MyShapeDrawable msd = (MyShapeDrawable)mDrawables[6];
            msd.getStrokePaint().setStrokeWidth(4);
            
           
        }
        
        @Override protected void onDraw(Canvas canvas) {
            
            int x = 10;
            int y = 10;
            int width = 400;
            int height = 800;
            
           /* for (Drawable dr : mDrawables) {
                dr.setBounds(x, y, x + width, y + height);
                dr.draw(canvas);                
                y += height + 5;
            }*/
            
            
            /*
            mDrawables[7] = new MyShapeDrawable(new ArcShape(0, -300));
            mDrawables[7].getPaint().setColor(0xFF00FF00);
            mDrawables[7].setBounds(x, y, 150, 150);
            mDrawables[7].draw(canvas);
            y += height + 5;
            */
            
            //setting width and height and location of Pie Chart
       
            mDrawables[6].setBounds(x, 70, 120, 170);
            mDrawables[6].draw(canvas);
            y += height + 5;
            
            
            mDrawables[7].setBounds(x, 70, 120, 170);
            mDrawables[7].draw(canvas);
            y += height + 5;
            
            
            
            
            
         
        }
    }
}


PictureLayout.java

package com.myapps.batterystatus;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Picture;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;


public class PictureLayout extends ViewGroup {
    private final Picture mPicture = new Picture();

    public PictureLayout(Context context) {
        super(context);
    }

    public PictureLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }    

    @Override
    public void addView(View child) {
        if (getChildCount() > 10) {
            throw new IllegalStateException("PictureLayout can host only one direct child");
        }

        super.addView(child);
    }

    @Override
    public void addView(View child, int index) {
        if (getChildCount() > 10) {
            throw new IllegalStateException("PictureLayout can host only one direct child");
        }

        super.addView(child, index);
    }

    @Override
    public void addView(View child, LayoutParams params) {
        if (getChildCount() > 10) {
            throw new IllegalStateException("PictureLayout can host only one direct child");
        }

        super.addView(child, params);
    }

    @Override
    public void addView(View child, int index, LayoutParams params) {
        if (getChildCount() > 10) {
            throw new IllegalStateException("PictureLayout can host only one direct child");
        }

        super.addView(child, index, params);
    }

    @Override
    protected LayoutParams generateDefaultLayoutParams() {
        return new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        final int count = getChildCount();

        int maxHeight = 480;
        int maxWidth = 320;

        for (int i = 0; i < count; i++) {
            final View child = getChildAt(i);
            if (child.getVisibility() != GONE) {
                measureChild(child, widthMeasureSpec, heightMeasureSpec);
            }
        }

        maxWidth += getPaddingLeft() + getPaddingRight();
        maxHeight += getPaddingTop() + getPaddingBottom();

        Drawable drawable = getBackground();
        if (drawable != null) {
            maxHeight = Math.max(maxHeight, drawable.getMinimumHeight());
            maxWidth = Math.max(maxWidth, drawable.getMinimumWidth());
        }

        setMeasuredDimension(resolveSize(maxWidth, widthMeasureSpec),
                resolveSize(maxHeight, heightMeasureSpec));
    }
    
    private void drawPict(Canvas canvas, int x, int y, int w, int h,
                          float sx, float sy) {
        canvas.save();
        canvas.translate(x, y);
        canvas.clipRect(0, 0, w, h);
        canvas.scale(1.5f, 1.5f);
        canvas.scale(sx, sy, w, h);
        canvas.drawPicture(mPicture);
        
        canvas.restore();
    }

    @Override
    protected void dispatchDraw(Canvas canvas) {
        super.dispatchDraw(mPicture.beginRecording(getWidth(), getHeight()));
        mPicture.endRecording();
        
        int x = getWidth()/2;
        int y = getHeight()/2;
        
        if (false) {
            canvas.drawPicture(mPicture);
        } else {
            drawPict(canvas, 0, 0, x*10, y*10,  1,  1);
            //drawPict(canvas, x, 0, x, y, -1,  1);
            //drawPict(canvas, 0, y, x, y,  1, -1);
            //drawPict(canvas, x, y, x, y, -1, -1);
        }
    }

    @Override
    public ViewParent invalidateChildInParent(int[] location, Rect dirty) {
        location[0] = getLeft();
        location[1] = getTop();
        dirty.set(100, 100, getWidth(), getHeight());
        return getParent();
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        final int count = super.getChildCount();

        for (int i = 0; i < count; i++) {
            final View child = getChildAt(i);
            if (child.getVisibility() != GONE) {
                final int childLeft = getPaddingLeft();
                final int childTop = getPaddingTop();
                child.layout(childLeft, childTop,
                        childLeft + child.getMeasuredWidth(),
                        childTop + child.getMeasuredHeight());

            }
        }
    }
}


GraphicsActivity.java

package com.myapps.batterystatus;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

//@SuppressWarnings("deprecation")
class GraphicsActivity extends Activity {
TextView tv;
String strChargingStatus="";
TextView tvChargingStatus;
TextView tvVoltage;
TextView tvTemp;
TextView tvHealth;
TextView tvTech;
LinearLayout layout;
ImageView iv;
     
        
public final int delay = 1;    
        
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);        
        
        layout = new LinearLayout(this);
        
        layout.setBackgroundResource(R.drawable.inner);
        
        
        BatteryLevel BatLvl = new BatteryLevel();
       
        //iv = new ImageView(this);
       
        //iv.setBackgroundResource(R.drawable.inner);
        //iv.setImageResource(R.drawable.inner);
        
        tv = new TextView(this);
        tv.setText("percentage");
        
        //Toast.makeText(this, "testing", Toast.LENGTH_SHORT).show();
       
        tvChargingStatus = new TextView(this);
        tvChargingStatus.setTextSize(10);
        tvChargingStatus.setText(BatteryLevel.chargingStatus);
        tvChargingStatus.setTextColor(Color.BLACK);
        tvChargingStatus.setPadding(50, 175, 0, 0);
        
        
        tvVoltage = new TextView(this);
        tvVoltage.setText("Voltage: " + BatteryLevel.batteryVol);
        tvVoltage.setTextSize(10);
        tvVoltage.setTextColor(Color.BLACK);
        tvVoltage.setPadding(10, 220,0,0);
        
        tvTemp = new TextView(this);
        tvTemp.setText("Temperature: " + BatteryLevel.batteryTemp);
        tvTemp.setTextSize(10);
        tvTemp.setTextColor(Color.BLACK);
        tvTemp.setPadding(10, 240,0,0);
        
        tvHealth = new TextView(this);
        tvHealth.setText("Health: " + BatteryLevel.batteryHealth);
        tvHealth.setTextSize(10);
        tvHealth.setTextColor(Color.BLACK);
        tvHealth.setPadding(127, 220,0,0);        
        //setContentView(tv);
        
        tvTech = new TextView(this);
        tvTech.setText("Technology: " + BatteryLevel.batteryTech);
        tvTech.setTextSize(10);
        tvTech.setTextColor(Color.BLACK);
        tvTech.setPadding(127, 240,0,0); 
    }

    @Override
    public void setContentView(View view) {
    
     tv = new TextView(this);
     tv.setTextSize(40);
     tv.setTextColor(Color.BLACK);
     //tv.setPadding(0, 0, 10, 10);
     tv.setText("\n\n            " + BatteryLevel.batteryLevel);
    
    
        if (true) { // set to true to test Picture
            ViewGroup vg = new PictureLayout(this);
            
            //vg.addView(iv);
            vg.addView(layout);
            vg.addView(tv);
            //vg.addView(tvChargingStatus);
            vg.addView(tvVoltage);
            vg.addView(tvTemp);
            vg.addView(tvHealth);
            vg.addView(tvTech);
            vg.addView(view);
            
            
            //vg.addView(R.layout.main);
            view = vg;
        }
      
      
        super.setContentView(view);
        
        
        //this.startActivity(new Intent(GraphicsActivity.this,GraphicsActivity.class));
    }

}

BatteryLevel.java

package com.myapps.batterystatus;




import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;
import android.widget.Toast;

public class BatteryLevel extends Activity { 
    private TextView tvBatteryLevel; 
    private TextView tvBatteryTemp;
    private TextView tvBatteryVol;
    private TextView tvBatteryHealth;
    private TextView tvBatteryTech;
    private TextView tvChargingStatus;
    
    public static String chargingStatus;
    public static String batteryTemp;
    public static String batteryVol;
    public static String batteryHealth;
    public static String batteryLevel; 
    public static int perc;
    public static String batteryTech;
    
    public final int delay = 2500;
     
    private BroadcastReceiver mBatteryInfoReceiver = new BroadcastReceiver() { 
         @Override 
         public void onReceive(Context context, Intent intent) { 
              String action = intent.getAction();
              
              /*Calculating Battery Power*/
              if (Intent.ACTION_BATTERY_CHANGED.equals(action)) { 

                   int level = intent.getIntExtra("level", 0); 
                   int scale = intent.getIntExtra("scale", 100); 

                   tvBatteryLevel.setText("Battery level: " 
                             + String.valueOf(level * 100 / scale) + "%");
                   perc = level * 100 / scale;
                   batteryLevel = String.valueOf(level * 100 / scale) + "%";
              } 
              
              /*Calculating Battery Temperature*/
              if (Intent.ACTION_BATTERY_CHANGED.equals(action)) { 

                  int tempLevel = intent.getIntExtra("temperature", 0); 
                  int scale = intent.getIntExtra("scale", 100); 

                  tvBatteryTemp.setText("Battery temperature: " 
                            + String.valueOf(tempLevel * 10 / scale) + " C"); 
                  
                  batteryTemp = String.valueOf(tempLevel * 10 / scale) + " C";
             } 
              
              /*Calculating Battery Voltage*/
             if (Intent.ACTION_BATTERY_CHANGED.equals(action)){
              
             int volLevel = intent.getIntExtra("voltage", 0);
             int scale = intent.getIntExtra("scale", 100);
              
             tvBatteryVol.setText("Battery voltage: "
              + String.valueOf(volLevel * 100/scale) + " mV");
              
             batteryVol = String.valueOf(volLevel * 100/scale) + " mV";
             } 
             
             
             /*Calculating Battery Health*/
             if (Intent.ACTION_BATTERY_CHANGED.equals(action)){
              
             int healthLvl;
             String healthStatus="";
              
             int healthLevel = intent.getIntExtra("health", 0);
             int scale = intent.getIntExtra("scale", 100);
              
             healthLvl = healthLevel * 100/scale;
              
             switch (healthLvl)
             {
             case 4: 
             healthStatus = "Bad";
             break;
             case 2:
             healthStatus = "Good";
             break;
             case 1:
             healthStatus = "Dead";
             break;  
              
             }
             tvBatteryHealth.setText("Battery health: "
              + healthStatus);
              
             batteryHealth =  healthStatus;
             } 
             
             /*Retrieving Battery Technology*/
             String batteryTechnology = intent.getStringExtra("technology");
             tvBatteryTech.setText("Technology:" + batteryTechnology);
             batteryTech = batteryTechnology;
             
             
             /*Retrieving Battery Charging Status*/
             int deviceChargingStatus = intent.getIntExtra("plugged" , 0);
             
             if (deviceChargingStatus == 0)
             {
             tvChargingStatus.setText("Charging Status: Not Charging");
              
             }
             else
             {
             tvChargingStatus.setText("Charging Status: Charging");
             }
             
             chargingStatus = (String) tvChargingStatus.getText();
             //Toast.makeText(BatteryLevel.this, tvChargingStatus.getText(), Toast.LENGTH_SHORT).show();
         } 
         
    }; 
     
    @Override 
    public void onResume() { 
         super.onResume(); 

         registerReceiver(mBatteryInfoReceiver, new IntentFilter( 
                   Intent.ACTION_BATTERY_CHANGED)); 
    } 

    @Override 
    public void onPause() { 
         super.onPause(); 

         unregisterReceiver(mBatteryInfoReceiver);          
    } 

   @Override 
   public void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.main); 
       
       tvBatteryLevel = (TextView) findViewById(R.id.tvBatteryLevel); 
       tvBatteryTemp = (TextView) findViewById(R.id.tvBatteryTemp); 
       tvBatteryVol = (TextView) findViewById(R.id.tvBatteryVol);
       tvBatteryHealth = (TextView) findViewById(R.id.tvBatteryHealth);
       tvBatteryTech = (TextView) findViewById (R.id.tvBatteryTech);
       tvChargingStatus = (TextView)findViewById(R.id.tvChargingStatus);
       
       
       
       new Handler().postDelayed(new Runnable(){
           public void run(){ 
            
           startActivity(new Intent(BatteryLevel.this, ShapeDrawable1.class));
           
           //Splash.this.finish();   
           
           }
       }, delay);
   } 
}

Some Outstanding Math & Graphing Apps on Android Market

3D Rendering and Computation with Renderscript

About Plotting On Android

Saturday, February 26, 2011

Tuesday, February 8, 2011

Google Unveils Android Market Webstore. It’s Already Live!

Android Development In Visual Studio


Introduction


vs-android is intended to provide a collection of scripts and utilities to support integrated development of Android NDK C/C++ software under Microsoft Visual Studio.
Currently vs-android only works under Visual Studio 2010. Earlier versions lack the MSBuild integration with the C/C++ compilation systems.
The only required component is the Android NDK. Neither Cygwin, Java, nor the full Android SDK are needed to compile and link C/C++ code.

Features

  • Compile and link Android C/C++ projects within Visual Studio.
  • Integrated development, no makefiles. Works as another 'Platform' type.
  • Android settings co-exist within the same VS projects as other platforms.
  • Supports static library projects, and links them in if marked as project dependencies.
  • Intellisense and 'External Dependencies' correctly pull in Android NDK headers.
  • Cygwin install is not required.
  • Around twice as fast as using ndk-build under Cygwin. For full rebuilds, and incremental changes.
  • Ctrl-F7: compile single file functions, has no dependency checking wait.
  • Supports invoking ant after linking, such that you end up with a packaged ready-to-deploy .apk file.
To download the latest version click here

Saturday, January 29, 2011

Android 3 Honeycomb 3.0 Preview 2011

Google To Give A Better Taste Of Honeycomb Next Week At Press Event And On YouTube

Tutorial: Android & Mind Games

Developing a game on android is a whole new ball game i.e. very different from making database apps. You have to know the logic behind every move. The flow of the program is complex and you also have to keep in mind about the memory issues if necessary.
Mind games are great mind-teasers as well as thrilling to the general smartphone users. Ever wondered what are the essentials that a typical mind game program is comprised of?
We usually have the following: Random Numbers, Timer, and MotionEvent.
Here is a source code for a little game on Android that i named "Reflexo", as it measures one's reflexes :)


main.xml

reflexo.java:


package com.games.reflexo;

import java.util.Random;

import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.MotionEvent;
import android.view.View;

import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

public class Reflexo extends Activity {
/** Called when the activity is first created. */

int score = 0;


int left = 0;
int top = 0;
int right = 0;
int bottom = 0;

Button startGame;
ImageView imgView;
TextView scoreDisplay;

MyCount counter;
int length = 10000;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

startGame = (Button)findViewById(R.id.start);
imgView = (ImageView)findViewById(R.id.img);
scoreDisplay = (TextView)findViewById(R.id.score);

startGame.setOnClickListener(new View.OnClickListener(){

public void onClick(View v)
{
startGame.setVisibility(0);
counter.start();
}

});

imgView.setOnTouchListener(new OnTouchListener(){

public boolean onTouch(View v,MotionEvent e) {


if (e.getAction() == MotionEvent.ACTION_DOWN)
{
score++;
}
return true;
}});


counter = new MyCount(length, 300);
}


public class MyCount extends CountDownTimer
{

public MyCount(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);



}

public void onFinish() {
scoreDisplay.setVisibility(1);
scoreDisplay.setText("Score:" + score);
}

public void onTick(long millisUntilFinished) {

Random randomNum = new Random();
left = randomNum.nextInt(200);
top = randomNum.nextInt(400);
right = randomNum.nextInt(200);
bottom = randomNum.nextInt(400);



if (millisUntilFinished / 100 % 2 == 0)
{
imgView.setPadding(left, top, right, bottom);
imgView.setVisibility(View.VISIBLE);
}
else
{
imgView.setVisibility(View.INVISIBLE);
}


}
}


}