package com.mercandalli.android.apps.files.support; import android.content.Context; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.EditorInfo; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import com.mercandalli.android.apps.files.R; import com.mercandalli.android.apps.files.common.fragment.BackFragment; import com.mercandalli.android.apps.files.common.listener.SetToolbarCallback; import com.mercandalli.android.apps.files.main.Config; import com.mercandalli.android.apps.files.main.network.NetUtils; import com.mercandalli.android.library.base.java.StringUtils; import java.util.List; import static com.mercandalli.android.apps.files.support.SupportUtils.getDevice; import static com.mercandalli.android.library.base.device.DeviceUtils.getDeviceId; import static com.mercandalli.android.library.base.input.KeyboardUtils.hideSoftInput; public class SupportFragment extends BackFragment implements SupportCommentAdapter.OnSupportCommentLongClickListener, SupportCommentAdapter.OnSupportCommentClickListener, SupportManager.GetSupportManagerCallback, View.OnClickListener, SwipeRefreshLayout.OnRefreshListener { private static final String BUNDLE_ARG_TITLE = "SupportFragment.Args.BUNDLE_ARG_TITLE"; private SetToolbarCallback mSetToolbarCallback; private String mTitle; private RecyclerView mRecyclerView; private EditText mEditText; private Button mNoInternetButton; private TextView mAdminTextView; private View mCancelView; private View mOkView; private View mProgressBar; private SwipeRefreshLayout mSwipeRefreshLayout; private String mCurrentDeviceId; private SupportCommentAdapter mSupportCommentAdapter; private SupportManager mSupportManager; public static SupportFragment newInstance(String title) { final SupportFragment fragment = new SupportFragment(); final Bundle args = new Bundle(); args.putString(BUNDLE_ARG_TITLE, title); fragment.setArguments(args); return fragment; } @Override public void onAttach(Context context) { super.onAttach(context); if (context instanceof SetToolbarCallback) { mSetToolbarCallback = (SetToolbarCallback) context; } else { throw new IllegalArgumentException("Must be attached to a HomeActivity. Found: " + context); } } @Override public void onDetach() { super.onDetach(); mSetToolbarCallback = null; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final Bundle args = getArguments(); if (!args.containsKey(BUNDLE_ARG_TITLE)) { throw new IllegalStateException("Missing args. Please use newInstance()"); } mTitle = args.getString(BUNDLE_ARG_TITLE); mSupportManager = SupportManager.getInstance(getContext()); mSupportManager.registerGetSupportManagerCallback(this); } @Override public void onDestroy() { mSupportManager.unregisterGetSupportManagerCallback(this); super.onDestroy(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View rootView = inflater.inflate(R.layout.fragment_support, container, false); final Context context = getContext(); final Toolbar toolbar = (Toolbar) rootView.findViewById(R.id.fragment_support_tool_bar); toolbar.setTitle(mTitle); mSetToolbarCallback.setToolbar(toolbar); findViews(rootView); init(context); return rootView; } @Override public boolean back() { return false; } @Override public boolean onSupportCommentLongClick(View view, int position) { return false; } @Override public void onSupportCommentClick(View view, int position) { } @Override public void onGetSupportSucceeded( @Nullable final String deviceIdAsked, final List<SupportComment> supportComments, final boolean adminIdSelection) { mSwipeRefreshLayout.setRefreshing(false); mCurrentDeviceId = deviceIdAsked; syncVisibility(false); mSupportCommentAdapter.setSupportComments(supportComments); mSupportCommentAdapter.setIsAdminIdSelection(adminIdSelection); mRecyclerView.scrollToPosition(supportComments.size() - 1); } @Override public void onGetSupportFailed(final boolean adminIdSelection) { mSwipeRefreshLayout.setRefreshing(false); syncVisibility(false); } @Override public void onClick(final View v) { if (v == mNoInternetButton) { refreshList(); } else if (v == mOkView) { sendEditTextContent(); } else if (v == mCancelView) { mEditText.setText(""); } else if (v == mAdminTextView) { final String myDeviceId = getDeviceId(getContext()); if (!StringUtils.isEquals(mCurrentDeviceId, myDeviceId)) { mCurrentDeviceId = myDeviceId; refreshList(); mAdminTextView.setText("Go Adm"); } else { syncVisibility(true); mSupportManager.getAllDeviceIds(); mAdminTextView.setText("Go You"); } } } @Override public void onRefresh() { refreshList(); } private void findViews(final View rootView) { mSwipeRefreshLayout = (SwipeRefreshLayout) rootView.findViewById(R.id.fragment_support_swipe_refresh_layout); mProgressBar = rootView.findViewById(R.id.fragment_support_progress_bar); mOkView = rootView.findViewById(R.id.fragment_support_ok); mAdminTextView = (TextView) rootView.findViewById(R.id.fragment_support_admin); mCancelView = rootView.findViewById(R.id.fragment_support_cancel); mRecyclerView = (RecyclerView) rootView.findViewById(R.id.fragment_support_recycler_view); mEditText = (EditText) rootView.findViewById(R.id.fragment_support_edit_text); mNoInternetButton = (Button) rootView.findViewById(R.id.fragment_support_no_internet_bt); } private void init(final Context context) { mNoInternetButton.setOnClickListener(this); mSupportCommentAdapter = new SupportCommentAdapter(this, this); mRecyclerView.setLayoutManager(new LinearLayoutManager(context)); mRecyclerView.setAdapter(mSupportCommentAdapter); mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); if (dy < -5) { hideSoftInput(mEditText); } } }); mSwipeRefreshLayout.setOnRefreshListener(this); mSwipeRefreshLayout.setColorSchemeResources(android.R.color.holo_blue_bright, android.R.color.holo_green_light, android.R.color.holo_orange_light, android.R.color.holo_red_light); mCurrentDeviceId = getDeviceId(context); refreshList(); mEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_DONE && !TextUtils.isEmpty(v.getText())) { sendEditTextContent(); return true; } return false; } }); if (Config.isUserAdmin()) { mAdminTextView.setOnClickListener(this); } mOkView.setOnClickListener(this); mCancelView.setOnClickListener(this); } private void syncVisibility(final boolean isLoading) { if (!NetUtils.isInternetConnection(getContext())) { mNoInternetButton.setVisibility(View.VISIBLE); mProgressBar.setVisibility(View.GONE); mEditText.setVisibility(View.GONE); mAdminTextView.setVisibility(View.GONE); mOkView.setVisibility(View.GONE); mCancelView.setVisibility(View.GONE); mRecyclerView.setVisibility(View.GONE); return; } mNoInternetButton.setVisibility(View.GONE); mProgressBar.setVisibility(isLoading ? View.VISIBLE : View.GONE); mRecyclerView.setVisibility(isLoading ? View.GONE : View.VISIBLE); mEditText.setVisibility(isLoading ? View.GONE : View.VISIBLE); mAdminTextView.setVisibility(!isLoading && Config.isUserAdmin() ? View.VISIBLE : View.GONE); mOkView.setVisibility(isLoading ? View.GONE : View.VISIBLE); mCancelView.setVisibility(isLoading ? View.GONE : View.VISIBLE); } private void refreshList() { syncVisibility(true); mSupportManager.getSupportComment(mCurrentDeviceId); } private void sendEditTextContent() { final String message = mEditText.getText().toString(); final Context context = getContext(); if (TextUtils.isEmpty(message)) { Toast.makeText(context, "Your message is empty", Toast.LENGTH_SHORT).show(); return; } final SupportDevice supportDevice = getDevice(context); mSupportManager.addSupportComment(new SupportComment( "", mCurrentDeviceId, Config.isUserAdmin(), message, supportDevice.mAndroidAppVersionCode, supportDevice.mAndroidAppVersionName, Config.getNotificationId(), supportDevice.mAndroidDeviceVersionSdk, supportDevice.mAndroidDeviceModel, supportDevice.mAndroidDeviceManufacturer, supportDevice.mAndroidDeviceDisplayLanguage, supportDevice.mAndroidDeviceCountry, 0)); mEditText.setText(""); } }