package com.njlabs.showjava.ui;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.net.ConnectivityManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import com.njlabs.showjava.R;
import com.njlabs.showjava.utils.AesCbcWithIntegrity;
import java.io.UnsupportedEncodingException;
import java.security.GeneralSecurityException;
import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper;
@SuppressWarnings("unused")
@SuppressLint("Registered")
public class BaseActivity extends AppCompatActivity {
public Context baseContext;
public Toolbar toolbar;
protected SharedPreferences prefs;
private AdView mAdView;
public boolean isPro = false;
public boolean hawkLoaded;
private String androidID;
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
baseContext = this;
prefs = PreferenceManager.getDefaultSharedPreferences(this);
androidID = Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID);
isPro = get();
}
public void setupLayout(int layoutRef) {
setContentView(layoutRef);
setupToolbar(null);
setupGoogleAds();
}
public void setupLayout(int layoutRef, String title) {
setContentView(layoutRef);
setupToolbar(title);
setupGoogleAds();
}
public void setupLayoutNoActionBar(int layoutRef) {
setContentView(layoutRef);
}
@SuppressWarnings("ConstantConditions")
private void setupToolbar(String title) {
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
if (title != null) {
getSupportActionBar().setTitle(title);
} else {
if(isPro()) {
ActivityInfo activityInfo;
try {
activityInfo = getPackageManager().getActivityInfo(getComponentName(), PackageManager.GET_META_DATA);
String currentTitle = activityInfo.loadLabel(getPackageManager()).toString();
if(currentTitle.trim().equals("Show Java")){
getSupportActionBar().setTitle("Show Java Pro");
}
} catch (PackageManager.NameNotFoundException ignored) {
}
}
}
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
case R.id.about_option:
startActivity(new Intent(getBaseContext(), About.class));
return true;
case R.id.bug_report_option:
Uri uri = Uri.parse("https://github.com/niranjan94/show-java/issues/new");
startActivity(new Intent(Intent.ACTION_VIEW, uri));
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
return true;
case R.id.settings_option:
startActivity(new Intent(getBaseContext(), SettingsActivity.class));
return true;
}
return super.onOptionsItemSelected(item);
}
public Context getContext() {
return baseContext;
}
@Override
public void onBackPressed() {
finish();
}
@Override
public void onResume() {
super.onResume();
}
@Override
public void onPause() {
super.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
public boolean checkDataConnection() {
boolean status = false;
ConnectivityManager connectivityMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityMgr.getActiveNetworkInfo() != null &&
connectivityMgr.getActiveNetworkInfo().isAvailable() &&
connectivityMgr.getActiveNetworkInfo().isConnected()) {
status = true;
}
return status;
}
public boolean isPro(){
return isPro;
}
public boolean isLollipop() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
}
public boolean isMarshmallow() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
}
private void setupGoogleAds() {
mAdView = (AdView) findViewById(R.id.adView);
if (mAdView != null) {
mAdView.setVisibility(View.GONE);
if (!isPro()) {
AdRequest adRequest = new AdRequest.Builder().addTestDevice(AdRequest.DEVICE_ID_EMULATOR).build();
mAdView.setAdListener(new AdListener() {
@Override
public void onAdFailedToLoad(int errorCode) {
super.onAdFailedToLoad(errorCode);
mAdView.setVisibility(View.GONE);
}
@Override
public void onAdLoaded() {
super.onAdLoaded();
mAdView.setVisibility(View.VISIBLE);
}
});
mAdView.loadAd(adRequest);
if (!checkDataConnection()) {
mAdView.setVisibility(View.GONE);
}
}
}
}
public void put(boolean val){
try {
AesCbcWithIntegrity.SecretKeys keys = new AesCbcWithIntegrity.SecretKeys(getResources().getString(R.string.cc),getResources().getString(R.string.ii));
AesCbcWithIntegrity.CipherTextIvMac cipherTextIvMac;
cipherTextIvMac = AesCbcWithIntegrity.encrypt(val ? "true" : "false", keys);
String ciphertextString = cipherTextIvMac.toString();
prefs.edit().putString(androidID,ciphertextString ).apply();
} catch (UnsupportedEncodingException | GeneralSecurityException e) {
e.printStackTrace();
}
}
public boolean get(){
try {
AesCbcWithIntegrity.SecretKeys keys = new AesCbcWithIntegrity.SecretKeys(getResources().getString(R.string.cc),getResources().getString(R.string.ii));
String plainText = AesCbcWithIntegrity.decryptString(prefs.getString(androidID,""), keys);
return (plainText.equals("true"));
} catch (Exception e) {
return false;
}
}
}