project_files/Android-build/SDL-android-project/src/org/hedgewars/mobile/DownloadActivity.java
author Xeli
Thu, 14 Jul 2011 15:42:01 +0200
branchhedgeroid
changeset 5414 34663c4743f7
parent 5397 4ae1b082e4ba
permissions -rw-r--r--
Added a utility class needed by the Downloaders
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5397
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
     1
package org.hedgewars.mobile;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
     2
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
     3
import android.app.Activity;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
     4
import android.content.ComponentName;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
     5
import android.content.Context;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
     6
import android.content.Intent;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
     7
import android.content.ServiceConnection;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
     8
import android.os.Bundle;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
     9
import android.os.Handler;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    10
import android.os.IBinder;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    11
import android.os.Message;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    12
import android.os.Messenger;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    13
import android.os.RemoteException;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    14
import android.view.View;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    15
import android.view.View.OnClickListener;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    16
import android.widget.Button;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    17
import android.widget.ProgressBar;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    18
import android.widget.TextView;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    19
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    20
public class DownloadActivity extends Activity{
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    21
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    22
	private Messenger messageService;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    23
	private boolean boundToService = false;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    24
	
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    25
	private TextView progress_sub;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    26
	private ProgressBar progress;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    27
	private Button positive, negative;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    28
	
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    29
	public static final int MSG_START = 0;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    30
	public static final int MSG_UPDATE = 1;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    31
	public static final int MSG_DONE = 2;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    32
	private Handler.Callback messageCallback = new Handler.Callback() {
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    33
		
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    34
		@Override
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    35
		public boolean handleMessage(Message msg) {
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    36
			switch(msg.what){
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    37
			case MSG_START:
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    38
				progress.setMax(msg.arg1);
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    39
				progress_sub.setText(String.format("%dkb/%dkb\n%s", 0, msg.arg1, ""));
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    40
				break;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    41
			case MSG_UPDATE:
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    42
				progress_sub.setText(String.format("%d%% - %dkb/%dkb\n%s",(msg.arg1*100)/msg.arg2, msg.arg1, msg.arg2, msg.obj));
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    43
				progress.setProgress(msg.arg1);
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    44
				break;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    45
			case MSG_DONE:
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    46
				progress.setProgress(progress.getMax());
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    47
				progress_sub.setText(R.string.download_done);
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    48
				
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    49
				positive.setText(R.string.download_back);
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    50
				positive.setOnClickListener(doneClicker);
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    51
				break;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    52
			}
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    53
			return false;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    54
		}
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    55
	};
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    56
	private Handler messageHandler = new Handler(messageCallback);
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    57
	private Messenger messenger = new Messenger(messageHandler);
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    58
	
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    59
	public void onCreate(Bundle savedInstanceState){
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    60
		super.onCreate(savedInstanceState);
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    61
		
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    62
		setContentView(R.layout.download);
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    63
		
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    64
		progress_sub = (TextView)findViewById(R.id.progressbar_sub);
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    65
		progress = (ProgressBar)findViewById(R.id.progressbar);
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    66
		
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    67
		positive = (Button) findViewById(R.id.background);
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    68
		negative = (Button) findViewById(R.id.cancelDownload);
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    69
		positive.setOnClickListener(backgroundClicker);
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    70
		negative.setOnClickListener(cancelClicker);
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    71
		
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    72
	}
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    73
	
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    74
	private OnClickListener backgroundClicker = new OnClickListener(){
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    75
		public void onClick(View v){
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    76
			finish();
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    77
		}
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    78
	};
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    79
	private OnClickListener cancelClicker = new OnClickListener(){
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    80
		public void onClick(View v){
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    81
			Intent i = new Intent(getApplicationContext(), DownloadService.class);
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    82
			i.putExtra("taskID", DownloadService.TASKID_CANCEL);
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    83
			startService(i);
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    84
			finish();
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    85
		}
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    86
	};
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    87
	private OnClickListener doneClicker = new OnClickListener(){
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    88
		public void onClick(View v){
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    89
			finish();
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    90
			startActivity(new Intent(getApplicationContext(), MainActivity.class));
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    91
		}
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    92
	};
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    93
	
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    94
	public void onStart(){
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    95
		super.onStart();
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    96
		bindToService();
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    97
	}
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    98
	
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
    99
	public void onStop(){
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   100
		super.onStop();
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   101
		unBindFromService();
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   102
	}
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   103
	
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   104
	private ServiceConnection connection = new ServiceConnection(){
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   105
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   106
		@Override
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   107
		public void onServiceConnected(ComponentName name, IBinder service) {
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   108
			messageService = new Messenger(service);
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   109
			
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   110
			try{
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   111
				Message msg = Message.obtain(null, DownloadService.MSG_REGISTER_CLIENT);
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   112
				msg.replyTo = messenger;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   113
				messageService.send(msg);
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   114
				
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   115
			}catch (RemoteException e){}
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   116
		}
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   117
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   118
		@Override
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   119
		public void onServiceDisconnected(ComponentName name) {
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   120
			messageService = null;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   121
		}
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   122
		
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   123
	};
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   124
	
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   125
	private void bindToService(){
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   126
		Intent i = new Intent(getApplicationContext(), DownloadService.class);
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   127
		i.putExtra("taskID", DownloadService.TASKID_START);
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   128
		startService(i);
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   129
		bindService(new Intent(getApplicationContext(), DownloadService.class), connection, Context.BIND_AUTO_CREATE);
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   130
		boundToService = true;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   131
	}
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   132
	
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   133
	private void unBindFromService(){
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   134
		if(boundToService){
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   135
			boundToService = false;
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   136
			unbindService(connection);
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   137
		}	
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   138
	}
4ae1b082e4ba Added download functionality and changed some icons
Xeli
parents:
diff changeset
   139
}