package com.zebra.scannercontrol.app.activities;
import android.Manifest;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.BitmapFactory;
import android.graphics.Point;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.support.design.widget.NavigationView;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.widget.Toolbar;
import android.text.method.LinkMovementMethod;
import android.util.Log;
import android.util.Xml;
import android.view.Display;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.Toast;
import com.zebra.scannercontrol.BarCodeView;
import com.zebra.scannercontrol.DCSSDKDefs;
import com.zebra.scannercontrol.DCSScannerInfo;
import com.zebra.scannercontrol.FirmwareUpdateEvent;
import com.zebra.scannercontrol.app.helpers.ScannerAppEngine;
import com.zebra.scannercontrol.app.R;
import com.zebra.scannercontrol.app.application.Application;
import com.zebra.scannercontrol.app.helpers.Constants;
import com.zebra.scannercontrol.app.helpers.CustomProgressDialog;
import com.zebra.scannercontrol.app.helpers.DotsProgressBar;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class UpdateFirmware extends BaseActivity implements NavigationView.OnNavigationItemSelectedListener,ScannerAppEngine.IScannerAppEngineDevConnectionsDelegate, ScannerAppEngine.IScannerAppEngineDevEventsDelegate {
private NavigationView navigationView;
int scannerID;
static MyAsyncTask cmdExecTask=null;
static File selectedPlugIn = null;
static DCSScannerInfo fwUpdatingScanner;
static final int PERMISSIONS_REQUEST_READ_EX_STORAGE = 10;
static boolean fwReboot;
static Dialog dialogFwProgress;
static Dialog dialogFwRebooting;
static Dialog dialogFwReconnectScanner;
static boolean processMultiplePlugIn = false;
static Dialog dialogFWHelp;
int dialogFWProgessX = 90;
int dialogFWProgessY = 220;
int dialogFWReconnectionY = 250;
int dialogFWReconnectionX = 50;
ProgressBar progressBar;
DotsProgressBar dotProgressBar;
TextView txtPercentage;
static boolean isWaitingForFWUpdateToComplete;
BarCodeView barCodeView = null;
FrameLayout llBarcode = null;
int fwMax;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_update_firmware);
Configuration configuration = getResources().getConfiguration();
if(configuration.orientation == Configuration.ORIENTATION_LANDSCAPE){
if(configuration.smallestScreenWidthDp<Application.minScreenWidth){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}else{
if(configuration.screenWidthDp<Application.minScreenWidth){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
Toolbar subActionBar = (Toolbar) findViewById(R.id.sub_actionbar);
setSupportActionBar(subActionBar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("Active Scanner");
setSupportActionBar(subActionBar);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
scannerID = getIntent().getIntExtra(Constants.SCANNER_ID, -1);
isWaitingForFWUpdateToComplete= false;
fwUpdatingScanner = Application.currentConnectedScanner;
}
@Override
protected void onPause() {
super.onPause();
if(dialogFwProgress ==null && dialogFwRebooting==null && !Application.isFirmwareUpdateInProgress) {
Log.i("ScannerControl","Removing Update FW IScannerAppEngineDevEventsDelegate into list");
removeDevConnectiosDelegate(this);
removeDevEventsDelegate(this);
}else{
if(isWaitingForFWUpdateToComplete){
Log.i("ScannerControl","isWaitingForFWUpdateToComplete is false Removing Update FW IScannerAppEngineDevEventsDelegate into list");
removeDevEventsDelegate(this);
}else {
Log.i("ScannerControl", "Keep Update FW IScannerAppEngineDevEventsDelegate in list " + Application.isFirmwareUpdateInProgress);
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i("ScannerControl","onDestroy Removing Update FW IScannerAppEngineDevEventsDelegate into list");
removeDevConnectiosDelegate(this);
removeDevEventsDelegate(this);
Application.isFirmwareUpdateInProgress = false;
}
@Override
protected void onResume() {
super.onResume();
addDevConnectionsDelegate(this);
if (dialogFWHelp != null && dialogFWHelp.isShowing()) {
dialogFWHelp.dismiss();
dialogFWHelp = null;
}
fwReboot = getIntent().getBooleanExtra(Constants.FW_REBOOT, false);
if(fwReboot){
Application.isFirmwareUpdateInProgress =false;
}else{
Log.i("ScannerControl","Adding Update FW IScannerAppEngineDevEventsDelegate into list");
addDevEventsDelegate(this);
}
if (!fwReboot && isWaitingForFWUpdateToComplete) {
} else {
if (dialogFwProgress == null && dialogFwRebooting == null) {
if (Application.currentConnectedScanner != null) {
LinearLayout updateFirmwarelayout = (LinearLayout) findViewById(R.id.layout_update_firmware);
updateFirmwarelayout.setVisibility(View.INVISIBLE);
updateFirmwarelayout.setVisibility(View.GONE);
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
// No