package com.pitchedapps.butler.sample.request; import android.Manifest; import android.content.Context; import android.os.Bundle; import android.os.Environment; import android.support.annotation.Nullable; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.pitchedapps.butler.iconrequest.IconRequest; import com.pitchedapps.butler.iconrequest.events.AppLoadedEvent; import com.pitchedapps.butler.iconrequest.events.AppLoadingEvent; import com.pitchedapps.butler.iconrequest.events.EventState; import com.pitchedapps.butler.iconrequest.events.OnRequestProgress; import com.pitchedapps.butler.iconrequest.events.RequestsCallback; import com.pitchedapps.butler.sample.BuildConfig; import com.pitchedapps.butler.sample.R; import com.pluscubed.recyclerfastscroll.RecyclerFastScroller; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.io.File; import java.util.concurrent.TimeUnit; import ca.allanwang.capsule.library.event.CFabEvent; import ca.allanwang.capsule.library.fragments.CapsuleFragment; import ca.allanwang.capsule.library.permissions.CPermissionCallback; import ca.allanwang.capsule.library.permissions.PermissionResult; import static com.pitchedapps.butler.iconrequest.IconRequest.STATE_LIMITED; import static com.pitchedapps.butler.iconrequest.IconRequest.STATE_TIME_LIMITED; /** * Created by Allan Wang on 2016-08-20. */ public class RequestFragment extends CapsuleFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); EventBus.builder() .logNoSubscriberMessages(false) .sendNoSubscriberEvent(false) .throwSubscriberException(false) .installDefaultEventBus(); setupRequest(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); View v = inflater.inflate(R.layout.icon_request_section, container, false); mViewGroup = (ViewGroup) v.findViewById(R.id.viewgroup); mText = (TextView) v.findViewById(R.id.text); mRV = (RecyclerView) v.findViewById(R.id.appsToRequestList); LinearLayoutManager llm = new LinearLayoutManager(getActivity()); mRV.setLayoutManager(llm); mRV.setHasFixedSize(true); mLoadingView = (RelativeLayout) v.findViewById(R.id.loading_view); RecyclerFastScroller mFastScroller = (RecyclerFastScroller) v.findViewById(R.id.rvFastScroller); mFastScroller.attachRecyclerView(mRV); if (savedInstanceState != null) IconRequest.restoreInstanceState(getActivity(), savedInstanceState); start = System.currentTimeMillis(); return v; } @Override public void onStart() { super.onStart(); EventBus.getDefault().register(this); } @Override public void onStop() { EventBus.getDefault().unregister(this); super.onStop(); } @Override public int getTitleId() { return R.string.request_title; } private RecyclerView mRV; private RelativeLayout mLoadingView; private long start; private ViewGroup mViewGroup; private TextView mText; private RequestsAdapter mAdapter; private void setupRequest() { if (IconRequest.get() == null) { IconRequest.start(getActivity()) .withHeader("Hey, testing Icon Request!") .withFooter("%s Version: %s", getString(R.string.app_name), BuildConfig .VERSION_NAME) .withSubject("Icon Request - Just a Test") .toEmail("fake-email@fake-website.com") .saveDir(new File(Environment.getExternalStorageDirectory(), "Pitched_Apps/Capsule")) .withTimeLimit(-1, getActivity().getSharedPreferences("ButlerPrefs", Context .MODE_PRIVATE)) .includeDeviceInfo(true) .generateAppFilterXml(true) .generateAppFilterJson(false) .requestEvents(EventState.DISABLED) .loadedEvents(EventState.ENABLED) .loadingEvents(EventState.DISABLED) .selectionEvents(EventState.DISABLED) .filterOff() .debugMode(BuildConfig.DEBUG) .setCallback(new RequestsCallback() { @Override public void onRequestLimited(final Context context, @IconRequest.State final int reason, final int requestsLeft, final long millis) { getActivity().runOnUiThread(new Runnable() { @Override public void run() { if (reason == STATE_TIME_LIMITED && millis > 0) { Toast.makeText(context, "Request limited. Time " + "left: " + TimeUnit.MILLISECONDS.toSeconds (millis) + " seconds.", Toast.LENGTH_LONG).show(); } else if (reason == STATE_LIMITED) { Toast.makeText(context, "Request limited. Requests " + "left: " + requestsLeft + ".", Toast.LENGTH_LONG) .show(); } } }); } @Override public void onRequestEmpty(Context context) { Toast.makeText(context, "No apps selected to request.", Toast .LENGTH_LONG).show(); } }) .build().loadApps(); } } @Subscribe(threadMode = ThreadMode.MAIN) public void onAppsLoaded(AppLoadedEvent event) { // EventBus.getDefault().removeStickyEvent(event.getClass()); mViewGroup.removeView(mLoadingView); // snackbar(String.format(Locale.getDefault(), "Loaded in %d milliseconds", System // .currentTimeMillis() - start), Snackbar.LENGTH_LONG).show(); mAdapter = new RequestsAdapter(); mRV.setAdapter(mAdapter); // IconRequest.get().loadHighResIcons(); } @Subscribe(threadMode = ThreadMode.MAIN) public void onAppsLoading(AppLoadingEvent event) { // EventBus.getDefault().removeStickyEvent(event.getClass()); mText.setText(event.getString()); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); IconRequest.saveInstanceState(outState); } @Nullable @Override protected CFabEvent updateFab() { return new CFabEvent(R.drawable.ic_email, new View.OnClickListener() { @Override public void onClick(View view) { getPermissions(new CPermissionCallback() { @Override public void onResult(PermissionResult result) { if (result.isAllGranted()) { if (IconRequest.get() != null) { IconRequest.get().send(new OnRequestProgress() { @Override public void doWhenStarted() { getActivity().runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getActivity(), "Preparing " + "request...", Toast.LENGTH_SHORT).show(); } }); } @Override public void doOnError() { getActivity().runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getActivity(), "Sorry, an error just occurred", Toast.LENGTH_SHORT).show(); } }); } @Override public void doWhenReady() { getActivity().runOnUiThread(new Runnable() { @Override public void run() { mAdapter.unselectAllApps(); Toast.makeText(getActivity(), "Request Ready. " + "Starting " + "send intent...", Toast.LENGTH_SHORT) .show(); } }); } }); } } } }, 9, Manifest.permission.WRITE_EXTERNAL_STORAGE); } }); } }