/*******************************************************************************
* Created by Carlos Yaconi
* Copyright 2015 Prey Inc. All rights reserved.
* License: GPLv3
* Full license at "/LICENSE"
******************************************************************************/
package com.prey.activities;
import android.Manifest;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.graphics.Typeface;
import android.location.LocationManager;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.text.method.PasswordTransformationMethod;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.prey.PreyConfig;
import com.prey.PreyLogger;
import com.prey.PreyPermission;
import com.prey.PreyStatus;
import com.prey.R;
import com.prey.events.Event;
import com.prey.events.manager.EventManagerRunner;
import com.prey.exceptions.PreyException;
import com.prey.net.PreyWebServices;
import com.prey.services.PreyOverlayService;
import com.prey.util.Version;
public class CheckPasswordActivity extends AppCompatActivity implements ActivityCompat.OnRequestPermissionsResultCallback {
int wrongPasswordIntents = 0;
CheckPasswordActivity activity=null;
public static int OVERLAY_PERMISSION_REQ_CODE = 5469;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().hide();
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.password2);
VersionTask versionTask=new VersionTask();
versionTask.execute();
activity=this;
}
@Override
protected void onResume() {
super.onResume();
bindPasswordControls();
TextView device_ready_h2_text=(TextView)findViewById(R.id.device_ready_h2_text);
final TextView textForgotPassword = (TextView) findViewById(R.id.link_forgot_password);
Button password_btn_login=(Button)findViewById(R.id.password_btn_login);
EditText password_pass_txt=(EditText)findViewById(R.id.password_pass_txt);
TextView textView1=(TextView)findViewById(R.id.textView1);
TextView textView2=(TextView)findViewById(R.id.textView2);
Typeface titilliumWebRegular = Typeface.createFromAsset(getAssets(), "fonts/Titillium_Web/TitilliumWeb-Regular.ttf");
Typeface titilliumWebBold = Typeface.createFromAsset(getAssets(), "fonts/Titillium_Web/TitilliumWeb-Bold.ttf");
Typeface magdacleanmonoRegular = Typeface.createFromAsset(getAssets(), "fonts/MagdaClean/magdacleanmono-regular.ttf");
textView1.setTypeface(magdacleanmonoRegular);
textView2.setTypeface(magdacleanmonoRegular);
device_ready_h2_text.setTypeface(titilliumWebRegular);
textForgotPassword.setTypeface(titilliumWebBold);
password_btn_login.setTypeface(titilliumWebBold);
password_pass_txt.setTypeface(magdacleanmonoRegular);
try {
textForgotPassword.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
try {
String url = PreyConfig.getPreyConfig(getApplicationContext()).getPreyPanelUrl();
Intent browserIntent = new Intent("android.intent.action.VIEW", Uri.parse(url));
startActivity(browserIntent);
} catch (Exception e) {
}
}
});
} catch (Exception e) {
}
TextView textView5_1=(TextView)findViewById(R.id.textView5_1);
TextView textView5_2=(TextView)findViewById(R.id.textView5_2);
textView5_1.setTypeface(magdacleanmonoRegular);
textView5_2.setTypeface(titilliumWebBold);
TextView textViewUninstall=(TextView) findViewById(R.id.textViewUninstall);
LinearLayout linearLayoutTour = (LinearLayout) findViewById(R.id.linearLayoutTour);
textViewUninstall.setTypeface(titilliumWebBold);
if(PreyConfig.getPreyConfig(getApplication()).getProtectTour()) {
linearLayoutTour.setVisibility(View.GONE);
textViewUninstall.setVisibility(View.VISIBLE);
textViewUninstall.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String url = PreyConfig.getPreyConfig(getApplication()).getPreyUninstallUrl();
Intent browserIntent = new Intent("android.intent.action.VIEW", Uri.parse(url));
startActivity(browserIntent);
finish();
}
});
}else{
linearLayoutTour.setVisibility(View.VISIBLE);
textViewUninstall.setVisibility(View.GONE);
try {
LinearLayout linearLayout3_1 = (LinearLayout) findViewById(R.id.linearLayout3_1);
linearLayout3_1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplication(), TourActivity1.class);
Bundle b = new Bundle();
b.putInt("id", 1);
intent.putExtras(b);
startActivity(intent);
finish();
}
});
LinearLayout linearLayout3_2 = (LinearLayout) findViewById(R.id.linearLayout3_2);
linearLayout3_2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PreyConfig.getPreyConfig(getApplication()).setProtectTour(true);
onResume();
}
});
}catch (Exception e){
}
}
boolean showLocation=false;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
boolean canAccessFineLocation=PreyPermission.canAccessFineLocation(this);
boolean canAccessCoarseLocation=PreyPermission.canAccessCoarseLocation(this);
boolean canAccessCamera=PreyPermission.canAccessCamera(this);
boolean canAccessReadPhoneState=PreyPermission.canAccessReadPhoneState(this);
boolean canAccessReadExternalStorage=PreyPermission.canAccessReadExternalStorage(this);
boolean canDrawOverlays=PreyPermission.canDrawOverlays(this);
if(!canAccessFineLocation||!canAccessCoarseLocation||!canAccessCamera
|| !canAccessReadPhoneState|| !canAccessReadExternalStorage){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
final FrameLayout frameView = new FrameLayout(this);
builder.setView(frameView);
final AlertDialog alertDialog = builder.create();
LayoutInflater inflater = alertDialog.getLayoutInflater();
View dialoglayout = inflater.inflate(R.layout.warning, frameView);
TextView warning_title=(TextView)dialoglayout.findViewById(R.id.warning_title);
TextView warning_body=(TextView)dialoglayout.findViewById(R.id.warning_body);
warning_title.setTypeface(magdacleanmonoRegular);
warning_body.setTypeface(titilliumWebBold);
Button button_ok = (Button) dialoglayout.findViewById(R.id.button_ok);
Button button_close = (Button) dialoglayout.findViewById(R.id.button_close);
button_ok.setTypeface(titilliumWebBold);
button_close.setTypeface(titilliumWebBold);
final Activity thisActivity=this;
button_ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PreyLogger.d("askForPermission");
askForPermission();
alertDialog.dismiss();
}
});
button_close.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PreyLogger.d("close ask");
alertDialog.dismiss();
}
});
alertDialog.show();
showLocation=false;
}else{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!canDrawOverlays) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
final FrameLayout frameView = new FrameLayout(this);
builder.setView(frameView);
final AlertDialog alertDialog = builder.create();
LayoutInflater inflater = alertDialog.getLayoutInflater();
View dialoglayout = inflater.inflate(R.layout.warning_android7, frameView);
Button button_android7_ok = (Button) dialoglayout.findViewById(R.id.button_android7_ok);
Button button_android7_close = (Button) dialoglayout.findViewById(R.id.button_android7_close);
button_android7_ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PreyLogger.d("askForPermissionAndroid7");
askForPermissionAndroid7();
startOverlayService();
alertDialog.dismiss();
finish();
}
});
button_android7_close.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
alertDialog.dismiss();
}
});
alertDialog.show();
showLocation = false;
} else {
showLocation = true;
}
} else {
showLocation = true;
}
}
}else{
showLocation=true;
}
if(showLocation) {
LocationManager mlocManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
boolean isGpsEnabled = mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
boolean isNetworkEnabled = mlocManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (isGpsEnabled || isNetworkEnabled) {
PreyLogger.d("isGpsEnabled || isNetworkEnabled");
} else {
PreyLogger.d("no gps ni red");
AlertDialog.Builder builder = new AlertDialog.Builder(this);
final AlertDialog alertDialog = builder.create();
TextView textview = new TextView(this);
textview.setText(getString(R.string.location_settings));
textview.setMaxLines(10);
textview.setTextSize(18F);
textview.setPadding(20, 0, 20, 20);
textview.setTextColor(Color.BLACK);
builder.setView(textview);
builder.setPositiveButton(getString(R.string.go_to_settings), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialoginterface, int i) {
dialoginterface.dismiss();
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent, 0);
return;
}
});
builder.setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialoginterface, int i) {
dialoginterface.dismiss();
}
});
builder.create().show();
}
}
PreyConfig.getPreyConfig(this).registerC2dm();
}
@Override
@TargetApi(Build.VERSION_CODES.M)
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
PreyLogger.i("onActivityResult requestCode:"+requestCode+" resultCode:"+resultCode);
if (requestCode == OVERLAY_PERMISSION_REQ_CODE) {
PreyLogger.i("OVERLAY_PERMISSION_REQ_CODE");
}
}
@TargetApi(Build.VERSION_CODES.M)
private void askForPermissionAndroid7() {
PreyLogger.i("askForPermissionAndroid7");
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, OVERLAY_PERMISSION_REQ_CODE);
}
private void startOverlayService() {
PreyLogger.i("startOverlayService");
Intent intent = new Intent(getApplicationContext(), PreyOverlayService.class);
startService(intent);
}
protected void bindPasswordControls() {
Button checkPasswordOkButton = (Button) findViewById(R.id.password_btn_login);
final EditText pass1 = ((EditText) findViewById(R.id.password_pass_txt));
checkPasswordOkButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
final String passwordtyped = pass1.getText().toString();
final Context ctx = getApplicationContext();
if (passwordtyped.equals(""))
Toast.makeText(ctx, R.string.preferences_password_length_error, Toast.LENGTH_LONG).show();
else {
if (passwordtyped.length() < 6 || passwordtyped.length() > 32) {
Toast.makeText(ctx, ctx.getString(R.string.error_password_out_of_range, "6", "32"), Toast.LENGTH_LONG).show();
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
new CheckPassword().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,passwordtyped);
else
new CheckPassword().execute(passwordtyped);
}
}
}
});
//Hack to fix hint's typeface: http://stackoverflow.com/questions/3406534/password-hint-font-in-android
EditText password = (EditText) findViewById(R.id.password_pass_txt);
password.setTypeface(Typeface.DEFAULT);
password.setTransformationMethod(new PasswordTransformationMethod());
}
protected class CheckPassword extends AsyncTask<String, Void, Void> {
ProgressDialog progressDialog = null;
boolean isPasswordOk = false;
String error = null;
@Override
protected void onPreExecute() {
try {
progressDialog = new ProgressDialog(CheckPasswordActivity.this);
progressDialog.setMessage(CheckPasswordActivity.this.getText(R.string.password_checking_dialog).toString());
progressDialog.setIndeterminate(true);
progressDialog.setCancelable(false);
progressDialog.show();
} catch (Exception e) {
}
}
@Override
protected Void doInBackground(String... password) {
try {
String apikey = PreyConfig.getPreyConfig(CheckPasswordActivity.this).getApiKey();
PreyLogger.d("apikey:"+apikey+" password[0]:"+password[0]);
isPasswordOk = PreyWebServices.getInstance().checkPassword(CheckPasswordActivity.this, apikey, password[0]);
if(isPasswordOk) {
PreyConfig.getPreyConfig(CheckPasswordActivity.this).setTimePasswordOk();
PreyWebServices.getInstance().sendEvent(getApplication(), PreyConfig.ANDROID_LOGIN_SETTINGS);
} else {
PreyWebServices.getInstance().sendEvent(getApplication(), PreyConfig.ANDROID_FAILED_LOGIN_SETTINGS);
}
} catch (PreyException e) {
error = e.getMessage();
}
return null;
}
@Override
protected void onPostExecute(Void unused) {
try {
if (progressDialog.isShowing()) {
progressDialog.dismiss();
}
} catch (Exception e) {
}
if (error != null)
Toast.makeText(CheckPasswordActivity.this, error, Toast.LENGTH_LONG).show();
else if (!isPasswordOk) {
wrongPasswordIntents++;
if (wrongPasswordIntents == 3) {
Toast.makeText(CheckPasswordActivity.this, R.string.password_intents_exceed, Toast.LENGTH_LONG).show();
setResult(RESULT_CANCELED);
finish();
} else {
Toast.makeText(CheckPasswordActivity.this, R.string.password_wrong, Toast.LENGTH_SHORT).show();
}
} else {
Intent intent = new Intent(CheckPasswordActivity.this, DeviceReadyActivity.class);
PreyStatus.getInstance().setPreyConfigurationActivityResume(true);
startActivity(intent);
finish();
new Thread(new EventManagerRunner(CheckPasswordActivity.this, new Event(Event.APPLICATION_OPENED))).start();
}
}
}
@TargetApi(Build.VERSION_CODES.M)
private void askForPermission() {
ActivityCompat.requestPermissions(CheckPasswordActivity.this, INITIAL_PERMS, REQUEST_PERMISSIONS);
}
public void reset(){
PreyLogger.i("reset");
Intent intent = new Intent(CheckPasswordActivity.this, CheckPasswordActivity.class);
startActivity(intent);
finish();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
PreyLogger.d("_______onRequestPermissionsResult_______requestCode:" + requestCode + " permissions:" + permissions.toString() + " grantResults:" + grantResults.toString());
switch (requestCode) {
case REQUEST_PERMISSIONS: {
if (grantResults[0]==PackageManager.PERMISSION_GRANTED){
PreyLogger.i("setCanAccessCamara");
PreyConfig.getPreyConfig(getApplicationContext()).setCanAccessCamara(true);
}
if (grantResults[1] == PackageManager.PERMISSION_GRANTED){
PreyLogger.i("setCanAccessFineLocation");
PreyConfig.getPreyConfig(getApplicationContext()).setCanAccessFineLocation(true);
}
if (grantResults[2] == PackageManager.PERMISSION_GRANTED){
PreyLogger.i("setCanAccessCoarseLocation");
PreyConfig.getPreyConfig(getApplicationContext()).setCanAccessCoarseLocation(true);
}
if (grantResults[3] == PackageManager.PERMISSION_GRANTED){
PreyLogger.i("setCanAccessReadPhoneState");
PreyConfig.getPreyConfig(getApplicationContext()).setCanAccessReadPhoneState(true);
}
if (grantResults[4] == PackageManager.PERMISSION_GRANTED){
PreyLogger.i("setCanAccessExternalStorage");
PreyConfig.getPreyConfig(getApplicationContext()).setCanAccessExternalStorage(true);
}
onResume();
return;
}
}
}
private static final int REQUEST_PERMISSIONS = 5;
private static final String[] INITIAL_PERMS={
Manifest.permission.CAMERA,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.READ_EXTERNAL_STORAGE
};
public String getVersionName() {
String versionName =null;
try{
PackageManager manager = this.getPackageManager();
PackageInfo info = manager.getPackageInfo(this.getPackageName(), 0);
versionName = info.versionName;
}catch(Exception e){
}
return versionName;
}
public class VersionTask extends AsyncTask<Object, Void, Void> {
private String googlePlayVersion="";
@Override
protected void onPreExecute() {
googlePlayVersion="";
}
@Override
protected Void doInBackground(Object... inputObj) {
PreyLogger.d("VersionTask doInBackground");
googlePlayVersion= PreyWebServices.getInstance().googlePlayVersion(getApplicationContext());
PreyConfig.getPreyConfig(getApplication()).registerC2dm();
return null;
}
@Override
protected void onPostExecute(Void unused) {
PreyLogger.d("VersionTask onPostExecute");
if(googlePlayVersion!=null){
String versionName=getVersionName();
PreyLogger.d("googlePlayVersion:"+googlePlayVersion+" versionName:"+versionName);
Version versionGoggle = new Version(googlePlayVersion);
Version versionPackage = new Version(versionName);
if (versionGoggle.compareTo(versionPackage)==1) {
String title = getResources().getString(R.string.information);
String ccontinue = getString(R.string.ccontinue);
String download = getString(R.string.download);
String message = getResources().getString(R.string.new_version_available);
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
final AlertDialog dialog = builder.create();
dialog.setTitle(title);
dialog.setMessage(message);
dialog.setCancelable(false);
dialog.setButton(-1, ccontinue, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
dialog.setButton(-2,download, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
try{
String uri = PreyConfig.getPreyConfig(getApplicationContext()).getPreyGooglePlay();
startActivity(new Intent("android.intent.action.VIEW", Uri.parse(uri)));
}catch(Exception e){
PreyLogger.e("Error en onclick:"+e.getMessage(),e);
}
dialog.dismiss();
}
});
dialog.show();
}
}
}
}
}