package com.pps.broadcast;
import java.io.File;
import android.app.Dialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Environment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.TextView;
import com.pps.activity.R;
import com.pps.bean.UpdateInformation;
import com.pps.service.UpdateService;
/**
* �㲥�����ߣ������������
*
* @author jiangqingqing
* @time 2013/08/05 16:02
*/
public class UpdateBroadcastReceiver extends BroadcastReceiver {
private static final String UPDATE_ACTION = "com.pps.receiver.update";
private Context mContext;
private Dialog mDialog;
private LayoutInflater mLayoutInflater;
private View mDialogView;
private Button btn_update_dialog_commit; //ȷ��
private Button btn_update_dialog_cancel; //����
private Button btn_update_dialog_force; //ǿ�Ƹ�������ȷ��
//private TextView tv_update_dialog_info_version;
private TextView tv_update_dialog_info_content;
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(UPDATE_ACTION)) {
Log.d("update", "�յ�������¹㲥...");
mContext=context;
mLayoutInflater=LayoutInflater.from(mContext);
mDialogView=mLayoutInflater.inflate(R.layout.update_dialog_tv, null);
initView();
// �յ������Ĺ㲥
checkVersion(context);
}
}
/**
* ���汾��->�Զ�����
*
* @param pContext
*/
public void checkVersion(Context pContext) {
Log.d("update", "���ذ汾:" + UpdateInformation.localVersion);
Log.d("update", "�������汾:" + UpdateInformation.serverVersion);
Log.d("update", "��������־:" + UpdateInformation.serverFlag);
Log.d("update", "֮ǰǿ�������汾��-:" + UpdateInformation.lastForce);
Log.d("update", "������Ϣ:" + UpdateInformation.upgradeinfo);
// Flag==1,��ʾ����
if (UpdateInformation.localVersion < UpdateInformation.serverVersion
&& (UpdateInformation.serverFlag == 1)) {
if (UpdateInformation.localVersion < UpdateInformation.lastForce) {
Log.d("update", "���ذ汾С��֮ǰǿ�������汾��,ǿ������");
forceUpdate(pContext);
} else {
Log.d("update", "�������˱�־Ϊ1-��������");
normalUpdate(pContext);
}
}
// Flag==2,ǿ������
else if (UpdateInformation.localVersion < UpdateInformation.serverVersion
&& (UpdateInformation.serverFlag == 2)) {
Log.d("update", "�������˱�־λ2-ǿ������");
forceUpdate(pContext);
}
// ��������
else {
Log.d("update", "������������������Ŀ¼");
cleanUpdateFile(pContext);
}
}
/**
* ����ǿ��������ֻ��ȷ�����������İ�ť
*
* @param pContext
*/
private void forceUpdate(final Context pContext) {
// AlertDialog builder = new AlertDialog.Builder(pContext).setTitle("��������").setPositiveButton("ȷ��", new DialogInterface.OnClickListener() {
// @Override
// public void onClick(DialogInterface dialog, int which) {
// // new UpdateAppManager(pContext, R.string.app_name,
// // UpdateInformation.Durl).updateApp();
// Intent intent = new Intent(pContext, UpdateService.class);
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// intent.putExtra("appname", R.string.app_name);
// intent.putExtra("appurl", UpdateInformation.Durl);
// intent.putExtra("update_msg", 1); //ǿ������������1
// // ������������
// pContext.startService(intent);
// }
// }).setCancelable(false).create();
// builder.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
// builder.show();
//
initDialog();
btn_update_dialog_commit.setVisibility(View.GONE);
btn_update_dialog_cancel.setVisibility(View.GONE);
btn_update_dialog_force.setVisibility(View.VISIBLE);
btn_update_dialog_force.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(pContext, UpdateService.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("appname", R.string.app_name);
intent.putExtra("appurl", UpdateInformation.Durl);
intent.putExtra("update_msg", 1); //ǿ������������1
// ������������
pContext.startService(intent);
if(mDialog!=null&&mDialog.isShowing())
{
mDialog.dismiss();
}
}
});
}
// ��������
private void normalUpdate(final Context pContext) {
// AlertDialog builder = new AlertDialog.Builder(pContext).setTitle("��������").setPositiveButton("ȷ��", new DialogInterface.OnClickListener() {
// @Override
// public void onClick(DialogInterface dialog, int which) {
// // new UpdateAppManager(pContext, R.string.app_name,
// // UpdateInformation.Durl).updateApp();
// Intent intent = new Intent(pContext, UpdateService.class);
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// intent.putExtra("appname", R.string.app_name);
// intent.putExtra("appurl", UpdateInformation.Durl);
// intent.putExtra("update_msg", 2); //��������������2
// // ������������
// pContext.startService(intent);
// }
// }).setNegativeButton("ȡ��", null).create();
// builder.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
// builder.show();
initDialog();
btn_update_dialog_commit.setVisibility(View.VISIBLE);
btn_update_dialog_cancel.setVisibility(View.VISIBLE);
btn_update_dialog_force.setVisibility(View.GONE);
btn_update_dialog_commit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(pContext, UpdateService.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("appname", R.string.app_name);
intent.putExtra("appurl", UpdateInformation.Durl);
intent.putExtra("update_msg", 2); //��������������2
// ������������
pContext.startService(intent);
if(mDialog!=null&&mDialog.isShowing())
{
mDialog.dismiss();
}
}
});
btn_update_dialog_cancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(mDialog!=null&&mDialog.isShowing())
{
mDialog.dismiss();
}
}
});
}
// ��������Ŀ¼
// ���֮ǰ�������ļ��������˷��û��ռ�
private void cleanUpdateFile(Context pContext) {
File updateDir;
File updateFile;
if (android.os.Environment.MEDIA_MOUNTED.equals(android.os.Environment
.getExternalStorageState())) {
// ��SD�����ļ�д��SD��
updateDir = new File(Environment.getExternalStorageDirectory(),
UpdateInformation.downloadDir);
}
// ��SD��ʱ����ʱ�ļ�д���ڲ��洢����
else {
// filesĿ¼
updateDir = pContext.getFilesDir();
}
updateFile = new File(updateDir.getPath(), pContext.getResources()
.getString(R.string.app_name) + ".apk");
if (updateFile.exists()) {
Log.d("update", "���������ڣ�ɾ��������");
updateFile.delete();
} else {
Log.d("update", "�����������ڣ�����ɾ��������");
}
}
/**
* ��ʼ������Ԫ��
*/
private void initView()
{
//tv_update_dialog_info_version=(TextView)mDialogView.findViewById(R.id.tv_update_dialog_info_version);
tv_update_dialog_info_content=(TextView)mDialogView.findViewById(R.id.tv_update_dialog_info_content);
btn_update_dialog_commit=(Button)mDialogView.findViewById(R.id.btn_update_dialog_commit);
btn_update_dialog_cancel=(Button)mDialogView.findViewById(R.id.btn_update_dialog_cancel);
btn_update_dialog_force=(Button)mDialogView.findViewById(R.id.btn_update_dialog_force);
}
/**
* ��ʼ��������ʾDialog
*/
private void initDialog()
{
mDialog=new Dialog(mContext, R.style.updateDialogTheme);
//����������Ϣ
//�°汾(v1.5.1)������ʾ:
//tv_update_dialog_info_version.setText("�°汾(v"+UpdateInformation.serverVersion+")������ʾ:");
tv_update_dialog_info_content.setText(UpdateInformation.upgradeinfo);
mDialog.setContentView(mDialogView);
mDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
mDialog.setCancelable(false);
mDialog.show();
}
}