package ar.rulosoft.mimanganu;
import android.Manifest;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.graphics.drawable.ColorDrawable;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Window;
import ar.rulosoft.mimanganu.utils.InitGlobals;
import ar.rulosoft.mimanganu.utils.ThemeColors;
import ar.rulosoft.mimanganu.utils.Util;
public class MainActivity extends AppCompatActivity {
public static int[] colors;
public static boolean darkTheme;
public static SharedPreferences pm;
public static boolean isCancelled;
public static boolean isConnected = true;
public static boolean coldStart;
private final int WRITE_EXTERNAL_STORAGE_PERMISSION_REQUEST_CODE = 0;
public ActionBar mActBar;
OnBackListener backListener;
OnKeyUpListener keyUpListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
new InitGlobals().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, getApplicationContext());
pm = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
darkTheme = pm.getBoolean("dark_theme", false);
setTheme(darkTheme ? R.style.AppTheme_miDark : R.style.AppTheme_miLight);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (isStoragePermissionGiven()) {
if (savedInstanceState == null) {
coldStart = true;
MainFragment mainFragment = new MainFragment();
getSupportFragmentManager().beginTransaction().add(R.id.coordinator_layout, mainFragment).commit();
}
showUpdateDialog();
} else {
requestStoragePermission();
setContentView(R.layout.activity_main_no_permision);
}
}
@Override
protected void onNewIntent(Intent intent) {
int mangaIdFromNotification = intent.getIntExtra("manga_id", -1);
Log.i("MainActivity", "mangaID: " + mangaIdFromNotification);
if (mangaIdFromNotification > -1) {
Bundle bundle = new Bundle();
bundle.putInt(MainFragment.MANGA_ID, mangaIdFromNotification);
MangaFragment mangaFragment = new MangaFragment();
mangaFragment.setArguments(bundle);
replaceFragmentAllowStateLoss(mangaFragment, "MangaFragment");
if(Util.n > 0)
Util.n--;
//Util.getInstance().toast(this, "n: " + Util.n, 1);
Log.i("MA", "n: " + Util.n);
}
}
private void showUpdateDialog() {
int currentVersionCode;
try {
currentVersionCode = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;
} catch (android.content.pm.PackageManager.NameNotFoundException e) {
Log.e("MA", "Exception", e);
return;
}
int savedVersionCode = pm.getInt("version_code0", -1);
final boolean show_dialog = pm.getBoolean("show_updates", false);
if (show_dialog || savedVersionCode == -1 || currentVersionCode > savedVersionCode) {
AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this);
dlgAlert.setMessage(getString(R.string.update_message));
dlgAlert.setTitle(R.string.app_name);
dlgAlert.setCancelable(true);
dlgAlert.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
pm.edit().putBoolean("show_updates", false).apply();
dialog.dismiss();
}
});
dlgAlert.setNegativeButton(getString(R.string.see_later), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
pm.edit().putBoolean("show_updates", true).apply();
dialog.dismiss();
}
});
dlgAlert.create().show();
pm.edit().putInt("version_code0", currentVersionCode).apply();
}
}
private boolean isStoragePermissionGiven() {
return ContextCompat.checkSelfPermission(this.getApplicationContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
}
private void requestStoragePermission() {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, WRITE_EXTERNAL_STORAGE_PERMISSION_REQUEST_CODE);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case WRITE_EXTERNAL_STORAGE_PERMISSION_REQUEST_CODE:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission Granted
Util.getInstance().restartApp(getApplicationContext());
} else {
// Permission Denied
Util.getInstance().toast(this, getString(R.string.storage_permission_denied));
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
Bundle bundle = new Bundle();
super.onSaveInstanceState(bundle, outPersistentState);
}
@Override
protected void onResume() {
super.onResume();
if (darkTheme != pm.getBoolean("dark_theme", false)) {
Util.getInstance().restartApp(getApplicationContext());
}
colors = ThemeColors.getColors(pm);
setColorToBars();
}
public void setColorToBars() {
colors = ThemeColors.getColors(pm);
mActBar = getSupportActionBar();
if (mActBar != null) mActBar.setBackgroundDrawable(new ColorDrawable(colors[0]));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.setNavigationBarColor(colors[0]);
window.setStatusBarColor(colors[4]);
}
}
public void setTitle(String title) {
if (mActBar == null)
mActBar = getSupportActionBar();
if (mActBar != null)
mActBar.setTitle(title);
}
public void enableHomeButton(boolean enable) {
if (mActBar == null)
mActBar = getSupportActionBar();
if (mActBar != null)
mActBar.setDisplayHomeAsUpEnabled(enable);
}
public void replaceFragmentAllowStateLoss(Fragment fragment, String tag) {
backListener = null;
keyUpListener = null;
// introduced in support lib v25.1.0
// setAllowOptimization(false)
// fA -> fB
// fA.onStop -> fB.onStart
// setAllowOptimization(true) (new default)
// fA -> fB
// fB.onStart -> fA.onStop
getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.fade_in, R.anim.fade_out).replace(R.id.coordinator_layout, fragment).addToBackStack(tag).commitAllowingStateLoss();
getSupportFragmentManager().executePendingTransactions();
}
public void replaceFragment(Fragment fragment, String tag) {
backListener = null;
keyUpListener = null;
getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.fade_in, R.anim.fade_out).replace(R.id.coordinator_layout, fragment).addToBackStack(tag).commit();
getSupportFragmentManager().executePendingTransactions();
}
@Override
public void onBackPressed() {
if (backListener != null) {
if (!backListener.onBackPressed()) {
backListener = null;
keyUpListener = null;
if (getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}
} else if (getFragmentManager().getBackStackEntryCount() > 0) {
backListener = null;
keyUpListener = null;
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyUpListener != null)
if (!keyUpListener.onKeyUp(keyCode, event))
return super.onKeyUp(keyCode, event);
return super.onKeyUp(keyCode, event);
}
public interface OnBackListener {
boolean onBackPressed();
}
public interface OnKeyUpListener {
boolean onKeyUp(int keyCode, KeyEvent event);
}
}