package com.erakk.lnreader.UI.activity; import android.annotation.SuppressLint; import android.content.Context; import android.content.DialogInterface; import android.content.SharedPreferences; import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.preference.PreferenceManager; import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AlertDialog; import android.util.Log; import android.view.View; import android.widget.Toast; import com.erakk.lnreader.Constants; import com.erakk.lnreader.LNReaderApplication; import com.erakk.lnreader.R; import com.erakk.lnreader.UI.fragment.BookmarkFragment; import com.erakk.lnreader.UI.fragment.DownloadFragment; import com.erakk.lnreader.UI.fragment.MainFragment; import com.erakk.lnreader.UI.fragment.SearchFragment; import com.erakk.lnreader.UI.fragment.UpdateInfoFragment; import com.erakk.lnreader.UIHelper; import com.erakk.lnreader.callback.ICallbackEventData; import com.erakk.lnreader.callback.IExtendedCallbackNotifier; import com.erakk.lnreader.task.AsyncTaskResult; import com.erakk.lnreader.task.CheckDBReadyTask; import java.io.File; import java.io.IOException; public class MainActivity extends BaseActivity implements IExtendedCallbackNotifier<AsyncTaskResult<Boolean>> { private static final String TAG = MainActivity.class.toString(); private final Context ctx = this; private AlertDialog dialog; private CheckDBReadyTask task = null; private boolean isFragmentLoaded = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragactivity_framework); } @Override public void onStart() { super.onStart(); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); init(); } // region private method private void init() { // check if view exists View mainView = findViewById(R.id.mainFrame); if (mainView != null) { updateFragment(); isFragmentLoaded = true; } if (isFirstRun()) { // Show copyrights new AlertDialog.Builder(this).setTitle(getResources().getString(R.string.terms_of_use)).setMessage(getResources().getString(R.string.bakatsuki_message) + getString(R.string.bakatsuki_copyrights) + "\n\nBy clicking \"I Agree\" below, you confirm that you have read the TLG Translation Common Agreement in it's entirety.").setPositiveButton(getResources().getString(R.string.agree), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { setFirstRun(); } }).setNegativeButton(getResources().getString(R.string.disagree), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); } }).show(); } // check db access if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { checkDBAccess(); } // create .nomedia file String noMediaFile = UIHelper.getImageRoot(this) + "/" + ".nomedia"; File f = new File(noMediaFile); if(!f.exists()) { try { Log.d(TAG, "Creating .nomedia file: " + f.createNewFile()); } catch (IOException e) { Log.w(TAG, "Failed to create .nomedia file at " + noMediaFile); } } } @Override public void onResume() { super.onResume(); if (!isFragmentLoaded) { View mainView = findViewById(R.id.mainFrame); if (mainView != null) { updateFragment(); isFragmentLoaded = true; } } } private void updateFragment() { String initialFragment = getIntent().getStringExtra(Constants.EXTRA_INITIAL_FRAGMENT); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); if (mContent == null) { if (initialFragment == null) { mContent = new MainFragment(); } else if (initialFragment.equalsIgnoreCase(UpdateInfoFragment.class.toString())) { mContent = new UpdateInfoFragment(); } else if (initialFragment.equalsIgnoreCase(DownloadFragment.class.toString())) { mContent = new DownloadFragment(); } else if (initialFragment.equalsIgnoreCase(BookmarkFragment.class.toString())) { mContent = new BookmarkFragment(); } else if (initialFragment.equalsIgnoreCase(SearchFragment.class.toString())) { mContent = new SearchFragment(); } } if (mContent != null) { transaction.replace(R.id.mainFrame, mContent, initialFragment); } else { Toast.makeText(this, "Nothing!!", Toast.LENGTH_LONG).show(); } if (initialFragment != null) transaction.addToBackStack(initialFragment); transaction.commit(); Log.d(TAG, "Initial Fragment:" + initialFragment); } @Override public void onBackPressed() { if (getSupportFragmentManager().getBackStackEntryCount() > 0) { Log.d(TAG, "popping fragment stack"); getSupportFragmentManager().popBackStack(); } else { super.onBackPressed(); } } private boolean isFirstRun() { return PreferenceManager.getDefaultSharedPreferences(this).getBoolean(Constants.PREF_FIRST_RUN, true); } private void setFirstRun() { SharedPreferences.Editor edit = PreferenceManager.getDefaultSharedPreferences(this).edit(); edit.putBoolean(Constants.PREF_FIRST_RUN, false); edit.commit(); } @SuppressLint({"NewApi"}) private void checkDBAccess() { task = new CheckDBReadyTask(this); String key = TAG + ":CheckDBAccess"; boolean isAdded = LNReaderApplication.getInstance().addTask(key, task); if (isAdded) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); else task.execute(); } else { CheckDBReadyTask tempTask = (CheckDBReadyTask) LNReaderApplication.getInstance().getTask(key); if (tempTask != null) { task = tempTask; task.owner = this; } } AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this); alertDialogBuilder.setMessage("Checking..."); alertDialogBuilder.setCancelable(false); dialog = alertDialogBuilder.create(); dialog.setTitle("Checking DB access"); dialog.setCanceledOnTouchOutside(false); dialog.show(); } // endregion // region IExtendedCallbackNotifier implementation @Override public void onCompleteCallback(ICallbackEventData message, AsyncTaskResult<Boolean> result) { if (dialog != null) { dialog.dismiss(); Toast.makeText(this, message.getMessage(), Toast.LENGTH_SHORT).show(); } } @Override public void onProgressCallback(ICallbackEventData message) { if (dialog != null) { dialog.setMessage(message.getMessage()); } } @Override public boolean downloadListSetup(String taskId, String message, int setupType, boolean hasError) { // TODO Auto-generated method stub return false; } // endregion }