package me.devsaki.hentoid.activities;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.view.WindowManager;
import me.devsaki.hentoid.HentoidApp;
import me.devsaki.hentoid.R;
import me.devsaki.hentoid.abstracts.BaseFragment;
import me.devsaki.hentoid.abstracts.BaseFragment.BackInterface;
import me.devsaki.hentoid.abstracts.DrawerActivity;
import me.devsaki.hentoid.fragments.EndlessFragment;
import me.devsaki.hentoid.fragments.PagerFragment;
import me.devsaki.hentoid.ui.DrawerMenuContents;
import me.devsaki.hentoid.util.ConstsPrefs;
import me.devsaki.hentoid.util.Helper;
import me.devsaki.hentoid.util.LogHelper;
/**
* Created by avluis on 08/26/2016.
* DownloadsActivity: In charge of hosting EndlessFragment & PagerFragment
* in accordance to Shared Prefs Setting Key: PREF_ENDLESS_SCROLL
*/
public class DownloadsActivity extends DrawerActivity implements BackInterface {
private static final String TAG = LogHelper.makeLogTag(DownloadsActivity.class);
private final SharedPreferences prefs = HentoidApp.getSharedPrefs();
private BaseFragment baseFragment;
private Context cxt;
@Override
protected Fragment buildFragment() {
try {
return getFragment().newInstance();
} catch (InstantiationException e) {
LogHelper.e(TAG, e, "Error: Could not access constructor");
} catch (IllegalAccessException e) {
LogHelper.e(TAG, e, "Error: Field or method is not accessible");
}
return null;
}
private Class<? extends BaseFragment> getFragment() {
if (getEndlessPref()) {
LogHelper.d(TAG, "getFragment: EndlessFragment.");
return EndlessFragment.class;
} else {
LogHelper.d(TAG, "getFragment: PagerFragment.");
return PagerFragment.class;
}
}
private boolean getEndlessPref() {
return prefs.getBoolean(
ConstsPrefs.PREF_ENDLESS_SCROLL, ConstsPrefs.PREF_ENDLESS_SCROLL_DEFAULT);
}
private boolean getRecentVisibilityPref() {
return prefs.getBoolean(
ConstsPrefs.PREF_HIDE_RECENT, ConstsPrefs.PREF_HIDE_RECENT_DEFAULT);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getRecentVisibilityPref()) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
}
setContentView(getLayoutResId());
cxt = HentoidApp.getAppContext();
initializeToolbar();
setTitle(getToolbarTitle());
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}
@Override
public void onBackPressed() {
if (baseFragment == null || baseFragment.onBackPressed()) {
// Fragment did not consume onBackPressed.
super.onBackPressed();
}
}
@Override
protected void onResume() {
super.onResume();
updateSelectedFragment();
updateDrawerPosition();
}
private void updateSelectedFragment() {
FragmentManager manager = getSupportFragmentManager();
fragment = manager.findFragmentById(R.id.content_frame);
if (fragment != null) {
Fragment selectedFragment = buildFragment();
String selectedFragmentTag = selectedFragment.getClass().getSimpleName();
if (!selectedFragmentTag.equals(fragment.getTag())) {
Helper.doRestart(this);
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults.length > 0) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission Granted
LogHelper.d(TAG, "Permissions granted.");
// In order to apply changes, activity/task restart is needed
Helper.doRestart(this);
} else if (grantResults[0] == PackageManager.PERMISSION_DENIED) {
// Permission Denied
LogHelper.d(TAG, "Permissions denied.");
}
} else {
// Permissions cannot be set, either via policy or forced by user.
finish();
}
}
@Override
protected String getToolbarTitle() {
return Helper.getActivityName(cxt, R.string.title_activity_downloads);
}
@Override
protected void updateDrawerPosition() {
DrawerMenuContents mDrawerMenuContents = new DrawerMenuContents(this);
mDrawerMenuContents.getPosition(this.getClass());
super.updateDrawerPosition();
}
@Override
public void addBackInterface(BaseFragment fragment) {
this.baseFragment = fragment;
}
}