/**
* Copyright (c) 2015 unfoldingWord
* http://creativecommons.org/licenses/MIT/
* See LICENSE file for details.
* Contributors:
* PJ Fechner <pj@actsmedia.com>
*/
package activity.readingSelection;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.door43.tools.reporting.BugReporterActivity;
import com.github.peejweej.androidsideloading.fragments.SideLoadTypeChoosingFragment;
import org.unfoldingword.mobile.R;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import activity.AnimationParadigm;
import activity.CustomSettingsActivity;
import activity.UWBaseActivity;
import activity.reading.ReadingActivity;
import activity.reading.StoryReadingActivity;
import activity.sharing.ShareActivity;
import adapters.ShareAdapter;
import adapters.selectionAdapters.GeneralRowInterface;
import adapters.selectionAdapters.InitialPageAdapter;
import de.greenrobot.event.EventBus;
import eventbusmodels.DownloadResult;
import eventbusmodels.DownloadingVersionsEvent;
import fragments.CheckingLevelInfoFragment;
import model.DaoDBHelper;
import model.SharingHelper;
import model.daoModels.Project;
import services.UWSideLoaderService;
import services.UWUpdaterService;
import utils.NetWorkUtil;
import utils.UWPreferenceManager;
import view.UWTabBar;
/**
* Created by PJ Fechner on 2/27/15.
*
*/
public class InitialScreenActivity extends UWBaseActivity{
static final private String TAG = "InitialScreenActivity";
static final public String PROJECT_PARAM = "PROJECT_PARAM";
static public final String GENERAL_CHECKING_LEVEL_FRAGMENT_ID = "GENERAL_CHECKING_LEVEL_FRAGMENT_ID";
private ViewGroup updateLayout = null;
private View mRefreshButton = null;
private ListView listview;
private InitialPageAdapter adapter;
private List<Project> mProjects = null;
private UWTabBar tabBar;
//region Activity Overrides
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_initial_list);
setupViews();
Uri uri = getIntent().getData();
if(uri != null) {
loadVersion(uri);
}
}
@Override
protected void onResume() {
super.onResume();
if(UWPreferenceManager.getIsFirstLaunch(getApplicationContext())){
showCheckingLevelFragment();
}
}
@Override
protected void onPause() {
super.onPause();
}
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
EventBus.getDefault().unregister(this);
super.onStop();
}
public void onEventMainThread(DownloadResult event){
DownloadingVersionsEvent versionsEvent = EventBus.getDefault().getStickyEvent(DownloadingVersionsEvent.class);
if(versionsEvent == null || versionsEvent.getModels().size() < 1 ){
downloadEnded(event);
reload();
updateLayout.setVisibility(View.GONE);
}
}
public void onEventMainThread(DownloadingVersionsEvent event){
Log.i(TAG, "download ended size: " + event.getModels().size());
if(event.getModels().size() < 1){
reload();
updateLayout.setVisibility(View.GONE);
}
}
@Override
public int getBackResource() {
return -1;
}
@Override
public AnimationParadigm getAnimationParadigm() {
return AnimationParadigm.ANIMATION_LEFT_RIGHT;
}
@Override
public void rightButtonClicked() {
startSharing();
}
//endregion
//region Receiver Handling
private void downloadEnded(DownloadResult result){
String resultText = "";
switch (result){
case DOWNLOAD_RESULT_SUCCESS:{
resultText = "Succeeded";
break;
}
case DOWNLOAD_RESULT_CANCELED:{
resultText = "Was Canceled";
break;
}
case DOWNLOAD_RESULT_FAILED:{
resultText = "Failed";
break;
}
}
Toast.makeText(this, "Download " + resultText, Toast.LENGTH_SHORT).show();
}
//endregion
//region Setup
private void setupViews(){
setupToolbar(true, getString(R.string.app_name), false);
setupListView();
setupTabBar();
}
private void setupListView() {
List<GeneralRowInterface> data = this.getData();
if (listview == null) {
listview = (ListView) findViewById(R.id.generalList);
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (position != 0) {
startReadingActivity(mProjects.get(position - 1));
}
}
});
setupRefreshButton();
}
if(adapter == null){
adapter = new InitialPageAdapter(this.getApplicationContext(), data, -1);
listview.setAdapter(adapter);
} else{
adapter.updateWithData(data);
}
}
// private void addSettingsFooter(){
//
// LayoutInflater inflater = getLayoutInflater();
// View footerView = inflater.inflate(R.layout.footer_settings, null);
//
//
// // change version number
// Button settingsButton = (Button) footerView.findViewById(R.id.settings_button);
// settingsButton.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// goToSettings();
// }
// });
// footerView.findViewById(R.id.report_but_button).setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// goToReportBug();
// }
// });
//
// listview.addFooterView(footerView);
// }
private void goToReportBug(){
startActivity(new Intent(getApplicationContext(), BugReporterActivity.class));
}
private void setupRefreshButton() {
if(mRefreshButton == null) {
LayoutInflater inflater = getLayoutInflater();
View mview1 = inflater.inflate(R.layout.header_main, null);
updateLayout = (ViewGroup) mview1.findViewById(R.id.refreshView);
// mRefreshButton = mview1.findViewById(R.id.refreshButton);
// mRefreshButton.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// update();
// }
// });
listview.addHeaderView(mview1);
}
}
protected List<GeneralRowInterface> getData(){
if(mProjects == null){
updateProjects();
}
if(mProjects == null || mProjects.size() < 1){
return new ArrayList<>();
}
List<GeneralRowInterface> dataList = new ArrayList<>();
for(Project row : mProjects) {
dataList.add(new GeneralRowInterface.BasicGeneralRowInterface(row.getUniqueSlug(), row.getTitle()));
// List<Language> langs = row.getLanguages();
}
return dataList;
}
//endregion
//region updating
private void update(){
if (!NetWorkUtil.isConnected(this)) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Alert");
builder.setMessage("Failed connecting to the internet.");
builder.setPositiveButton("OK", null);
builder.create().show();
} else {
updateLayout.setVisibility(View.VISIBLE);
// to handle new data from network
startService(new Intent(getApplicationContext(), UWUpdaterService.class));
}
}
private void reload(){
mProjects = null;
this.setupListView();
}
private void updateProjects() {
mProjects = Project.getAllModels(DaoDBHelper.getDaoSession(getApplicationContext()));
}
//endregion
//region Navigation actions
private void goToSettings(){
goToNewActivity(CustomSettingsActivity.class);
}
private void startReadingActivity(Project project){
Class nextActivity = (project.getUniqueSlug().equalsIgnoreCase(getString(R.string.open_bible_stories_slug)))?
StoryReadingActivity.class : ReadingActivity.class;
Intent newIntent = new Intent(this, nextActivity).putExtra(PROJECT_PARAM, project);
goToNextActivity(newIntent);
}
private void showCheckingLevelFragment(){
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
CheckingLevelInfoFragment fragment = new CheckingLevelInfoFragment();
fragment.show(ft, GENERAL_CHECKING_LEVEL_FRAGMENT_ID);
UWPreferenceManager.setIsFirstLaunch(getApplicationContext(), false);
}
// @Override
// public void storagePermissionWasGranted() {
// startSharing();
// }
private void startSharing(){
if(!verifyOrRequestStoragePermissions()) {
return;
}
View titleView = View.inflate(getApplicationContext(), R.layout.alert_title, null);
((TextView) titleView.findViewById(R.id.alert_title_text_view)).setText("Select Share Method");
AlertDialog dialogue = new AlertDialog.Builder(this, AlertDialog.THEME_HOLO_LIGHT)
.setCustomTitle(titleView)
.setAdapter(new ShareAdapter(getApplicationContext(), Arrays.asList("Send/Save Versions", "Receive/Load Versions")),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0: {
goToNewActivity(new Intent(getApplicationContext(), ShareActivity.class));
break;
}
case 1: {
showSideLoadDialog();
break;
}
default: {
dialog.cancel();
}
}
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
}).create();
dialogue.show();
}
private void showSideLoadDialog(){
SideLoadTypeChoosingFragment.constructFragment(SharingHelper.getLoadInformation(), new SideLoadTypeChoosingFragment.SideLoadChoosingFragmentListener() {
@Override
public void finishWithFile(Uri uri) {
loadVersion(uri);
}
@Override
public void finishWithText(String s) {
}
}).show(getSupportFragmentManager(), "SideLoadTypeChoosingFragment");
}
private void startSideLoadActivity(){
int enterAnimation = AnimationParadigm.getNextAnimationEnter(AnimationParadigm.ANIMATION_VERTICAL);
int exitAnimation = AnimationParadigm.getNextAnimationExit(AnimationParadigm.ANIMATION_VERTICAL);
startActivityForResult(SharingHelper.getIntentForLoading(getApplicationContext()), 0);
overridePendingTransition(enterAnimation, exitAnimation);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(data != null){
Uri file = SideLoadTypeChoosingFragment.getUriFromActivityResult(requestCode, resultCode, data, SharingHelper.getLoadInformation());
if(file != null){
loadVersion(file);
}
}
}
private void loadVersion(Uri file){
setLoadingFragmentVisibility(true, "Loading Version File: " + file.getLastPathSegment(), false);
registerPreloadReceiver();
Intent intent = new Intent(getApplicationContext(), UWSideLoaderService.class)
.setData(file);
startService(intent);
Log.i(TAG, "Version Loading Started");
}
private void registerPreloadReceiver(){
IntentFilter filter = new IntentFilter();
filter.addAction(UWSideLoaderService.BROAD_CAST_SIDE_LOAD_SUCCESSFUL);
registerReceiver(SideLoadReceiever, filter);
}
private void unRegisterPreloadReceiver(){
unregisterReceiver(SideLoadReceiever);
}
private BroadcastReceiver SideLoadReceiever = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
unRegisterPreloadReceiver();
setLoadingFragmentVisibility(false, "", false);
showSuccessAlert(true);
}
};
private void showSuccessAlert(boolean success){
View titleView = View.inflate(getApplicationContext(), R.layout.alert_title, null);
((TextView) titleView.findViewById(R.id.alert_title_text_view)).setText("Load Status");
new AlertDialog.Builder(this)
.setCustomTitle(titleView)
.setMessage((success) ? "Loading was successful" : "Loading failed")
.setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.show();
}
private void setupTabBar(){
int[] images = {R.drawable.settings_icon_selector, R.drawable.update_icon_selector,
R.drawable.share_icon_selector};
tabBar = new UWTabBar(getApplicationContext(), images, (ViewGroup) findViewById(R.id.intial_activity_tab_bar_view), new UWTabBar.BottomBarListener() {
@Override
public void buttonPressedAtIndex(int index) {
tabBarPressed(index);
}
});
}
private void tabBarPressed(int index){
switch (index){
case 0:{
goToSettings();
break;
}
case 1:{
update();
break;
}
case 2:{
startSharing();
break;
}
}
}
//endregion
}