package io.evercam.androidapp;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import io.evercam.API;
import io.evercam.EvercamException;
import io.evercam.User;
import io.evercam.androidapp.authentication.EvercamAccount;
import io.evercam.androidapp.custom.CustomedDialog;
import io.evercam.androidapp.dal.DbCamera;
import io.evercam.androidapp.dto.AppData;
import io.evercam.androidapp.dto.AppUser;
import io.evercam.androidapp.tasks.CheckInternetTask;
import io.evercam.androidapp.tasks.CheckKeyExpirationTask;
import io.evercam.androidapp.utils.Commons;
import io.evercam.androidapp.utils.Constants;
import io.evercam.androidapp.utils.PrefsManager;
/*
* Main starting activity.
* Checks whether user should login first or load the cameras straight away
* */
public class MainActivity extends ParentActivity
{
private static final String TAG = "evercam-MainActivity";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.mainactivitylayout);
launch();
}
@Override
protected void onRestart()
{
super.onRestart();
launch();
}
private void launch()
{
int versionCode = Commons.getAppVersionCode(this);
boolean isReleaseNotesShown = PrefsManager.isReleaseNotesShown(this, versionCode);
if(versionCode > 0)
{
if(isReleaseNotesShown)
{
startApplication();
}
else
{
Intent act = new Intent(MainActivity.this, ReleaseNotesActivity.class);
startActivity(act);
this.finish();
}
}
}
private void startApplication()
{
new MainCheckInternetTask(MainActivity.this).executeOnExecutor(AsyncTask
.THREAD_POOL_EXECUTOR);
}
private void startCamerasActivity()
{
if(CamerasActivity.activity != null)
{
CamerasActivity.activity.finish();
}
this.startActivity(new Intent(this, CamerasActivity.class));
MainActivity.this.finish();
}
public static boolean isUserLogged(Context context)
{
AppData.defaultUser = new EvercamAccount(context).getDefaultUser();
if(AppData.defaultUser != null)
{
AppData.evercamCameraList = new DbCamera(context).getCamerasByOwner(AppData
.defaultUser.getUsername(), 500);
API.setUserKeyPair(AppData.defaultUser.getApiKey(), AppData.defaultUser.getApiId());
return true;
}
return false;
}
/**
* Check the API key and ID is valid or not
*
* In case the key and ID has already changed by Evercam system
*/
public static boolean isApiKeyExpired(String username, String apiKey, String apiId)
{
try
{
API.setUserKeyPair(apiKey, apiId);
new User(username);
}
catch(EvercamException e)
{
if(e.getMessage().equals(Constants.API_MESSAGE_UNAUTHORIZED) ||
e.getMessage().equals(Constants.API_MESSAGE_INVALID_API_KEY))
{
return true;
}
}
return false;
}
class MainCheckInternetTask extends CheckInternetTask
{
public MainCheckInternetTask(Context context)
{
super(context);
}
@Override
protected void onPostExecute(Boolean hasNetwork)
{
if(hasNetwork)
{
if(isUserLogged(MainActivity.this))
{
AppUser defaultUser = AppData.defaultUser;
new CheckKeyExpirationTaskMain(defaultUser.getUsername(),
defaultUser.getApiKey(), defaultUser.getApiId())
.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
else
{
finish();
Intent slideIntent = new Intent(MainActivity.this, SlideActivity.class);
startActivity(slideIntent);
}
}
else
{
CustomedDialog.showInternetNotConnectDialog(MainActivity.this);
}
}
}
class CheckKeyExpirationTaskMain extends CheckKeyExpirationTask
{
public CheckKeyExpirationTaskMain(String username, String apiKey, String apiId)
{
super(username, apiKey, apiId);
}
@Override
protected void onPostExecute(Boolean isExpired)
{
//If API key and ID is no longer valid, show the login page
if(isExpired)
{
new EvercamAccount(MainActivity.this).remove(AppData.defaultUser.getEmail(), null);
finish();
Intent slideIntent = new Intent(MainActivity.this, SlideActivity.class);
startActivity(slideIntent);
}
else
{
finish();
startCamerasActivity();
}
}
}
}