package com.jdroid.android.about;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.TextView;
import com.jdroid.android.activity.ActivityLauncher;
import com.jdroid.android.application.AbstractApplication;
import com.jdroid.android.feedback.RateAppStats;
import com.jdroid.android.intent.IntentUtils;
import com.jdroid.android.recycler.AbstractRecyclerFragment;
import com.jdroid.android.recycler.RecyclerViewAdapter;
import com.jdroid.android.recycler.RecyclerViewType;
import com.jdroid.android.recycler.SimpleRecyclerViewType;
import com.jdroid.android.share.ShareUtils;
import com.jdroid.android.utils.AppUtils;
import com.jdroid.java.collections.Lists;
import java.util.List;
public class AboutFragment extends AbstractRecyclerFragment {
private List<Object> aboutItems = Lists.newArrayList();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Header
aboutItems.add("");
final String website = getWebsite();
if (website != null) {
aboutItems.add(new AboutItem(R.drawable.jdroid_ic_website_black_24dp, R.string.jdroid_website) {
@Override
public void onSelected(Activity activity) {
IntentUtils.startUrl(activity, website);
}
});
}
final String contactUsEmailAddress = getContactUsEmail();
if (contactUsEmailAddress != null) {
aboutItems.add(new AboutItem(R.drawable.jdroid_ic_contact_us_black_24dp, R.string.jdroid_contactUs) {
@Override
public void onSelected(Activity activity) {
Intent intent = ShareUtils.createOpenMailIntent(contactUsEmailAddress,
AbstractApplication.get().getAppName());
if (IntentUtils.isIntentAvailable(intent)) {
startActivity(intent);
AboutAppModule.get().getAnalyticsSender().trackContactUs();
} else {
// TODO Improve this adding a toast or something
AbstractApplication.get().getExceptionHandler().logWarningException(
"Error when sending email intent");
}
}
});
}
if (AboutAppModule.get().getAboutContext().getSpreadTheLoveFragmentClass() != null) {
aboutItems.add(new AboutItem(R.drawable.jdroid_ic_spread_the_love_black_24dp, R.string.jdroid_spreadTheLove) {
@Override
public void onSelected(Activity activity) {
ActivityLauncher.launchActivity(SpreadTheLoveActivity.class);
}
});
}
aboutItems.add(new AboutItem(R.drawable.jdroid_ic_libraries_black_24dp, R.string.jdroid_libraries) {
@Override
public void onSelected(Activity activity) {
ActivityLauncher.launchActivity(LibrariesActivity.class);
}
});
if (AboutAppModule.get().getAboutContext().isBetaTestingEnabled()) {
aboutItems.add(new AboutItem(R.drawable.jdroid_ic_beta_black_24dp, R.string.jdroid_beta) {
@Override
public void onSelected(Activity activity) {
IntentUtils.startUrl(activity, AboutAppModule.get().getAboutContext().getBetaTestingUrl());
}
});
}
aboutItems.addAll(getCustomAboutItems());
if (rateAppViewEnabled() && RateAppStats.displayRateAppView()) {
// Footer
aboutItems.add(new Object());
}
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
List<RecyclerViewType> recyclerViewTypes = Lists.newArrayList();
recyclerViewTypes.add(new HeaderRecyclerViewType());
recyclerViewTypes.add(new AboutRecyclerViewType());
recyclerViewTypes.add(new FooterRecyclerViewType());
setAdapter(new RecyclerViewAdapter(recyclerViewTypes, aboutItems));
}
protected String getWebsite() {
return AbstractApplication.get().getAppContext().getWebsite();
}
protected String getContactUsEmail() {
return AbstractApplication.get().getAppContext().getContactUsEmail();
}
protected List<AboutItem> getCustomAboutItems() {
return Lists.newArrayList();
}
protected Boolean rateAppViewEnabled() {
return true;
}
@Override
protected Boolean isDividerItemDecorationEnabled() {
return true;
}
public class HeaderRecyclerViewType extends RecyclerViewType<String, HeaderItemHolder> {
@Override
protected Class<String> getItemClass() {
return String.class;
}
@Override
protected Integer getLayoutResourceId() {
return R.layout.jdroid_about_header_view;
}
@Override
public RecyclerView.ViewHolder createViewHolderFromView(View view) {
HeaderItemHolder holder = new HeaderItemHolder(view);
holder.appIcon = findView(view, R.id.appIcon);
holder.appName = findView(view, R.id.appName);
holder.version = findView(view, R.id.version);
return holder;
}
@Override
public void fillHolderFromItem(String item, HeaderItemHolder holder) {
holder.appIcon.setImageResource(AbstractApplication.get().getLauncherIconResId());
holder.appName.setText(AbstractApplication.get().getAppName());
holder.version.setText(getString(R.string.jdroid_version, AppUtils.getVersionName()));
if (AbstractApplication.get().getAppContext().displayDebugSettings()) {
holder.appIcon.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
AbstractApplication.get().getDebugContext().launchActivityDebugSettingsActivity();
}
});
}
}
@Override
public AbstractRecyclerFragment getAbstractRecyclerFragment() {
return AboutFragment.this;
}
}
public static class HeaderItemHolder extends RecyclerView.ViewHolder {
protected ImageView appIcon;
protected TextView appName;
protected TextView version;
public HeaderItemHolder(View itemView) {
super(itemView);
}
}
public class FooterRecyclerViewType extends SimpleRecyclerViewType {
@Override
protected Integer getLayoutResourceId() {
return R.layout.jdroid_about_footer_view;
}
@Override
public AbstractRecyclerFragment getAbstractRecyclerFragment() {
return AboutFragment.this;
}
}
public class AboutRecyclerViewType extends RecyclerViewType<AboutItem, AboutItemHolder> {
@Override
protected Class<AboutItem> getItemClass() {
return AboutItem.class;
}
@Override
protected Integer getLayoutResourceId() {
return R.layout.jdroid_default_item;
}
@Override
public RecyclerView.ViewHolder createViewHolderFromView(View view) {
AboutItemHolder holder = new AboutItemHolder(view);
holder.image = findView(view, R.id.image);
holder.name = findView(view, R.id.name);
return holder;
}
@Override
public void fillHolderFromItem(AboutItem item, AboutItemHolder holder) {
holder.image.setImageResource(item.getIconResId());
holder.name.setText(item.getNameResId());
}
@Override
public void onItemSelected(AboutItem item, View view) {
item.onSelected(getActivity());
}
@Override
public AbstractRecyclerFragment getAbstractRecyclerFragment() {
return AboutFragment.this;
}
}
public static class AboutItemHolder extends RecyclerView.ViewHolder {
protected ImageView image;
protected TextView name;
public AboutItemHolder(View itemView) {
super(itemView);
}
}
}