From 2126ff036870a34c757cceb8ab05a8ee2b585012 Mon Sep 17 00:00:00 2001 From: robustTechie Date: Sun, 23 Aug 2020 13:37:00 +0530 Subject: [PATCH] Conversion: Client Signature, datatable, document, and Notes --- .../online/datatable/DataTableFragment.java | 185 --------- .../online/datatable/DataTableFragment.kt | 164 ++++++++ .../online/datatable/DataTableMvpView.java | 23 -- .../online/datatable/DataTableMvpView.kt | 15 + .../online/datatable/DataTablePresenter.java | 87 ----- .../online/datatable/DataTablePresenter.kt | 69 ++++ .../datatabledata/DataTableDataFragment.java | 221 ----------- .../datatabledata/DataTableDataFragment.kt | 184 +++++++++ .../datatabledata/DataTableDataMvpView.java | 20 - .../datatabledata/DataTableDataMvpView.kt | 15 + .../datatabledata/DataTableDataPresenter.java | 98 ----- .../datatabledata/DataTableDataPresenter.kt | 80 ++++ .../DataTableListFragment.java | 345 ----------------- .../DataTableListFragment.kt | 266 +++++++++++++ .../DataTableListMvpView.java | 15 - .../DataTableListMvpView.kt | 11 + .../DataTableListPresenter.java | 135 ------- .../DataTableListPresenter.kt | 113 ++++++ .../documentlist/DocumentListFragment.java | 366 ------------------ .../documentlist/DocumentListFragment.kt | 312 +++++++++++++++ .../documentlist/DocumentListMvpView.java | 34 -- .../documentlist/DocumentListMvpView.kt | 21 + .../documentlist/DocumentListPresenter.java | 124 ------ .../documentlist/DocumentListPresenter.kt | 94 +++++ .../mifosxdroid/online/note/NoteFragment.java | 165 -------- .../mifosxdroid/online/note/NoteFragment.kt | 151 ++++++++ .../mifosxdroid/online/note/NoteMvpView.java | 22 -- .../mifosxdroid/online/note/NoteMvpView.kt | 15 + .../online/note/NotePresenter.java | 76 ---- .../mifosxdroid/online/note/NotePresenter.kt | 59 +++ .../online/sign/SignatureFragment.java | 268 ------------- .../online/sign/SignatureFragment.kt | 220 +++++++++++ .../online/sign/SignatureMvpView.java | 23 -- .../online/sign/SignatureMvpView.kt | 16 + .../online/sign/SignaturePresenter.java | 80 ---- .../online/sign/SignaturePresenter.kt | 66 ++++ 36 files changed, 1871 insertions(+), 2287 deletions(-) delete mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatable/DataTableFragment.java create mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatable/DataTableFragment.kt delete mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatable/DataTableMvpView.java create mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatable/DataTableMvpView.kt delete mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatable/DataTablePresenter.java create mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatable/DataTablePresenter.kt delete mode 100755 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatabledata/DataTableDataFragment.java create mode 100755 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatabledata/DataTableDataFragment.kt delete mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatabledata/DataTableDataMvpView.java create mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatabledata/DataTableDataMvpView.kt delete mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatabledata/DataTableDataPresenter.java create mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatabledata/DataTableDataPresenter.kt delete mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatablelistfragment/DataTableListFragment.java create mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatablelistfragment/DataTableListFragment.kt delete mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatablelistfragment/DataTableListMvpView.java create mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatablelistfragment/DataTableListMvpView.kt delete mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatablelistfragment/DataTableListPresenter.java create mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatablelistfragment/DataTableListPresenter.kt delete mode 100755 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/documentlist/DocumentListFragment.java create mode 100755 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/documentlist/DocumentListFragment.kt delete mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/documentlist/DocumentListMvpView.java create mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/documentlist/DocumentListMvpView.kt delete mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/documentlist/DocumentListPresenter.java create mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/documentlist/DocumentListPresenter.kt delete mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NoteFragment.java create mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NoteFragment.kt delete mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NoteMvpView.java create mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NoteMvpView.kt delete mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NotePresenter.java create mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NotePresenter.kt delete mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/sign/SignatureFragment.java create mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/sign/SignatureFragment.kt delete mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/sign/SignatureMvpView.java create mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/sign/SignatureMvpView.kt delete mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/sign/SignaturePresenter.java create mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/sign/SignaturePresenter.kt diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatable/DataTableFragment.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatable/DataTableFragment.java deleted file mode 100644 index 38bd7fe2131..00000000000 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatable/DataTableFragment.java +++ /dev/null @@ -1,185 +0,0 @@ -package com.mifos.mifosxdroid.online.datatable; - -import android.os.Bundle; -import androidx.annotation.Nullable; -import androidx.fragment.app.FragmentTransaction; -import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.ProgressBar; -import android.widget.TextView; - -import com.mifos.mifosxdroid.R; -import com.mifos.mifosxdroid.adapters.DataTableAdapter; -import com.mifos.mifosxdroid.core.MifosBaseActivity; -import com.mifos.mifosxdroid.core.MifosBaseFragment; -import com.mifos.mifosxdroid.core.RecyclerItemClickListener; -import com.mifos.mifosxdroid.core.util.Toaster; -import com.mifos.mifosxdroid.online.datatabledata.DataTableDataFragment; -import com.mifos.objects.noncore.DataTable; -import com.mifos.utils.Constants; -import com.mifos.utils.FragmentConstants; - -import java.util.ArrayList; -import java.util.List; - -import javax.inject.Inject; - -import butterknife.BindView; -import butterknife.ButterKnife; - -/** - * Created by Rajan Maurya on 12/02/17. - */ - -public class DataTableFragment extends MifosBaseFragment implements DataTableMvpView, - SwipeRefreshLayout.OnRefreshListener, RecyclerItemClickListener.OnItemClickListener { - - @BindView(R.id.rv_data_table) - RecyclerView rvDataTable; - - @BindView(R.id.progressbar_data_table) - ProgressBar pbDataTable; - - @BindView(R.id.swipe_container) - SwipeRefreshLayout swipeRefreshLayout; - - @BindView(R.id.tv_error) - TextView tvError; - - @BindView(R.id.iv_error) - ImageView ivError; - - @BindView(R.id.ll_error) - LinearLayout ll_error; - - @Inject - DataTablePresenter dataTablePresenter; - - @Inject - DataTableAdapter dataTableAdapter; - - View rootView; - - private String tableName; - private int entityId; - private List dataTables; - - @Override - public void onItemClick(View childView, int position) { - DataTableDataFragment dataTableDataFragment - = DataTableDataFragment.newInstance(dataTables.get(position), entityId); - FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager() - .beginTransaction(); - fragmentTransaction.addToBackStack(FragmentConstants.FRAG_CLIENT_DETAILS); - fragmentTransaction.replace(R.id.container, dataTableDataFragment, FragmentConstants - .FRAG_DATA_TABLE); - fragmentTransaction.commit(); - } - - @Override - public void onItemLongPress(View childView, int position) { - - } - - public static DataTableFragment newInstance(String tableName, int entityId) { - Bundle arguments = new Bundle(); - DataTableFragment dataTableFragment = new DataTableFragment(); - arguments.putString(Constants.DATA_TABLE_NAME, tableName); - arguments.putInt(Constants.ENTITY_ID, entityId); - dataTableFragment.setArguments(arguments); - return dataTableFragment; - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - if (getArguments() != null) { - tableName = getArguments().getString(Constants.DATA_TABLE_NAME); - entityId = getArguments().getInt(Constants.ENTITY_ID); - } - dataTables = new ArrayList<>(); - } - - @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable - Bundle savedInstanceState) { - ((MifosBaseActivity) getActivity()).getActivityComponent().inject(this); - rootView = inflater.inflate(R.layout.fragment_datatables, container, false); - ButterKnife.bind(this, rootView); - dataTablePresenter.attachView(this); - - showUserInterface(); - dataTablePresenter.loadDataTable(tableName); - - return rootView; - } - - @Override - public void onRefresh() { - dataTablePresenter.loadDataTable(tableName); - } - - @Override - public void showUserInterface() { - setToolbarTitle(getResources().getString(R.string.datatables)); - LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity()); - mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); - rvDataTable.setLayoutManager(mLayoutManager); - rvDataTable.setHasFixedSize(true); - rvDataTable.setAdapter(dataTableAdapter); - rvDataTable.addOnItemTouchListener(new RecyclerItemClickListener(getActivity(), this)); - swipeRefreshLayout.setColorSchemeColors(getActivity() - .getResources().getIntArray(R.array.swipeRefreshColors)); - swipeRefreshLayout.setOnRefreshListener(this); - } - - @Override - public void showDataTables(List dataTables) { - this.dataTables = dataTables; - dataTableAdapter.setDataTables(dataTables); - } - - @Override - public void showEmptyDataTables() { - ll_error.setVisibility(View.VISIBLE); - rvDataTable.setVisibility(View.GONE); - tvError.setText(R.string.empty_data_table); - } - - @Override - public void showResetVisibility() { - ll_error.setVisibility(View.GONE); - rvDataTable.setVisibility(View.VISIBLE); - } - - @Override - public void showError(int message) { - Toaster.show(rootView, message); - ll_error.setVisibility(View.VISIBLE); - rvDataTable.setVisibility(View.GONE); - tvError.setText( getString(R.string.failed_to_fetch_datatable)); - } - - @Override - public void showProgressbar(boolean show) { - if (show && (dataTableAdapter.getItemCount() == 0)) { - pbDataTable.setVisibility(View.VISIBLE); - swipeRefreshLayout.setRefreshing(false); - } else { - pbDataTable.setVisibility(View.GONE); - swipeRefreshLayout.setRefreshing(show); - } - } - - @Override - public void onDestroyView() { - super.onDestroyView(); - dataTablePresenter.detachView(); - } -} diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatable/DataTableFragment.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatable/DataTableFragment.kt new file mode 100644 index 00000000000..63a06f23224 --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatable/DataTableFragment.kt @@ -0,0 +1,164 @@ +package com.mifos.mifosxdroid.online.datatable + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.ProgressBar +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener +import butterknife.BindView +import butterknife.ButterKnife +import com.mifos.mifosxdroid.R +import com.mifos.mifosxdroid.adapters.DataTableAdapter +import com.mifos.mifosxdroid.core.MifosBaseActivity +import com.mifos.mifosxdroid.core.MifosBaseFragment +import com.mifos.mifosxdroid.core.RecyclerItemClickListener +import com.mifos.mifosxdroid.core.util.Toaster +import com.mifos.mifosxdroid.online.datatabledata.DataTableDataFragment +import com.mifos.objects.noncore.DataTable +import com.mifos.utils.Constants +import com.mifos.utils.FragmentConstants +import java.util.* +import javax.inject.Inject + +/** + * Created by Rajan Maurya on 12/02/17. + */ +class DataTableFragment : MifosBaseFragment(), DataTableMvpView, OnRefreshListener, RecyclerItemClickListener.OnItemClickListener { + @JvmField + @BindView(R.id.rv_data_table) + var rvDataTable: RecyclerView? = null + + @JvmField + @BindView(R.id.progressbar_data_table) + var pbDataTable: ProgressBar? = null + + @JvmField + @BindView(R.id.swipe_container) + var swipeRefreshLayout: SwipeRefreshLayout? = null + + @JvmField + @BindView(R.id.tv_error) + var tvError: TextView? = null + + @JvmField + @BindView(R.id.iv_error) + var ivError: ImageView? = null + + @JvmField + @BindView(R.id.ll_error) + var ll_error: LinearLayout? = null + + @JvmField + @Inject + var dataTablePresenter: DataTablePresenter? = null + + @JvmField + @Inject + var dataTableAdapter: DataTableAdapter? = null + lateinit var rootView: View + private var tableName: String? = null + private var entityId = 0 + private var dataTables: List? = null + override fun onItemClick(childView: View, position: Int) { + val dataTableDataFragment: DataTableDataFragment = DataTableDataFragment.Companion.newInstance(dataTables!![position], entityId) + val fragmentTransaction = activity!!.supportFragmentManager + .beginTransaction() + fragmentTransaction.addToBackStack(FragmentConstants.FRAG_CLIENT_DETAILS) + fragmentTransaction.replace(R.id.container, dataTableDataFragment, FragmentConstants.FRAG_DATA_TABLE) + fragmentTransaction.commit() + } + + override fun onItemLongPress(childView: View, position: Int) {} + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + if (arguments != null) { + tableName = arguments!!.getString(Constants.DATA_TABLE_NAME) + entityId = arguments!!.getInt(Constants.ENTITY_ID) + } + dataTables = ArrayList() + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + (activity as MifosBaseActivity?)!!.activityComponent.inject(this) + rootView = inflater.inflate(R.layout.fragment_datatables, container, false) + ButterKnife.bind(this, rootView) + dataTablePresenter!!.attachView(this) + showUserInterface() + dataTablePresenter!!.loadDataTable(tableName) + return rootView + } + + override fun onRefresh() { + dataTablePresenter!!.loadDataTable(tableName) + } + + override fun showUserInterface() { + setToolbarTitle(resources.getString(R.string.datatables)) + val mLayoutManager = LinearLayoutManager(activity) + mLayoutManager.orientation = LinearLayoutManager.VERTICAL + rvDataTable!!.layoutManager = mLayoutManager + rvDataTable!!.setHasFixedSize(true) + rvDataTable!!.adapter = dataTableAdapter + rvDataTable!!.addOnItemTouchListener(RecyclerItemClickListener(activity, this)) + swipeRefreshLayout!!.setColorSchemeColors(*activity + ?.getResources()!!.getIntArray(R.array.swipeRefreshColors)) + swipeRefreshLayout!!.setOnRefreshListener(this) + } + + override fun showDataTables(dataTables: List?) { + this.dataTables = dataTables + dataTableAdapter!!.setDataTables(dataTables) + } + + override fun showEmptyDataTables() { + ll_error!!.visibility = View.VISIBLE + rvDataTable!!.visibility = View.GONE + tvError!!.setText(R.string.empty_data_table) + } + + override fun showResetVisibility() { + ll_error!!.visibility = View.GONE + rvDataTable!!.visibility = View.VISIBLE + } + + override fun showError(message: Int) { + Toaster.show(rootView, message) + ll_error!!.visibility = View.VISIBLE + rvDataTable!!.visibility = View.GONE + tvError!!.text = getString(R.string.failed_to_fetch_datatable) + } + + override fun showProgressbar(show: Boolean) { + if (show && dataTableAdapter!!.itemCount == 0) { + pbDataTable!!.visibility = View.VISIBLE + swipeRefreshLayout!!.isRefreshing = false + } else { + pbDataTable!!.visibility = View.GONE + swipeRefreshLayout!!.isRefreshing = show + } + } + + override fun onDestroyView() { + super.onDestroyView() + dataTablePresenter!!.detachView() + } + + companion object { + @JvmStatic + fun newInstance(tableName: String?, entityId: Int): DataTableFragment { + val arguments = Bundle() + val dataTableFragment = DataTableFragment() + arguments.putString(Constants.DATA_TABLE_NAME, tableName) + arguments.putInt(Constants.ENTITY_ID, entityId) + dataTableFragment.arguments = arguments + return dataTableFragment + } + } +} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatable/DataTableMvpView.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatable/DataTableMvpView.java deleted file mode 100644 index eedc781b520..00000000000 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatable/DataTableMvpView.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.mifos.mifosxdroid.online.datatable; - -import com.mifos.mifosxdroid.base.MvpView; -import com.mifos.objects.noncore.DataTable; - -import java.util.List; - -/** - * Created by Rajan Maurya on 12/02/17. - */ - -public interface DataTableMvpView extends MvpView { - - void showUserInterface(); - - void showDataTables(List dataTables); - - void showEmptyDataTables(); - - void showResetVisibility(); - - void showError(int message); -} diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatable/DataTableMvpView.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatable/DataTableMvpView.kt new file mode 100644 index 00000000000..765c6a764eb --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatable/DataTableMvpView.kt @@ -0,0 +1,15 @@ +package com.mifos.mifosxdroid.online.datatable + +import com.mifos.mifosxdroid.base.MvpView +import com.mifos.objects.noncore.DataTable + +/** + * Created by Rajan Maurya on 12/02/17. + */ +interface DataTableMvpView : MvpView { + fun showUserInterface() + fun showDataTables(dataTables: List?) + fun showEmptyDataTables() + fun showResetVisibility() + fun showError(message: Int) +} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatable/DataTablePresenter.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatable/DataTablePresenter.java deleted file mode 100644 index 90d96005686..00000000000 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatable/DataTablePresenter.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.mifos.mifosxdroid.online.datatable; - -import com.mifos.api.datamanager.DataManagerDataTable; -import com.mifos.mifosxdroid.R; -import com.mifos.mifosxdroid.base.BasePresenter; -import com.mifos.objects.noncore.DataTable; - -import java.util.List; - -import javax.inject.Inject; - -import rx.Subscriber; -import rx.android.schedulers.AndroidSchedulers; -import rx.schedulers.Schedulers; -import rx.subscriptions.CompositeSubscription; - -/** - * Created by Rajan Maurya on 12/02/17. - */ -public class DataTablePresenter extends BasePresenter { - - private final DataManagerDataTable dataManagerDataTable; - private CompositeSubscription subscriptions; - - @Inject - public DataTablePresenter(DataManagerDataTable dataManagerDataTable) { - this.dataManagerDataTable = dataManagerDataTable; - subscriptions = new CompositeSubscription(); - - } - - @Override - public void attachView(DataTableMvpView mvpView) { - super.attachView(mvpView); - } - - @Override - public void detachView() { - super.detachView(); - subscriptions.clear(); - } - - /** - * This method load the DataTable. - * - * Table name can be - * "m_client" - * "m_group" - * "m_loan" - * "m_office" - * "m_saving_account" - * "m_product_loan" - * "m_savings_product - * - * Response: List - */ - public void loadDataTable(String tableName) { - checkViewAttached(); - getMvpView().showProgressbar(true); - getMvpView().showResetVisibility(); - subscriptions.add(dataManagerDataTable.getDataTable(tableName) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(new Subscriber>() { - @Override - public void onCompleted() { - } - - @Override - public void onError(Throwable e) { - getMvpView().showProgressbar(false); - getMvpView().showError(R.string.failed_to_fetch_datatable); - } - - @Override - public void onNext(List dataTables) { - getMvpView().showProgressbar(false); - if (!dataTables.isEmpty()) { - getMvpView().showDataTables(dataTables); - } else { - getMvpView().showEmptyDataTables(); - } - } - })); - } - -} diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatable/DataTablePresenter.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatable/DataTablePresenter.kt new file mode 100644 index 00000000000..7bbf7cea6a7 --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatable/DataTablePresenter.kt @@ -0,0 +1,69 @@ +package com.mifos.mifosxdroid.online.datatable + +import com.mifos.api.datamanager.DataManagerDataTable +import com.mifos.mifosxdroid.R +import com.mifos.mifosxdroid.base.BasePresenter +import com.mifos.objects.noncore.DataTable +import rx.Subscriber +import rx.android.schedulers.AndroidSchedulers +import rx.schedulers.Schedulers +import rx.subscriptions.CompositeSubscription +import javax.inject.Inject + +/** + * Created by Rajan Maurya on 12/02/17. + */ +class DataTablePresenter @Inject constructor(private val dataManagerDataTable: DataManagerDataTable) : BasePresenter() { + private val subscriptions: CompositeSubscription + override fun attachView(mvpView: DataTableMvpView?) { + super.attachView(mvpView) + } + + override fun detachView() { + super.detachView() + subscriptions.clear() + } + + /** + * This method load the DataTable. + * + * Table name can be + * "m_client" + * "m_group" + * "m_loan" + * "m_office" + * "m_saving_account" + * "m_product_loan" + * "m_savings_product + * + * Response: List + */ + fun loadDataTable(tableName: String?) { + checkViewAttached() + mvpView!!.showProgressbar(true) + mvpView!!.showResetVisibility() + subscriptions.add(dataManagerDataTable.getDataTable(tableName) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeOn(Schedulers.io()) + .subscribe(object : Subscriber?>() { + override fun onCompleted() {} + override fun onError(e: Throwable) { + mvpView!!.showProgressbar(false) + mvpView!!.showError(R.string.failed_to_fetch_datatable) + } + + override fun onNext(dataTables: List?) { + mvpView!!.showProgressbar(false) + if (!dataTables!!.isEmpty()) { + mvpView!!.showDataTables(dataTables as List?) + } else { + mvpView!!.showEmptyDataTables() + } + } + })) + } + + init { + subscriptions = CompositeSubscription() + } +} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatabledata/DataTableDataFragment.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatabledata/DataTableDataFragment.java deleted file mode 100755 index 148c33a03c9..00000000000 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatabledata/DataTableDataFragment.java +++ /dev/null @@ -1,221 +0,0 @@ -/* - * This project is licensed under the open source MPL V2. - * See https://github.com/openMF/android-client/blob/master/LICENSE.md - */ - -package com.mifos.mifosxdroid.online.datatabledata; - -import android.app.Activity; -import android.content.DialogInterface; -import android.content.Intent; -import android.os.Bundle; -import androidx.fragment.app.FragmentTransaction; -import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.widget.LinearLayout; -import android.widget.ProgressBar; -import android.widget.TextView; -import android.widget.Toast; - -import com.google.gson.JsonArray; -import com.mifos.mifosxdroid.R; -import com.mifos.mifosxdroid.core.MaterialDialog; -import com.mifos.mifosxdroid.core.MifosBaseActivity; -import com.mifos.mifosxdroid.core.MifosBaseFragment; -import com.mifos.mifosxdroid.core.util.Toaster; -import com.mifos.mifosxdroid.dialogfragments.datatablerowdialog.DataTableRowDialogFragment; -import com.mifos.objects.noncore.DataTable; -import com.mifos.utils.Constants; -import com.mifos.utils.DataTableUIBuilder; -import com.mifos.utils.FragmentConstants; - -import javax.inject.Inject; - -import butterknife.BindView; -import butterknife.ButterKnife; - - -public class DataTableDataFragment extends MifosBaseFragment - implements DataTableUIBuilder.DataTableActionListener, DataTableDataMvpView, - SwipeRefreshLayout.OnRefreshListener { - - @BindView(R.id.linear_layout_datatables) - LinearLayout linearLayout; - - @BindView(R.id.swipe_container) - SwipeRefreshLayout swipeRefreshLayout; - - @BindView(R.id.progressbar_data_table) - ProgressBar pbDataTable; - - @BindView(R.id.ll_error) - LinearLayout llError; - - @BindView(R.id.tv_error) - TextView tvError; - - @Inject - DataTableDataPresenter mDataTableDataPresenter; - - private DataTable dataTable; - private int entityId; - private View rootView; - - - public static DataTableDataFragment newInstance(DataTable dataTable, int entityId) { - DataTableDataFragment fragment = new DataTableDataFragment(); - fragment.dataTable = dataTable; - fragment.entityId = entityId; - return fragment; - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - ((MifosBaseActivity) getActivity()).getActivityComponent().inject(this); - setHasOptionsMenu(true); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle - savedInstanceState) { - // Inflate the layout for this fragment - rootView = inflater.inflate(R.layout.fragment_datatable, container, false); - - ButterKnife.bind(this, rootView); - mDataTableDataPresenter.attachView(this); - - setToolbarTitle(dataTable.getRegisteredTableName()); - swipeRefreshLayout.setColorSchemeColors(getActivity() - .getResources().getIntArray(R.array.swipeRefreshColors)); - swipeRefreshLayout.setOnRefreshListener(this); - - mDataTableDataPresenter.loadDataTableInfo(dataTable.getRegisteredTableName(), entityId); - - return rootView; - } - - @Override - public void onRefresh() { - linearLayout.setVisibility(View.GONE); - mDataTableDataPresenter.loadDataTableInfo(dataTable.getRegisteredTableName(), entityId); - } - - @Override - public void showDataTableOptions(final String table, final int entity, final int rowId) { - new MaterialDialog.Builder().init(getActivity()) - .setItems(R.array.datatable_options, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - switch (which) { - case 0: - mDataTableDataPresenter.deleteDataTableEntry(table, entity, rowId); - break; - default: - break; - } - } - }) - .createMaterialDialog() - .show(); - } - - @Override - public void showDataTableInfo(JsonArray jsonElements) { - if (jsonElements != null) { - linearLayout.setVisibility(View.VISIBLE); - llError.setVisibility(View.GONE); - linearLayout.removeAllViews(); - linearLayout.invalidate(); - DataTableUIBuilder.DataTableActionListener mListener = - (DataTableUIBuilder - .DataTableActionListener) getActivity() - .getSupportFragmentManager() - .findFragmentByTag(FragmentConstants.FRAG_DATA_TABLE); - linearLayout = new DataTableUIBuilder().getDataTableLayout(dataTable, - jsonElements, linearLayout, getActivity(), entityId, mListener); - } - } - - @Override - public void showDataTableDeletedSuccessfully() { - mDataTableDataPresenter.loadDataTableInfo(dataTable.getRegisteredTableName(), entityId); - } - - @Override - public void showEmptyDataTable() { - linearLayout.setVisibility(View.GONE); - llError.setVisibility(View.VISIBLE); - tvError.setText(R.string.empty_data_table); - Toaster.show(rootView, R.string.empty_data_table); - } - - @Override - public void showFetchingError(int message) { - showFetchingError(getString(message)); - } - - @Override - public void showFetchingError(String errorMessage) { - linearLayout.setVisibility(View.GONE); - llError.setVisibility(View.VISIBLE); - tvError.setText(errorMessage); - Toast.makeText(getActivity(), errorMessage, Toast.LENGTH_SHORT).show(); - } - - @Override - public void showProgressbar(boolean show) { - swipeRefreshLayout.setRefreshing(false); - if (show) { - linearLayout.setVisibility(View.GONE); - pbDataTable.setVisibility(View.VISIBLE); - } else { - linearLayout.setVisibility(View.VISIBLE); - pbDataTable.setVisibility(View.GONE); - } - } - - @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - inflater.inflate(R.menu.menu_add, menu); - super.onCreateOptionsMenu(menu, inflater); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - if (item.getItemId() == R.id.menu_add) { - DataTableRowDialogFragment dataTableRowDialogFragment = DataTableRowDialogFragment - .newInstance(dataTable, entityId); - dataTableRowDialogFragment.setTargetFragment(this, Constants.DIALOG_FRAGMENT); - FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager() - .beginTransaction(); - fragmentTransaction.addToBackStack(FragmentConstants.DFRAG_DATATABLE_ENTRY_FORM); - dataTableRowDialogFragment.show(fragmentTransaction, "Document Dialog Fragment"); - } - return super.onOptionsItemSelected(item); - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - switch (requestCode) { - case Constants.DIALOG_FRAGMENT: - if (resultCode == Activity.RESULT_OK) { - mDataTableDataPresenter - .loadDataTableInfo(dataTable.getRegisteredTableName(), entityId); - } - break; - } - } - - - @Override - public void onDestroyView() { - super.onDestroyView(); - mDataTableDataPresenter.detachView(); - } -} diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatabledata/DataTableDataFragment.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatabledata/DataTableDataFragment.kt new file mode 100755 index 00000000000..a82b34421b1 --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatabledata/DataTableDataFragment.kt @@ -0,0 +1,184 @@ +/* + * This project is licensed under the open source MPL V2. + * See https://github.com/openMF/android-client/blob/master/LICENSE.md + */ +package com.mifos.mifosxdroid.online.datatabledata + +import android.app.Activity +import android.content.Intent +import android.os.Bundle +import android.view.* +import android.widget.LinearLayout +import android.widget.ProgressBar +import android.widget.TextView +import android.widget.Toast +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener +import butterknife.BindView +import butterknife.ButterKnife +import com.google.gson.JsonArray +import com.mifos.mifosxdroid.R +import com.mifos.mifosxdroid.core.MaterialDialog +import com.mifos.mifosxdroid.core.MifosBaseActivity +import com.mifos.mifosxdroid.core.MifosBaseFragment +import com.mifos.mifosxdroid.core.util.Toaster +import com.mifos.mifosxdroid.dialogfragments.datatablerowdialog.DataTableRowDialogFragment +import com.mifos.objects.noncore.DataTable +import com.mifos.utils.Constants +import com.mifos.utils.DataTableUIBuilder +import com.mifos.utils.DataTableUIBuilder.DataTableActionListener +import com.mifos.utils.FragmentConstants +import javax.inject.Inject + +class DataTableDataFragment : MifosBaseFragment(), DataTableActionListener, DataTableDataMvpView, OnRefreshListener { + @JvmField + @BindView(R.id.linear_layout_datatables) + var linearLayout: LinearLayout? = null + + @JvmField + @BindView(R.id.swipe_container) + var swipeRefreshLayout: SwipeRefreshLayout? = null + + @JvmField + @BindView(R.id.progressbar_data_table) + var pbDataTable: ProgressBar? = null + + @JvmField + @BindView(R.id.ll_error) + var llError: LinearLayout? = null + + @JvmField + @BindView(R.id.tv_error) + var tvError: TextView? = null + + @JvmField + @Inject + var mDataTableDataPresenter: DataTableDataPresenter? = null + private var dataTable: DataTable? = null + private var entityId = 0 + private lateinit var rootView: View + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + (activity as MifosBaseActivity?)!!.activityComponent.inject(this) + setHasOptionsMenu(true) + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + // Inflate the layout for this fragment + rootView = inflater.inflate(R.layout.fragment_datatable, container, false) + ButterKnife.bind(this, rootView) + mDataTableDataPresenter!!.attachView(this) + setToolbarTitle(dataTable!!.registeredTableName) + swipeRefreshLayout!!.setColorSchemeColors(*activity + ?.getResources()!!.getIntArray(R.array.swipeRefreshColors)) + swipeRefreshLayout!!.setOnRefreshListener(this) + mDataTableDataPresenter!!.loadDataTableInfo(dataTable!!.registeredTableName, entityId) + return rootView + } + + override fun onRefresh() { + linearLayout!!.visibility = View.GONE + mDataTableDataPresenter!!.loadDataTableInfo(dataTable!!.registeredTableName, entityId) + } + + override fun showDataTableOptions(table: String, entity: Int, rowId: Int) { + MaterialDialog.Builder().init(activity) + .setItems(R.array.datatable_options) { dialog, which -> + when (which) { + 0 -> mDataTableDataPresenter!!.deleteDataTableEntry(table, entity, rowId) + else -> { + } + } + } + .createMaterialDialog() + .show() + } + + override fun showDataTableInfo(jsonElements: JsonArray?) { + if (jsonElements != null) { + linearLayout!!.visibility = View.VISIBLE + llError!!.visibility = View.GONE + linearLayout!!.removeAllViews() + linearLayout!!.invalidate() + val mListener = activity + ?.getSupportFragmentManager() + ?.findFragmentByTag(FragmentConstants.FRAG_DATA_TABLE) as DataTableActionListener? + linearLayout = DataTableUIBuilder().getDataTableLayout(dataTable, + jsonElements, linearLayout, activity, entityId, mListener) + } + } + + override fun showDataTableDeletedSuccessfully() { + mDataTableDataPresenter!!.loadDataTableInfo(dataTable!!.registeredTableName, entityId) + } + + override fun showEmptyDataTable() { + linearLayout!!.visibility = View.GONE + llError!!.visibility = View.VISIBLE + tvError!!.setText(R.string.empty_data_table) + Toaster.show(rootView, R.string.empty_data_table) + } + + override fun showFetchingError(message: Int) { + showFetchingError(getString(message)) + } + + override fun showFetchingError(errorMessage: String?) { + linearLayout!!.visibility = View.GONE + llError!!.visibility = View.VISIBLE + tvError!!.text = errorMessage + Toast.makeText(activity, errorMessage, Toast.LENGTH_SHORT).show() + } + + override fun showProgressbar(show: Boolean) { + swipeRefreshLayout!!.isRefreshing = false + if (show) { + linearLayout!!.visibility = View.GONE + pbDataTable!!.visibility = View.VISIBLE + } else { + linearLayout!!.visibility = View.VISIBLE + pbDataTable!!.visibility = View.GONE + } + } + + override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + inflater.inflate(R.menu.menu_add, menu) + super.onCreateOptionsMenu(menu, inflater) + } + + override fun onOptionsItemSelected(item: MenuItem): Boolean { + if (item.itemId == R.id.menu_add) { + val dataTableRowDialogFragment = DataTableRowDialogFragment + .newInstance(dataTable, entityId) + dataTableRowDialogFragment.setTargetFragment(this, Constants.DIALOG_FRAGMENT) + val fragmentTransaction = activity!!.supportFragmentManager + .beginTransaction() + fragmentTransaction.addToBackStack(FragmentConstants.DFRAG_DATATABLE_ENTRY_FORM) + dataTableRowDialogFragment.show(fragmentTransaction, "Document Dialog Fragment") + } + return super.onOptionsItemSelected(item) + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { + when (requestCode) { + Constants.DIALOG_FRAGMENT -> if (resultCode == Activity.RESULT_OK) { + mDataTableDataPresenter + ?.loadDataTableInfo(dataTable!!.registeredTableName, entityId) + } + } + } + + override fun onDestroyView() { + super.onDestroyView() + mDataTableDataPresenter!!.detachView() + } + + companion object { + fun newInstance(dataTable: DataTable?, entityId: Int): DataTableDataFragment { + val fragment = DataTableDataFragment() + fragment.dataTable = dataTable + fragment.entityId = entityId + return fragment + } + } +} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatabledata/DataTableDataMvpView.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatabledata/DataTableDataMvpView.java deleted file mode 100644 index 2083db2b2a8..00000000000 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatabledata/DataTableDataMvpView.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.mifos.mifosxdroid.online.datatabledata; - -import com.google.gson.JsonArray; -import com.mifos.mifosxdroid.base.MvpView; - -/** - * Created by Rajan Maurya on 7/6/16. - */ -public interface DataTableDataMvpView extends MvpView { - - void showDataTableInfo(JsonArray jsonElements); - - void showDataTableDeletedSuccessfully(); - - void showEmptyDataTable(); - - void showFetchingError(int message); - - void showFetchingError(String s); -} diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatabledata/DataTableDataMvpView.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatabledata/DataTableDataMvpView.kt new file mode 100644 index 00000000000..b51d85a614d --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatabledata/DataTableDataMvpView.kt @@ -0,0 +1,15 @@ +package com.mifos.mifosxdroid.online.datatabledata + +import com.google.gson.JsonArray +import com.mifos.mifosxdroid.base.MvpView + +/** + * Created by Rajan Maurya on 7/6/16. + */ +interface DataTableDataMvpView : MvpView { + fun showDataTableInfo(jsonElements: JsonArray?) + fun showDataTableDeletedSuccessfully() + fun showEmptyDataTable() + fun showFetchingError(message: Int) + fun showFetchingError(s: String?) +} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatabledata/DataTableDataPresenter.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatabledata/DataTableDataPresenter.java deleted file mode 100644 index 4f83bf0c1c8..00000000000 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatabledata/DataTableDataPresenter.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.mifos.mifosxdroid.online.datatabledata; - -import com.google.gson.JsonArray; -import com.mifos.api.GenericResponse; -import com.mifos.api.datamanager.DataManagerDataTable; -import com.mifos.mifosxdroid.R; -import com.mifos.mifosxdroid.base.BasePresenter; -import com.mifos.utils.MFErrorParser; - -import javax.inject.Inject; - -import rx.Subscriber; -import rx.android.schedulers.AndroidSchedulers; -import rx.schedulers.Schedulers; -import rx.subscriptions.CompositeSubscription; - -/** - * Created by Rajan Maurya on 7/6/16. - */ -public class DataTableDataPresenter extends BasePresenter { - - private final DataManagerDataTable dataManagerDataTable; - private CompositeSubscription subscriptions; - - @Inject - public DataTableDataPresenter(DataManagerDataTable dataManager) { - dataManagerDataTable = dataManager; - subscriptions = new CompositeSubscription(); - } - - @Override - public void attachView(DataTableDataMvpView mvpView) { - super.attachView(mvpView); - } - - @Override - public void detachView() { - super.detachView(); - subscriptions.unsubscribe(); - } - - public void loadDataTableInfo(String table, int entityId) { - checkViewAttached(); - getMvpView().showProgressbar(true); - subscriptions.add(dataManagerDataTable.getDataTableInfo(table, entityId) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(new Subscriber() { - @Override - public void onCompleted() { - getMvpView().showProgressbar(false); - } - - @Override - public void onError(Throwable e) { - getMvpView().showProgressbar(false); - getMvpView().showFetchingError(R.string.failed_to_fetch_datatable_info); - } - - @Override - public void onNext(JsonArray jsonElements) { - getMvpView().showProgressbar(false); - if (jsonElements.size() == 0) { - getMvpView().showEmptyDataTable(); - } else { - getMvpView().showDataTableInfo(jsonElements); - } - } - })); - } - - public void deleteDataTableEntry(String table, int entity, int rowId) { - checkViewAttached(); - getMvpView().showProgressbar(true); - subscriptions.add(dataManagerDataTable.deleteDataTableEntry(table, entity, rowId) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(new Subscriber() { - @Override - public void onCompleted() { - - } - - @Override - public void onError(Throwable e) { - getMvpView().showProgressbar(false); - getMvpView().showFetchingError(MFErrorParser.errorMessage(e)); - } - - @Override - public void onNext(GenericResponse genericResponse) { - getMvpView().showProgressbar(false); - getMvpView().showDataTableDeletedSuccessfully(); - } - }) - ); - } -} diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatabledata/DataTableDataPresenter.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatabledata/DataTableDataPresenter.kt new file mode 100644 index 00000000000..e6f406bcea1 --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatabledata/DataTableDataPresenter.kt @@ -0,0 +1,80 @@ +package com.mifos.mifosxdroid.online.datatabledata + +import com.google.gson.JsonArray +import com.mifos.api.GenericResponse +import com.mifos.api.datamanager.DataManagerDataTable +import com.mifos.mifosxdroid.R +import com.mifos.mifosxdroid.base.BasePresenter +import com.mifos.utils.MFErrorParser +import rx.Subscriber +import rx.android.schedulers.AndroidSchedulers +import rx.schedulers.Schedulers +import rx.subscriptions.CompositeSubscription +import javax.inject.Inject + +/** + * Created by Rajan Maurya on 7/6/16. + */ +class DataTableDataPresenter @Inject constructor(private val dataManagerDataTable: DataManagerDataTable) : BasePresenter() { + private val subscriptions: CompositeSubscription + override fun attachView(mvpView: DataTableDataMvpView?) { + super.attachView(mvpView) + } + + override fun detachView() { + super.detachView() + subscriptions.unsubscribe() + } + + fun loadDataTableInfo(table: String?, entityId: Int) { + checkViewAttached() + mvpView!!.showProgressbar(true) + subscriptions.add(dataManagerDataTable.getDataTableInfo(table, entityId) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeOn(Schedulers.io()) + .subscribe(object : Subscriber() { + override fun onCompleted() { + mvpView!!.showProgressbar(false) + } + + override fun onError(e: Throwable) { + mvpView!!.showProgressbar(false) + mvpView!!.showFetchingError(R.string.failed_to_fetch_datatable_info) + } + + override fun onNext(jsonElements: JsonArray?) { + mvpView!!.showProgressbar(false) + if (jsonElements!!.size() == 0) { + mvpView!!.showEmptyDataTable() + } else { + mvpView!!.showDataTableInfo(jsonElements) + } + } + })) + } + + fun deleteDataTableEntry(table: String?, entity: Int, rowId: Int) { + checkViewAttached() + mvpView!!.showProgressbar(true) + subscriptions.add(dataManagerDataTable.deleteDataTableEntry(table, entity, rowId) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeOn(Schedulers.io()) + .subscribe(object : Subscriber() { + override fun onCompleted() {} + override fun onError(e: Throwable) { + mvpView!!.showProgressbar(false) + mvpView!!.showFetchingError(MFErrorParser.errorMessage(e)) + } + + override fun onNext(genericResponse: GenericResponse?) { + mvpView!!.showProgressbar(false) + mvpView!!.showDataTableDeletedSuccessfully() + } + }) + ) + } + + init { + subscriptions = CompositeSubscription() + } +} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatablelistfragment/DataTableListFragment.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatablelistfragment/DataTableListFragment.java deleted file mode 100644 index 80f00119b5b..00000000000 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatablelistfragment/DataTableListFragment.java +++ /dev/null @@ -1,345 +0,0 @@ -/* - * This project is licensed under the open source MPL V2. - * See https://github.com/openMF/android-client/blob/master/LICENSE.md - */ - -package com.mifos.mifosxdroid.online.datatablelistfragment; - - -import android.content.Intent; -import android.graphics.Typeface; -import android.os.Bundle; -import androidx.fragment.app.Fragment; -import android.util.Log; -import android.util.TypedValue; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.view.WindowManager; -import android.widget.Button; -import android.widget.LinearLayout; -import android.widget.TextView; -import android.widget.Toast; - -import com.mifos.exceptions.RequiredFieldException; -import com.mifos.mifosxdroid.R; -import com.mifos.mifosxdroid.core.MifosBaseActivity; -import com.mifos.mifosxdroid.core.util.Toaster; -import com.mifos.mifosxdroid.formwidgets.FormEditText; -import com.mifos.mifosxdroid.formwidgets.FormNumericEditText; -import com.mifos.mifosxdroid.formwidgets.FormSpinner; -import com.mifos.mifosxdroid.formwidgets.FormToggleButton; -import com.mifos.mifosxdroid.formwidgets.FormWidget; -import com.mifos.mifosxdroid.online.ClientActivity; -import com.mifos.objects.client.Client; -import com.mifos.objects.client.ClientPayload; -import com.mifos.objects.noncore.ColumnHeader; -import com.mifos.objects.noncore.ColumnValue; -import com.mifos.objects.noncore.DataTable; -import com.mifos.objects.noncore.DataTablePayload; -import com.mifos.services.data.GroupLoanPayload; -import com.mifos.services.data.LoansPayload; -import com.mifos.utils.Constants; -import com.mifos.utils.MifosResponseHandler; -import com.mifos.utils.PrefManager; -import com.mifos.utils.SafeUIBlockingUtility; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -import javax.inject.Inject; - -import butterknife.BindView; -import butterknife.ButterKnife; - -/** - * A generic fragment to show the DataTables at the runtime. - * - * It receives the list of DataTables, the corresponding LoanPayload (client/center/group) - * and an identifier int that states the type of entity generating the request for datatables. - * - * It differs from the other DatatableDialogFragments in the sense that - - * 1. it does NOT query for the datatables i.e. it does not fetch the datatable from the endpoint. - * 2. it shows all the datatables (from datatable array) unlike in the other fragments which show - * a single datatable. - */ -public class DataTableListFragment extends Fragment - implements DataTableListMvpView { - - private final String LOG_TAG = getClass().getSimpleName(); - - @BindView(R.id.ll_data_table_entry_form) - LinearLayout linearLayout; - - @Inject - DataTableListPresenter mDataTableListPresenter; - - private List dataTables; - private ArrayList dataTablePayloadElements; - private LoansPayload clientLoansPayload; - private GroupLoanPayload groupLoanPayload; - private ClientPayload clientPayload; - private int requestType; - private View rootView; - private SafeUIBlockingUtility safeUIBlockingUtility; - private List> listFormWidgets = new ArrayList>(); - - public static DataTableListFragment newInstance(List dataTables, - Object payload, int type) { - DataTableListFragment dataTableListFragment = new DataTableListFragment(); - Bundle args = new Bundle(); - dataTableListFragment.dataTables = dataTables; - dataTableListFragment.requestType = type; - switch (type) { - case Constants.CLIENT_LOAN: - dataTableListFragment.clientLoansPayload = (LoansPayload) payload; - break; - case Constants.GROUP_LOAN: - dataTableListFragment.groupLoanPayload = (GroupLoanPayload) payload; - break; - case Constants.CREATE_CLIENT: - dataTableListFragment.clientPayload = (ClientPayload) payload; - break; - } - dataTableListFragment.setArguments(args); - return dataTableListFragment; - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - ((MifosBaseActivity) getActivity()).getActivityComponent().inject(this); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle - savedInstanceState) { - - getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams - .SOFT_INPUT_ADJUST_RESIZE); - - rootView = inflater.inflate(R.layout.dialog_fragment_add_entry_to_datatable, container, - false); - - ButterKnife.bind(this, rootView); - mDataTableListPresenter.attachView(this); - - getActivity().setTitle(getActivity().getResources().getString( - R.string.associated_datatables)); - - safeUIBlockingUtility = new SafeUIBlockingUtility(DataTableListFragment.this - .getActivity(), getString(R.string.create_client_loading_message)); - - for (DataTable datatable: dataTables) { - createForm(datatable); - } - addSaveButton(); - - return rootView; - } - - public void createForm(DataTable table) { - - TextView tableName = new TextView(getActivity().getApplicationContext()); - tableName.setText(table.getRegisteredTableName()); - tableName.setGravity(Gravity.CENTER_HORIZONTAL); - tableName.setTypeface(null, Typeface.BOLD); - tableName.setTextColor(getActivity().getResources().getColor(R.color.black)); - tableName.setTextSize(TypedValue.COMPLEX_UNIT_SP, - getActivity().getResources().getDimension(R.dimen.datatable_name_heading)); - linearLayout.addView(tableName); - - List formWidgets = new ArrayList(); - - for (ColumnHeader columnHeader : table.getColumnHeaderData()) { - - if (!columnHeader.getColumnPrimaryKey()) { - - if (columnHeader.getColumnDisplayType().equals(FormWidget.SCHEMA_KEY_STRING) || - columnHeader.getColumnDisplayType().equals(FormWidget.SCHEMA_KEY_TEXT)) { - - FormEditText formEditText = new FormEditText(getActivity(), columnHeader - .getColumnName()); - formWidgets.add(formEditText); - linearLayout.addView(formEditText.getView()); - - } else if (columnHeader.getColumnDisplayType().equals(FormWidget.SCHEMA_KEY_INT)) { - - FormNumericEditText formNumericEditText = new FormNumericEditText(getActivity - (), columnHeader.getColumnName()); - formNumericEditText.setReturnType(FormWidget.SCHEMA_KEY_INT); - formWidgets.add(formNumericEditText); - linearLayout.addView(formNumericEditText.getView()); - - - } else if (columnHeader.getColumnDisplayType().equals(FormWidget - .SCHEMA_KEY_DECIMAL)) { - - FormNumericEditText formNumericEditText = new FormNumericEditText(getActivity - (), columnHeader.getColumnName()); - formNumericEditText.setReturnType(FormWidget.SCHEMA_KEY_DECIMAL); - formWidgets.add(formNumericEditText); - linearLayout.addView(formNumericEditText.getView()); - - - } else if (columnHeader.getColumnDisplayType().equals(FormWidget - .SCHEMA_KEY_CODELOOKUP) || columnHeader.getColumnDisplayType().equals - (FormWidget.SCHEMA_KEY_CODEVALUE)) { - - if (columnHeader.getColumnValues().size() > 0) { - List columnValueStrings = new ArrayList(); - List columnValueIds = new ArrayList(); - - for (ColumnValue columnValue : columnHeader.getColumnValues()) { - columnValueStrings.add(columnValue.getValue()); - columnValueIds.add(columnValue.getId()); - } - - FormSpinner formSpinner = new FormSpinner(getActivity(), columnHeader - .getColumnName(), columnValueStrings, columnValueIds); - formSpinner.setReturnType(FormWidget.SCHEMA_KEY_CODEVALUE); - formWidgets.add(formSpinner); - linearLayout.addView(formSpinner.getView()); - } - - } else if (columnHeader.getColumnDisplayType().equals(FormWidget.SCHEMA_KEY_DATE)) { - - FormEditText formEditText = new FormEditText(getActivity(), columnHeader - .getColumnName()); - formEditText.setIsDateField(true, getActivity().getSupportFragmentManager()); - formWidgets.add(formEditText); - linearLayout.addView(formEditText.getView()); - } else if (columnHeader.getColumnDisplayType().equals(FormWidget.SCHEMA_KEY_BOOL)) { - - FormToggleButton formToggleButton = new FormToggleButton(getActivity(), - columnHeader.getColumnName()); - formWidgets.add(formToggleButton); - linearLayout.addView(formToggleButton.getView()); - } - } - } - listFormWidgets.add(formWidgets); - } - - private void addSaveButton() { - Button bt_processForm = new Button(getActivity()); - bt_processForm.setLayoutParams(FormWidget.defaultLayoutParams); - bt_processForm.setText(getString(R.string.save)); - bt_processForm.setBackgroundColor(getActivity().getResources().getColor(R.color.blue_dark)); - - linearLayout.addView(bt_processForm); - bt_processForm.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - try { - onSaveActionRequested(); - } catch (RequiredFieldException e) { - Log.d(LOG_TAG, e.getMessage()); - } - } - }); - } - - public void onSaveActionRequested() throws RequiredFieldException { - - dataTablePayloadElements = new ArrayList<>(); - for (int i = 0; i < dataTables.size(); i++) { - DataTablePayload dataTablePayload = new - DataTablePayload(); - dataTablePayload.setRegisteredTableName(dataTables.get(i).getRegisteredTableName()); - dataTablePayload.setData(addDataTableInput(i)); - dataTablePayloadElements.add(dataTablePayload); - } - - switch (requestType) { - case Constants.CLIENT_LOAN: - clientLoansPayload.setDataTables(dataTablePayloadElements); - mDataTableListPresenter.createLoansAccount(clientLoansPayload); - break; - - case Constants.GROUP_LOAN: - //Add Datatables in GroupLoan Payload and then add them here. - mDataTableListPresenter.createGroupLoanAccount(groupLoanPayload); - break; - - case Constants.CREATE_CLIENT: - clientPayload.setDatatables(dataTablePayloadElements); - mDataTableListPresenter.createClient(clientPayload); - break; - } - } - - HashMap addDataTableInput(int index) { - - List formWidgets = listFormWidgets.get(index); - HashMap payload = new HashMap(); - payload.put(Constants.DATE_FORMAT, "dd-mm-YYYY"); - payload.put(Constants.LOCALE, "en"); - for (FormWidget formWidget : formWidgets) { - - if (formWidget.getReturnType().equals(FormWidget.SCHEMA_KEY_INT)) { - payload.put(formWidget.getPropertyName(), Integer.parseInt(formWidget.getValue() - .equals("") ? "0" : formWidget.getValue())); - } else if (formWidget.getReturnType().equals(FormWidget.SCHEMA_KEY_DECIMAL)) { - payload.put(formWidget.getPropertyName(), Double.parseDouble(formWidget.getValue - ().equals("") ? "0.0" : formWidget.getValue())); - } else if (formWidget.getReturnType().equals(FormWidget.SCHEMA_KEY_CODEVALUE)) { - FormSpinner formSpinner = (FormSpinner) formWidget; - payload.put(formWidget.getPropertyName(), formSpinner.getIdOfSelectedItem - (formWidget.getValue())); - } else { - payload.put(formWidget.getPropertyName(), formWidget.getValue()); - } - } - return payload; - } - - - @Override - public void showMessage(int messageId) { - Toaster.show(rootView, getString(messageId)); - getActivity().getSupportFragmentManager().popBackStackImmediate(); - } - - @Override - public void showMessage(String message) { - Toaster.show(rootView, message); - getActivity().getSupportFragmentManager().popBackStackImmediate(); - } - - @Override - public void showClientCreatedSuccessfully(Client client) { - getActivity().getSupportFragmentManager().popBackStack(); - getActivity().getSupportFragmentManager().popBackStack(); - Toast.makeText(getActivity(), getString(R.string.client) + - MifosResponseHandler.getResponse(), Toast.LENGTH_SHORT).show(); - if (PrefManager.getUserStatus() == Constants.USER_ONLINE) { - Intent clientActivityIntent = new Intent(getActivity(), ClientActivity.class); - clientActivityIntent.putExtra(Constants.CLIENT_ID, client.getClientId()); - startActivity(clientActivityIntent); - } - } - - @Override - public void showWaitingForCheckerApproval(int message) { - getActivity().getSupportFragmentManager().popBackStack(); - Toaster.show(rootView, message, Toast.LENGTH_SHORT); - } - - @Override - public void showProgressbar(boolean b) { - if (b) { - safeUIBlockingUtility.safelyBlockUI(); - } else { - safeUIBlockingUtility.safelyUnBlockUI(); - } - } - - @Override - public void onDestroyView() { - super.onDestroyView(); - mDataTableListPresenter.detachView(); - } -} diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatablelistfragment/DataTableListFragment.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatablelistfragment/DataTableListFragment.kt new file mode 100644 index 00000000000..ec69b3a5021 --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatablelistfragment/DataTableListFragment.kt @@ -0,0 +1,266 @@ +/* + * This project is licensed under the open source MPL V2. + * See https://github.com/openMF/android-client/blob/master/LICENSE.md + */ +package com.mifos.mifosxdroid.online.datatablelistfragment + +import android.content.Intent +import android.graphics.Typeface +import android.os.Bundle +import android.util.Log +import android.util.TypedValue +import android.view.* +import android.widget.Button +import android.widget.LinearLayout +import android.widget.TextView +import android.widget.Toast +import androidx.fragment.app.Fragment +import butterknife.BindView +import butterknife.ButterKnife +import com.mifos.exceptions.RequiredFieldException +import com.mifos.mifosxdroid.R +import com.mifos.mifosxdroid.core.MifosBaseActivity +import com.mifos.mifosxdroid.core.util.Toaster +import com.mifos.mifosxdroid.formwidgets.* +import com.mifos.mifosxdroid.online.ClientActivity +import com.mifos.mifosxdroid.online.datatablelistfragment.DataTableListFragment +import com.mifos.objects.client.Client +import com.mifos.objects.client.ClientPayload +import com.mifos.objects.noncore.DataTable +import com.mifos.objects.noncore.DataTablePayload +import com.mifos.services.data.GroupLoanPayload +import com.mifos.services.data.LoansPayload +import com.mifos.utils.Constants +import com.mifos.utils.MifosResponseHandler +import com.mifos.utils.PrefManager +import com.mifos.utils.SafeUIBlockingUtility +import java.util.* +import javax.inject.Inject + +/** + * A generic fragment to show the DataTables at the runtime. + * + * It receives the list of DataTables, the corresponding LoanPayload (client/center/group) + * and an identifier int that states the type of entity generating the request for datatables. + * + * It differs from the other DatatableDialogFragments in the sense that - + * 1. it does NOT query for the datatables i.e. it does not fetch the datatable from the endpoint. + * 2. it shows all the datatables (from datatable array) unlike in the other fragments which show + * a single datatable. + */ +class DataTableListFragment : Fragment(), DataTableListMvpView { + private val LOG_TAG = javaClass.simpleName + + @JvmField + @BindView(R.id.ll_data_table_entry_form) + var linearLayout: LinearLayout? = null + + @JvmField + @Inject + var mDataTableListPresenter: DataTableListPresenter? = null + private var dataTables: List? = null + private var dataTablePayloadElements: ArrayList? = null + private var clientLoansPayload: LoansPayload? = null + private var groupLoanPayload: GroupLoanPayload? = null + private var clientPayload: ClientPayload? = null + private var requestType = 0 + private lateinit var rootView: View + private var safeUIBlockingUtility: SafeUIBlockingUtility? = null + private val listFormWidgets: MutableList> = ArrayList() + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + (activity as MifosBaseActivity?)!!.activityComponent.inject(this) + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + activity!!.window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) + rootView = inflater.inflate(R.layout.dialog_fragment_add_entry_to_datatable, container, + false) + ButterKnife.bind(this, rootView) + mDataTableListPresenter!!.attachView(this) + activity!!.title = activity!!.resources.getString( + R.string.associated_datatables) + safeUIBlockingUtility = SafeUIBlockingUtility(this@DataTableListFragment + .activity, getString(R.string.create_client_loading_message)) + for (datatable in dataTables!!) { + createForm(datatable) + } + addSaveButton() + return rootView + } + + fun createForm(table: DataTable) { + val tableName = TextView(activity!!.applicationContext) + tableName.text = table.registeredTableName + tableName.gravity = Gravity.CENTER_HORIZONTAL + tableName.setTypeface(null, Typeface.BOLD) + tableName.setTextColor(activity!!.resources.getColor(R.color.black)) + tableName.setTextSize(TypedValue.COMPLEX_UNIT_SP, + activity!!.resources.getDimension(R.dimen.datatable_name_heading)) + linearLayout!!.addView(tableName) + val formWidgets: MutableList = ArrayList() + for (columnHeader in table.columnHeaderData) { + if (!columnHeader.columnPrimaryKey) { + if (columnHeader.columnDisplayType == FormWidget.SCHEMA_KEY_STRING || columnHeader.columnDisplayType == FormWidget.SCHEMA_KEY_TEXT) { + val formEditText = FormEditText(activity, columnHeader + .columnName) + formWidgets.add(formEditText) + linearLayout!!.addView(formEditText.view) + } else if (columnHeader.columnDisplayType == FormWidget.SCHEMA_KEY_INT) { + val formNumericEditText = FormNumericEditText(activity, columnHeader.columnName) + formNumericEditText.returnType = FormWidget.SCHEMA_KEY_INT + formWidgets.add(formNumericEditText) + linearLayout!!.addView(formNumericEditText.view) + } else if (columnHeader.columnDisplayType == FormWidget.SCHEMA_KEY_DECIMAL) { + val formNumericEditText = FormNumericEditText(activity, columnHeader.columnName) + formNumericEditText.returnType = FormWidget.SCHEMA_KEY_DECIMAL + formWidgets.add(formNumericEditText) + linearLayout!!.addView(formNumericEditText.view) + } else if (columnHeader.columnDisplayType == FormWidget.SCHEMA_KEY_CODELOOKUP || columnHeader.columnDisplayType == FormWidget.SCHEMA_KEY_CODEVALUE) { + if (columnHeader.columnValues.size > 0) { + val columnValueStrings: MutableList = ArrayList() + val columnValueIds: MutableList = ArrayList() + for (columnValue in columnHeader.columnValues) { + columnValueStrings.add(columnValue.value) + columnValueIds.add(columnValue.id) + } + val formSpinner = FormSpinner(activity, columnHeader + .columnName, columnValueStrings, columnValueIds) + formSpinner.returnType = FormWidget.SCHEMA_KEY_CODEVALUE + formWidgets.add(formSpinner) + linearLayout!!.addView(formSpinner.view) + } + } else if (columnHeader.columnDisplayType == FormWidget.SCHEMA_KEY_DATE) { + val formEditText = FormEditText(activity, columnHeader + .columnName) + formEditText.setIsDateField(true, activity!!.supportFragmentManager) + formWidgets.add(formEditText) + linearLayout!!.addView(formEditText.view) + } else if (columnHeader.columnDisplayType == FormWidget.SCHEMA_KEY_BOOL) { + val formToggleButton = FormToggleButton(activity, + columnHeader.columnName) + formWidgets.add(formToggleButton) + linearLayout!!.addView(formToggleButton.view) + } + } + } + listFormWidgets.add(formWidgets) + } + + private fun addSaveButton() { + val bt_processForm = Button(activity) + bt_processForm.layoutParams = FormWidget.defaultLayoutParams + bt_processForm.text = getString(R.string.save) + bt_processForm.setBackgroundColor(activity!!.resources.getColor(R.color.blue_dark)) + linearLayout!!.addView(bt_processForm) + bt_processForm.setOnClickListener { + try { + onSaveActionRequested() + } catch (e: RequiredFieldException) { + Log.d(LOG_TAG, e.message) + } + } + } + + @Throws(RequiredFieldException::class) + fun onSaveActionRequested() { + dataTablePayloadElements = ArrayList() + for (i in dataTables!!.indices) { + val dataTablePayload = DataTablePayload() + dataTablePayload.registeredTableName = dataTables!![i].registeredTableName + dataTablePayload.data = addDataTableInput(i) + dataTablePayloadElements!!.add(dataTablePayload) + } + when (requestType) { + Constants.CLIENT_LOAN -> { + clientLoansPayload!!.dataTables = dataTablePayloadElements + mDataTableListPresenter!!.createLoansAccount(clientLoansPayload) + } + Constants.GROUP_LOAN -> //Add Datatables in GroupLoan Payload and then add them here. + mDataTableListPresenter!!.createGroupLoanAccount(groupLoanPayload) + Constants.CREATE_CLIENT -> { + clientPayload!!.datatables = dataTablePayloadElements + mDataTableListPresenter!!.createClient(clientPayload) + } + } + } + + fun addDataTableInput(index: Int): HashMap { + val formWidgets = listFormWidgets[index] + val payload = HashMap() + payload[Constants.DATE_FORMAT] = "dd-mm-YYYY" + payload[Constants.LOCALE] = "en" + for (formWidget in formWidgets) { + if (formWidget.returnType == FormWidget.SCHEMA_KEY_INT) { + payload[formWidget.propertyName] = if (formWidget.value + == "") "0" else formWidget.value.toInt() + } else if (formWidget.returnType == FormWidget.SCHEMA_KEY_DECIMAL) { + payload[formWidget.propertyName] = if (formWidget.value == "") "0.0" else formWidget.value.toDouble() + } else if (formWidget.returnType == FormWidget.SCHEMA_KEY_CODEVALUE) { + val formSpinner = formWidget as FormSpinner + payload[formWidget.getPropertyName()] = formSpinner.getIdOfSelectedItem(formWidget.getValue()) + } else { + payload[formWidget.propertyName] = formWidget.value + } + } + return payload + } + + override fun showMessage(messageId: Int) { + Toaster.show(rootView, getString(messageId)) + activity!!.supportFragmentManager.popBackStackImmediate() + } + + override fun showMessage(message: String?) { + Toaster.show(rootView, message) + activity!!.supportFragmentManager.popBackStackImmediate() + } + + override fun showClientCreatedSuccessfully(client: Client) { + activity!!.supportFragmentManager.popBackStack() + activity!!.supportFragmentManager.popBackStack() + Toast.makeText(activity, getString(R.string.client) + + MifosResponseHandler.getResponse(), Toast.LENGTH_SHORT).show() + if (PrefManager.getUserStatus() == Constants.USER_ONLINE) { + val clientActivityIntent = Intent(activity, ClientActivity::class.java) + clientActivityIntent.putExtra(Constants.CLIENT_ID, client.clientId) + startActivity(clientActivityIntent) + } + } + + override fun showWaitingForCheckerApproval(message: Int) { + activity!!.supportFragmentManager.popBackStack() + Toaster.show(rootView, message, Toast.LENGTH_SHORT) + } + + override fun showProgressbar(b: Boolean) { + if (b) { + safeUIBlockingUtility!!.safelyBlockUI() + } else { + safeUIBlockingUtility!!.safelyUnBlockUI() + } + } + + override fun onDestroyView() { + super.onDestroyView() + mDataTableListPresenter!!.detachView() + } + + companion object { + @JvmStatic + fun newInstance(dataTables: List?, + payload: Any?, type: Int): DataTableListFragment { + val dataTableListFragment = DataTableListFragment() + val args = Bundle() + dataTableListFragment.dataTables = dataTables + dataTableListFragment.requestType = type + when (type) { + Constants.CLIENT_LOAN -> dataTableListFragment.clientLoansPayload = payload as LoansPayload? + Constants.GROUP_LOAN -> dataTableListFragment.groupLoanPayload = payload as GroupLoanPayload? + Constants.CREATE_CLIENT -> dataTableListFragment.clientPayload = payload as ClientPayload? + } + dataTableListFragment.arguments = args + return dataTableListFragment + } + } +} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatablelistfragment/DataTableListMvpView.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatablelistfragment/DataTableListMvpView.java deleted file mode 100644 index 00552599b8f..00000000000 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatablelistfragment/DataTableListMvpView.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.mifos.mifosxdroid.online.datatablelistfragment; - -import com.mifos.mifosxdroid.base.MvpView; -import com.mifos.objects.client.Client; - -public interface DataTableListMvpView extends MvpView { - - void showMessage(int messageId); - - void showMessage(String message); - - void showClientCreatedSuccessfully(Client client); - - void showWaitingForCheckerApproval(int message); -} diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatablelistfragment/DataTableListMvpView.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatablelistfragment/DataTableListMvpView.kt new file mode 100644 index 00000000000..5e0048b459a --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatablelistfragment/DataTableListMvpView.kt @@ -0,0 +1,11 @@ +package com.mifos.mifosxdroid.online.datatablelistfragment + +import com.mifos.mifosxdroid.base.MvpView +import com.mifos.objects.client.Client + +interface DataTableListMvpView : MvpView { + fun showMessage(messageId: Int) + fun showMessage(message: String?) + fun showClientCreatedSuccessfully(client: Client) + fun showWaitingForCheckerApproval(message: Int) +} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatablelistfragment/DataTableListPresenter.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatablelistfragment/DataTableListPresenter.java deleted file mode 100644 index 6b3fd7c6e94..00000000000 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatablelistfragment/DataTableListPresenter.java +++ /dev/null @@ -1,135 +0,0 @@ -package com.mifos.mifosxdroid.online.datatablelistfragment; - -import com.mifos.api.DataManager; -import com.mifos.api.datamanager.DataManagerClient; -import com.mifos.api.datamanager.DataManagerLoan; -import com.mifos.mifosxdroid.R; -import com.mifos.mifosxdroid.base.BasePresenter; -import com.mifos.objects.accounts.loan.Loans; -import com.mifos.objects.client.Client; -import com.mifos.objects.client.ClientPayload; -import com.mifos.services.data.GroupLoanPayload; -import com.mifos.services.data.LoansPayload; -import com.mifos.utils.MFErrorParser; - -import javax.inject.Inject; - -import rx.Subscriber; -import rx.android.schedulers.AndroidSchedulers; -import rx.schedulers.Schedulers; -import rx.subscriptions.CompositeSubscription; - -public class DataTableListPresenter extends BasePresenter { - - private final DataManagerLoan mDataManagerLoan; - private final DataManager mDataManager; - private final DataManagerClient dataManagerClient; - private CompositeSubscription mSubscription; - - @Inject - public DataTableListPresenter(DataManagerLoan dataManager, DataManager manager, - DataManagerClient dataManagerClient) { - mDataManagerLoan = dataManager; - mDataManager = manager; - this.dataManagerClient = dataManagerClient; - mSubscription = new CompositeSubscription(); - } - - @Override - public void attachView(DataTableListMvpView mvpView) { - super.attachView(mvpView); - } - - @Override - public void detachView() { - super.detachView(); - if (mSubscription != null) mSubscription.unsubscribe(); - } - - public void createLoansAccount(LoansPayload loansPayload) { - checkViewAttached(); - getMvpView().showProgressbar(true); - mSubscription.add(mDataManagerLoan.createLoansAccount(loansPayload) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(new Subscriber() { - @Override - public void onCompleted() { - getMvpView().showProgressbar(false); - } - - @Override - public void onError(Throwable e) { - getMvpView().showProgressbar(false); - getMvpView().showMessage(R.string.generic_failure_message); - } - - @Override - public void onNext(Loans loans) { - getMvpView().showProgressbar(false); - getMvpView().showMessage(R.string.loan_creation_success); - - } - })); - } - - public void createGroupLoanAccount(GroupLoanPayload loansPayload) { - checkViewAttached(); - getMvpView().showProgressbar(true); - mSubscription.add(mDataManager.createGroupLoansAccount(loansPayload) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(new Subscriber() { - @Override - public void onCompleted() { - getMvpView().showProgressbar(false); - } - - @Override - public void onError(Throwable e) { - getMvpView().showProgressbar(false); - getMvpView().showMessage(R.string.generic_failure_message); - } - - @Override - public void onNext(Loans loans) { - getMvpView().showProgressbar(false); - getMvpView().showMessage(R.string.loan_creation_success); - } - }) - ); - } - - public void createClient(ClientPayload clientPayload) { - checkViewAttached(); - getMvpView().showProgressbar(true); - mSubscription.add(dataManagerClient.createClient(clientPayload) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(new Subscriber() { - @Override - public void onCompleted() { - getMvpView().showProgressbar(false); - } - - @Override - public void onError(Throwable e) { - getMvpView().showProgressbar(false); - getMvpView().showMessage(MFErrorParser.errorMessage(e)); - } - - @Override - public void onNext(Client client) { - getMvpView().showProgressbar(false); - if (client.getClientId() != null) { - getMvpView().showClientCreatedSuccessfully( - client); - } else { - getMvpView().showWaitingForCheckerApproval( - R.string.waiting_for_checker_approval); - } - } - })); - } - -} diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatablelistfragment/DataTableListPresenter.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatablelistfragment/DataTableListPresenter.kt new file mode 100644 index 00000000000..695758fd861 --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/datatablelistfragment/DataTableListPresenter.kt @@ -0,0 +1,113 @@ +package com.mifos.mifosxdroid.online.datatablelistfragment + +import com.mifos.api.DataManager +import com.mifos.api.datamanager.DataManagerClient +import com.mifos.api.datamanager.DataManagerLoan +import com.mifos.mifosxdroid.R +import com.mifos.mifosxdroid.base.BasePresenter +import com.mifos.objects.accounts.loan.Loans +import com.mifos.objects.client.Client +import com.mifos.objects.client.ClientPayload +import com.mifos.services.data.GroupLoanPayload +import com.mifos.services.data.LoansPayload +import com.mifos.utils.MFErrorParser +import rx.Subscriber +import rx.android.schedulers.AndroidSchedulers +import rx.schedulers.Schedulers +import rx.subscriptions.CompositeSubscription +import javax.inject.Inject + +class DataTableListPresenter @Inject constructor(private val mDataManagerLoan: DataManagerLoan, private val mDataManager: DataManager, + private val dataManagerClient: DataManagerClient) : BasePresenter() { + private val mSubscription: CompositeSubscription? + override fun attachView(mvpView: DataTableListMvpView?) { + super.attachView(mvpView) + } + + override fun detachView() { + super.detachView() + mSubscription?.unsubscribe() + } + + fun createLoansAccount(loansPayload: LoansPayload?) { + checkViewAttached() + mvpView!!.showProgressbar(true) + mSubscription!!.add(mDataManagerLoan.createLoansAccount(loansPayload) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeOn(Schedulers.io()) + .subscribe(object : Subscriber() { + override fun onCompleted() { + mvpView!!.showProgressbar(false) + } + + override fun onError(e: Throwable) { + mvpView!!.showProgressbar(false) + mvpView!!.showMessage(R.string.generic_failure_message) + } + + override fun onNext(loans: Loans?) { + mvpView!!.showProgressbar(false) + mvpView!!.showMessage(R.string.loan_creation_success) + } + })) + } + + fun createGroupLoanAccount(loansPayload: GroupLoanPayload?) { + checkViewAttached() + mvpView!!.showProgressbar(true) + mSubscription!!.add(mDataManager.createGroupLoansAccount(loansPayload) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeOn(Schedulers.io()) + .subscribe(object : Subscriber() { + override fun onCompleted() { + mvpView!!.showProgressbar(false) + } + + override fun onError(e: Throwable) { + mvpView!!.showProgressbar(false) + mvpView!!.showMessage(R.string.generic_failure_message) + } + + override fun onNext(loans: Loans?) { + mvpView!!.showProgressbar(false) + mvpView!!.showMessage(R.string.loan_creation_success) + } + }) + ) + } + + fun createClient(clientPayload: ClientPayload?) { + checkViewAttached() + mvpView!!.showProgressbar(true) + mSubscription!!.add(dataManagerClient.createClient(clientPayload) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeOn(Schedulers.io()) + .subscribe(object : Subscriber() { + override fun onCompleted() { + mvpView!!.showProgressbar(false) + } + + override fun onError(e: Throwable) { + mvpView!!.showProgressbar(false) + mvpView!!.showMessage(MFErrorParser.errorMessage(e)) + } + + override fun onNext(client: Client?) { + mvpView!!.showProgressbar(false) + if (client != null) { + if (client.clientId != null) { + mvpView!!.showClientCreatedSuccessfully( + client) + } else { + mvpView!!.showWaitingForCheckerApproval( + R.string.waiting_for_checker_approval) + } + } + } + })) + } + + init { + mSubscription = CompositeSubscription() + } +} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/documentlist/DocumentListFragment.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/documentlist/DocumentListFragment.java deleted file mode 100755 index 065c318aedd..00000000000 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/documentlist/DocumentListFragment.java +++ /dev/null @@ -1,366 +0,0 @@ -/* - * This project is licensed under the open source MPL V2. - * See https://github.com/openMF/android-client/blob/master/LICENSE.md - */ - -package com.mifos.mifosxdroid.online.documentlist; - -import android.Manifest; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.net.Uri; -import android.os.Bundle; -import android.os.Environment; -import androidx.annotation.NonNull; -import androidx.fragment.app.FragmentTransaction; -import androidx.core.content.ContextCompat; -import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; - -import com.mifos.mifosxdroid.R; -import com.mifos.mifosxdroid.adapters.DocumentListAdapter; -import com.mifos.mifosxdroid.core.MaterialDialog; -import com.mifos.mifosxdroid.core.MifosBaseActivity; -import com.mifos.mifosxdroid.core.MifosBaseFragment; -import com.mifos.mifosxdroid.core.RecyclerItemClickListener; -import com.mifos.mifosxdroid.core.util.Toaster; -import com.mifos.mifosxdroid.dialogfragments.documentdialog.DocumentDialogFragment; -import com.mifos.objects.noncore.Document; -import com.mifos.utils.CheckSelfPermissionAndRequest; -import com.mifos.utils.Constants; -import com.mifos.utils.FileUtils; -import com.mifos.utils.FragmentConstants; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import javax.inject.Inject; - -import butterknife.BindView; -import butterknife.ButterKnife; -import butterknife.OnClick; -import okhttp3.ResponseBody; - -public class DocumentListFragment extends MifosBaseFragment implements DocumentListMvpView, - RecyclerItemClickListener.OnItemClickListener, SwipeRefreshLayout.OnRefreshListener { - - public static final int MENU_ITEM_ADD_NEW_DOCUMENT = 1000; - - public static final String LOG_TAG = DocumentListFragment.class.getSimpleName(); - - @BindView(R.id.rv_documents) - RecyclerView rv_documents; - - @BindView(R.id.swipe_container) - SwipeRefreshLayout swipeRefreshLayout; - - @BindView(R.id.noDocumentText) - TextView mNoChargesText; - - @BindView(R.id.noDocumentIcon) - ImageView mNoChargesIcon; - - @BindView(R.id.ll_error) - LinearLayout ll_error; - - @Inject - DocumentListPresenter mDocumentListPresenter; - - @Inject - DocumentListAdapter mDocumentListAdapter; - - private View rootView; - private String entityType; - private int entityId; - private Document document; - private ResponseBody documentBody; - private List mDocumentList; - - public static DocumentListFragment newInstance(String entityType, int entiyId) { - DocumentListFragment fragment = new DocumentListFragment(); - Bundle args = new Bundle(); - args.putString(Constants.ENTITY_TYPE, entityType); - args.putInt(Constants.ENTITY_ID, entiyId); - fragment.setArguments(args); - return fragment; - } - - @Override - public void onItemClick(View childView, int position) { - document = mDocumentList.get(position); - showDocumentActions(mDocumentList.get(position).getId()); - } - - @Override - public void onItemLongPress(View childView, int position) { - - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - ((MifosBaseActivity) getActivity()).getActivityComponent().inject(this); - mDocumentList = new ArrayList<>(); - if (getArguments() != null) { - entityType = getArguments().getString(Constants.ENTITY_TYPE); - entityId = getArguments().getInt(Constants.ENTITY_ID); - } - setHasOptionsMenu(true); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle - savedInstanceState) { - // Inflate the layout for this fragment - rootView = inflater.inflate(R.layout.fragment_document_list, container, false); - - ButterKnife.bind(this, rootView); - mDocumentListPresenter.attachView(this); - - setToolbarTitle(getString(R.string.documents)); - LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()); - layoutManager.setOrientation(LinearLayoutManager.VERTICAL); - rv_documents.setLayoutManager(layoutManager); - rv_documents.addOnItemTouchListener(new RecyclerItemClickListener(getActivity(), this)); - rv_documents.setHasFixedSize(true); - rv_documents.setAdapter(mDocumentListAdapter); - swipeRefreshLayout.setColorSchemeColors(getActivity() - .getResources().getIntArray(R.array.swipeRefreshColors)); - swipeRefreshLayout.setOnRefreshListener(this); - - mDocumentListPresenter.loadDocumentList(entityType, entityId); - - return rootView; - } - - @Override - public void onRefresh() { - mDocumentListPresenter.loadDocumentList(entityType, entityId); - } - - @Override - public void onResume() { - super.onResume(); - mDocumentListPresenter.loadDocumentList(entityType, entityId); - } - - @OnClick(R.id.noDocumentIcon) - public void reloadOnError() { - ll_error.setVisibility(View.GONE); - mDocumentListPresenter.loadDocumentList(entityType, entityId); - } - - /** - * This Method Checking the Permission WRITE_EXTERNAL_STORAGE is granted or not. - * If not then prompt user a dialog to grant the WRITE_EXTERNAL_STORAGE permission. - * and If Permission is granted already then Save the documentBody in external storage; - */ - @Override - public void checkPermissionAndRequest() { - if (CheckSelfPermissionAndRequest.checkSelfPermission(getActivity(), - Manifest.permission.WRITE_EXTERNAL_STORAGE)) { - checkExternalStorageAndCreateDocument(); - } else { - requestPermission(); - } - } - - @Override - public void requestPermission() { - CheckSelfPermissionAndRequest.requestPermission( - (MifosBaseActivity) getActivity(), - Manifest.permission.WRITE_EXTERNAL_STORAGE, - Constants.PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE, - getResources().getString( - R.string.dialog_message_write_external_storage_permission_denied), - getResources().getString(R.string.dialog_message_permission_never_ask_again_write), - Constants.WRITE_EXTERNAL_STORAGE_STATUS); - } - - /** - * This Method getting the Response after User Grant or denied the Permission - * - * @param requestCode Request Code - * @param permissions Permission - * @param grantResults GrantResults - */ - @Override - public void onRequestPermissionsResult(int requestCode, - @NonNull String[] permissions, - @NonNull int[] grantResults) { - switch (requestCode) { - case Constants.PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE: { - // If request is cancelled, the result arrays are empty. - if (grantResults.length > 0 - && grantResults[0] == PackageManager.PERMISSION_GRANTED) { - - // permission was granted, yay! Do the - checkExternalStorageAndCreateDocument(); - - } else { - - // permission denied, boo! Disable the - Toaster.show(rootView, getResources() - .getString(R.string.permission_denied_to_write_external_document)); - } - } - } - } - - - @Override - public void showDocumentList(final List documents) { - mDocumentList = documents; - mDocumentListAdapter.setDocuments(mDocumentList); - mDocumentListAdapter.notifyDataSetChanged(); - - if (documents.isEmpty()) { - showEmptyDocuments(); - } else { - if (ll_error.getVisibility() == View.VISIBLE) { - ll_error.setVisibility(View.GONE); - } - } - } - - @Override - public void showDocumentFetchSuccessfully(ResponseBody responseBody) { - documentBody = responseBody; - checkPermissionAndRequest(); - } - - @Override - public void showDocumentActions(final int documentId) { - new MaterialDialog.Builder().init(getActivity()) - .setItems(R.array.document_options, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - switch (which) { - case 0: - mDocumentListPresenter.downloadDocument(entityType, entityId, - documentId); - break; - case 1: - showDocumentDialog(getString(R.string.update_document)); - break; - case 2: - mDocumentListPresenter.removeDocument(entityType, entityId, - documentId); - break; - default: - break; - } - } - }) - .createMaterialDialog() - .show(); - } - - @Override - public void checkExternalStorageAndCreateDocument() { - // Create a path where we will place our documents in the user's - // public directory and check if the file exists. - File mifosDirectory = new File(Environment.getExternalStorageDirectory(), - getResources().getString(R.string.document_directory)); - if (!mifosDirectory.exists()) { - mifosDirectory.mkdirs(); - } - - File documentFile = new File(mifosDirectory.getPath(), document.getFileName()); - FileUtils.writeInputStreamDataToFile(documentBody.byteStream(), documentFile); - - //Opening the Saved Document - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setDataAndType(Uri.fromFile(documentFile), - FileUtils.getMimeType(mifosDirectory.getPath() + - getResources().getString(R.string.slash) + document.getFileName())); - startActivity(intent); - } - - @Override - public void showDocumentRemovedSuccessfully() { - Toaster.show(rootView, getResources().getString(R.string.document_remove_successfully)); - mDocumentListPresenter.loadDocumentList(entityType, entityId); - } - - @Override - public void showDocumentDialog(String documentAction) { - DocumentDialogFragment documentDialogFragment = - DocumentDialogFragment.newInstance(entityType, entityId, documentAction, document); - FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager() - .beginTransaction(); - fragmentTransaction.addToBackStack(FragmentConstants.FRAG_DOCUMENT_LIST); - documentDialogFragment.show(fragmentTransaction, "Document Dialog Fragment"); - } - - @Override - public void showEmptyDocuments() { - ll_error.setVisibility(View.VISIBLE); - mNoChargesText.setText(getResources().getString(R.string.no_document_to_show)); - mNoChargesIcon.setImageResource(R.drawable.ic_assignment_turned_in_black_24dp); - } - - @Override - public void showFetchingError(int message) { - if (mDocumentListAdapter.getItemCount() == 0) { - ll_error.setVisibility(View.VISIBLE); - String errorMessage = getStringMessage(message) + getStringMessage(R.string.new_line) + - getStringMessage(R.string.click_to_refresh); - mNoChargesText.setText(errorMessage); - } else { - Toaster.show(rootView, getStringMessage(message)); - } - - } - - @Override - public void showProgressbar(boolean show) { - swipeRefreshLayout.setRefreshing(show); - if (show && mDocumentListAdapter.getItemCount() == 0) { - showMifosProgressBar(); - swipeRefreshLayout.setRefreshing(false); - } else { - hideMifosProgressBar(); - } - } - - @Override - public void onDestroyView() { - super.onDestroyView(); - mDocumentListPresenter.detachView(); - hideMifosProgressBar(); - } - - @Override - public void onPrepareOptionsMenu(Menu menu) { - menu.clear(); - MenuItem menuItemAddNewDocument = menu.add(Menu.NONE, MENU_ITEM_ADD_NEW_DOCUMENT, Menu - .NONE, getString(R.string.add_new)); - menuItemAddNewDocument - .setIcon(ContextCompat - .getDrawable(getActivity(), R.drawable.ic_add_white_24dp)); - - menuItemAddNewDocument.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); - super.onPrepareOptionsMenu(menu); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - int id = item.getItemId(); - if (id == MENU_ITEM_ADD_NEW_DOCUMENT) { - showDocumentDialog(getString(R.string.upload_document)); - } - return super.onOptionsItemSelected(item); - } -} diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/documentlist/DocumentListFragment.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/documentlist/DocumentListFragment.kt new file mode 100755 index 00000000000..89af49e1fae --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/documentlist/DocumentListFragment.kt @@ -0,0 +1,312 @@ +/* + * This project is licensed under the open source MPL V2. + * See https://github.com/openMF/android-client/blob/master/LICENSE.md + */ +package com.mifos.mifosxdroid.online.documentlist + +import android.Manifest +import android.content.Intent +import android.content.pm.PackageManager +import android.net.Uri +import android.os.Bundle +import android.os.Environment +import android.view.* +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView +import androidx.core.content.ContextCompat +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener +import butterknife.BindView +import butterknife.ButterKnife +import butterknife.OnClick +import com.mifos.mifosxdroid.R +import com.mifos.mifosxdroid.adapters.DocumentListAdapter +import com.mifos.mifosxdroid.core.MaterialDialog +import com.mifos.mifosxdroid.core.MifosBaseActivity +import com.mifos.mifosxdroid.core.MifosBaseFragment +import com.mifos.mifosxdroid.core.RecyclerItemClickListener +import com.mifos.mifosxdroid.core.util.Toaster +import com.mifos.mifosxdroid.dialogfragments.documentdialog.DocumentDialogFragment +import com.mifos.objects.noncore.Document +import com.mifos.utils.CheckSelfPermissionAndRequest +import com.mifos.utils.Constants +import com.mifos.utils.FileUtils +import com.mifos.utils.FragmentConstants +import okhttp3.ResponseBody +import java.io.File +import java.util.* +import javax.inject.Inject + +class DocumentListFragment : MifosBaseFragment(), DocumentListMvpView, RecyclerItemClickListener.OnItemClickListener, OnRefreshListener { + @JvmField + @BindView(R.id.rv_documents) + var rv_documents: RecyclerView? = null + + @JvmField + @BindView(R.id.swipe_container) + var swipeRefreshLayout: SwipeRefreshLayout? = null + + @JvmField + @BindView(R.id.noDocumentText) + var mNoChargesText: TextView? = null + + @JvmField + @BindView(R.id.noDocumentIcon) + var mNoChargesIcon: ImageView? = null + + @JvmField + @BindView(R.id.ll_error) + var ll_error: LinearLayout? = null + + @JvmField + @Inject + var mDocumentListPresenter: DocumentListPresenter? = null + + @JvmField + @Inject + var mDocumentListAdapter: DocumentListAdapter? = null + private lateinit var rootView: View + private var entityType: String? = null + private var entityId = 0 + private var document: Document? = null + private var documentBody: ResponseBody? = null + private var mDocumentList: List? = null + override fun onItemClick(childView: View, position: Int) { + document = mDocumentList!![position] + showDocumentActions(mDocumentList!![position].id) + } + + override fun onItemLongPress(childView: View, position: Int) {} + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + (activity as MifosBaseActivity?)!!.activityComponent.inject(this) + mDocumentList = ArrayList() + if (arguments != null) { + entityType = arguments!!.getString(Constants.ENTITY_TYPE) + entityId = arguments!!.getInt(Constants.ENTITY_ID) + } + setHasOptionsMenu(true) + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + // Inflate the layout for this fragment + rootView = inflater.inflate(R.layout.fragment_document_list, container, false) + ButterKnife.bind(this, rootView) + mDocumentListPresenter!!.attachView(this) + setToolbarTitle(getString(R.string.documents)) + val layoutManager = LinearLayoutManager(activity) + layoutManager.orientation = LinearLayoutManager.VERTICAL + rv_documents!!.layoutManager = layoutManager + rv_documents!!.addOnItemTouchListener(RecyclerItemClickListener(activity, this)) + rv_documents!!.setHasFixedSize(true) + rv_documents!!.adapter = mDocumentListAdapter + swipeRefreshLayout!!.setColorSchemeColors(*activity + ?.getResources()!!.getIntArray(R.array.swipeRefreshColors)) + swipeRefreshLayout!!.setOnRefreshListener(this) + mDocumentListPresenter!!.loadDocumentList(entityType, entityId) + return rootView + } + + override fun onRefresh() { + mDocumentListPresenter!!.loadDocumentList(entityType, entityId) + } + + override fun onResume() { + super.onResume() + mDocumentListPresenter!!.loadDocumentList(entityType, entityId) + } + + @OnClick(R.id.noDocumentIcon) + fun reloadOnError() { + ll_error!!.visibility = View.GONE + mDocumentListPresenter!!.loadDocumentList(entityType, entityId) + } + + /** + * This Method Checking the Permission WRITE_EXTERNAL_STORAGE is granted or not. + * If not then prompt user a dialog to grant the WRITE_EXTERNAL_STORAGE permission. + * and If Permission is granted already then Save the documentBody in external storage; + */ + override fun checkPermissionAndRequest() { + if (CheckSelfPermissionAndRequest.checkSelfPermission(activity, + Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + checkExternalStorageAndCreateDocument() + } else { + requestPermission() + } + } + + override fun requestPermission() { + CheckSelfPermissionAndRequest.requestPermission( + activity as MifosBaseActivity?, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Constants.PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE, + resources.getString( + R.string.dialog_message_write_external_storage_permission_denied), + resources.getString(R.string.dialog_message_permission_never_ask_again_write), + Constants.WRITE_EXTERNAL_STORAGE_STATUS) + } + + /** + * This Method getting the Response after User Grant or denied the Permission + * + * @param requestCode Request Code + * @param permissions Permission + * @param grantResults GrantResults + */ + override fun onRequestPermissionsResult(requestCode: Int, + permissions: Array, + grantResults: IntArray) { + when (requestCode) { + Constants.PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE -> { + + // If request is cancelled, the result arrays are empty. + if (grantResults.size > 0 + && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + + // permission was granted, yay! Do the + checkExternalStorageAndCreateDocument() + } else { + + // permission denied, boo! Disable the + Toaster.show(rootView, resources + .getString(R.string.permission_denied_to_write_external_document)) + } + } + } + } + + override fun showDocumentList(documents: List) { + mDocumentList = documents + mDocumentListAdapter!!.setDocuments(mDocumentList) + mDocumentListAdapter!!.notifyDataSetChanged() + if (documents.isEmpty()) { + showEmptyDocuments() + } else { + if (ll_error!!.visibility == View.VISIBLE) { + ll_error!!.visibility = View.GONE + } + } + } + + override fun showDocumentFetchSuccessfully(responseBody: ResponseBody?) { + documentBody = responseBody + checkPermissionAndRequest() + } + + override fun showDocumentActions(documentId: Int) { + MaterialDialog.Builder().init(activity) + .setItems(R.array.document_options) { dialog, which -> + when (which) { + 0 -> mDocumentListPresenter!!.downloadDocument(entityType, entityId, + documentId) + 1 -> showDocumentDialog(getString(R.string.update_document)) + 2 -> mDocumentListPresenter!!.removeDocument(entityType, entityId, + documentId) + else -> { + } + } + } + .createMaterialDialog() + .show() + } + + override fun checkExternalStorageAndCreateDocument() { + // Create a path where we will place our documents in the user's + // public directory and check if the file exists. + val mifosDirectory = File(Environment.getExternalStorageDirectory(), + resources.getString(R.string.document_directory)) + if (!mifosDirectory.exists()) { + mifosDirectory.mkdirs() + } + val documentFile = File(mifosDirectory.path, document!!.fileName) + FileUtils.writeInputStreamDataToFile(documentBody!!.byteStream(), documentFile) + + //Opening the Saved Document + val intent = Intent(Intent.ACTION_VIEW) + intent.setDataAndType(Uri.fromFile(documentFile), + FileUtils.getMimeType(mifosDirectory.path + + resources.getString(R.string.slash) + document!!.fileName)) + startActivity(intent) + } + + override fun showDocumentRemovedSuccessfully() { + Toaster.show(rootView, resources.getString(R.string.document_remove_successfully)) + mDocumentListPresenter!!.loadDocumentList(entityType, entityId) + } + + override fun showDocumentDialog(documentAction: String?) { + val documentDialogFragment = DocumentDialogFragment.newInstance(entityType, entityId, documentAction, document) + val fragmentTransaction = activity!!.supportFragmentManager + .beginTransaction() + fragmentTransaction.addToBackStack(FragmentConstants.FRAG_DOCUMENT_LIST) + documentDialogFragment.show(fragmentTransaction, "Document Dialog Fragment") + } + + override fun showEmptyDocuments() { + ll_error!!.visibility = View.VISIBLE + mNoChargesText!!.text = resources.getString(R.string.no_document_to_show) + mNoChargesIcon!!.setImageResource(R.drawable.ic_assignment_turned_in_black_24dp) + } + + override fun showFetchingError(message: Int) { + if (mDocumentListAdapter!!.itemCount == 0) { + ll_error!!.visibility = View.VISIBLE + val errorMessage = getStringMessage(message) + getStringMessage(R.string.new_line) + + getStringMessage(R.string.click_to_refresh) + mNoChargesText!!.text = errorMessage + } else { + Toaster.show(rootView, getStringMessage(message)) + } + } + + override fun showProgressbar(show: Boolean) { + swipeRefreshLayout!!.isRefreshing = show + if (show && mDocumentListAdapter!!.itemCount == 0) { + showMifosProgressBar() + swipeRefreshLayout!!.isRefreshing = false + } else { + hideMifosProgressBar() + } + } + + override fun onDestroyView() { + super.onDestroyView() + mDocumentListPresenter!!.detachView() + hideMifosProgressBar() + } + + override fun onPrepareOptionsMenu(menu: Menu) { + menu.clear() + val menuItemAddNewDocument = menu.add(Menu.NONE, MENU_ITEM_ADD_NEW_DOCUMENT, Menu.NONE, getString(R.string.add_new)) + menuItemAddNewDocument.icon = ContextCompat + .getDrawable(activity!!, R.drawable.ic_add_white_24dp) + menuItemAddNewDocument.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM) + super.onPrepareOptionsMenu(menu) + } + + override fun onOptionsItemSelected(item: MenuItem): Boolean { + val id = item.itemId + if (id == MENU_ITEM_ADD_NEW_DOCUMENT) { + showDocumentDialog(getString(R.string.upload_document)) + } + return super.onOptionsItemSelected(item) + } + + companion object { + const val MENU_ITEM_ADD_NEW_DOCUMENT = 1000 + val LOG_TAG = DocumentListFragment::class.java.simpleName + @JvmStatic + fun newInstance(entityType: String?, entiyId: Int): DocumentListFragment { + val fragment = DocumentListFragment() + val args = Bundle() + args.putString(Constants.ENTITY_TYPE, entityType) + args.putInt(Constants.ENTITY_ID, entiyId) + fragment.arguments = args + return fragment + } + } +} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/documentlist/DocumentListMvpView.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/documentlist/DocumentListMvpView.java deleted file mode 100644 index b92a9755d0f..00000000000 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/documentlist/DocumentListMvpView.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.mifos.mifosxdroid.online.documentlist; - -import com.mifos.mifosxdroid.base.MvpView; -import com.mifos.objects.noncore.Document; - -import java.util.List; - -import okhttp3.ResponseBody; - -/** - * Created by Rajan Maurya on 06/06/16. - */ -public interface DocumentListMvpView extends MvpView { - - void showDocumentList(List documents); - - void showDocumentFetchSuccessfully(ResponseBody responseBody); - - void checkPermissionAndRequest(); - - void requestPermission(); - - void showDocumentActions(int documentId); - - void checkExternalStorageAndCreateDocument(); - - void showDocumentRemovedSuccessfully(); - - void showDocumentDialog(String documentAction); - - void showEmptyDocuments(); - - void showFetchingError(int errorMessage); -} diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/documentlist/DocumentListMvpView.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/documentlist/DocumentListMvpView.kt new file mode 100644 index 00000000000..65d4b207c19 --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/documentlist/DocumentListMvpView.kt @@ -0,0 +1,21 @@ +package com.mifos.mifosxdroid.online.documentlist + +import com.mifos.mifosxdroid.base.MvpView +import com.mifos.objects.noncore.Document +import okhttp3.ResponseBody + +/** + * Created by Rajan Maurya on 06/06/16. + */ +interface DocumentListMvpView : MvpView { + fun showDocumentList(documents: List) + fun showDocumentFetchSuccessfully(responseBody: ResponseBody?) + fun checkPermissionAndRequest() + fun requestPermission() + fun showDocumentActions(documentId: Int) + fun checkExternalStorageAndCreateDocument() + fun showDocumentRemovedSuccessfully() + fun showDocumentDialog(documentAction: String?) + fun showEmptyDocuments() + fun showFetchingError(errorMessage: Int) +} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/documentlist/DocumentListPresenter.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/documentlist/DocumentListPresenter.java deleted file mode 100644 index fc7a6682280..00000000000 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/documentlist/DocumentListPresenter.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.mifos.mifosxdroid.online.documentlist; - -import com.mifos.api.GenericResponse; -import com.mifos.api.datamanager.DataManagerDocument; -import com.mifos.mifosxdroid.R; -import com.mifos.mifosxdroid.base.BasePresenter; -import com.mifos.objects.noncore.Document; - -import java.util.List; - -import javax.inject.Inject; - -import okhttp3.ResponseBody; -import rx.Subscriber; -import rx.android.schedulers.AndroidSchedulers; -import rx.schedulers.Schedulers; -import rx.subscriptions.CompositeSubscription; - -/** - * Created by Rajan Maurya on 06/06/16. - */ -public class DocumentListPresenter extends BasePresenter { - - - private final DataManagerDocument mDataManagerDocument; - private CompositeSubscription mSubscriptions; - - @Inject - public DocumentListPresenter(DataManagerDocument dataManagerDocument) { - mDataManagerDocument = dataManagerDocument; - mSubscriptions = new CompositeSubscription(); - } - - @Override - public void attachView(DocumentListMvpView mvpView) { - super.attachView(mvpView); - } - - @Override - public void detachView() { - super.detachView(); - mSubscriptions.clear(); - } - - public void loadDocumentList(String type, int id) { - checkViewAttached(); - getMvpView().showProgressbar(true); - mSubscriptions.add(mDataManagerDocument.getDocumentsList(type, id) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(new Subscriber>() { - @Override - public void onCompleted() { - } - - @Override - public void onError(Throwable e) { - getMvpView().showProgressbar(false); - getMvpView().showFetchingError(R.string.failed_to_fetch_documents); - } - - @Override - public void onNext(List documents) { - getMvpView().showProgressbar(false); - getMvpView().showDocumentList(documents); - } - })); - } - - public void downloadDocument(String entityType, int entityId, int documentId) { - checkViewAttached(); - getMvpView().showProgressbar(true); - mSubscriptions.add(mDataManagerDocument.downloadDocument(entityType, entityId, documentId) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(new Subscriber() { - @Override - public void onCompleted() { - - } - - @Override - public void onError(Throwable e) { - getMvpView().showProgressbar(false); - getMvpView().showFetchingError(R.string.failed_to_fetch_documents); - } - - @Override - public void onNext(ResponseBody responseBody) { - getMvpView().showProgressbar(false); - getMvpView().showDocumentFetchSuccessfully(responseBody); - } - }) - ); - } - - public void removeDocument(String entityType, int entityId, int documentId) { - checkViewAttached(); - getMvpView().showProgressbar(true); - mSubscriptions.add(mDataManagerDocument.removeDocument(entityType, entityId, documentId) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(new Subscriber() { - @Override - public void onCompleted() { - - } - - @Override - public void onError(Throwable e) { - getMvpView().showProgressbar(false); - getMvpView().showFetchingError(R.string.failed_to_remove_document); - } - - @Override - public void onNext(GenericResponse genericResponse) { - getMvpView().showProgressbar(false); - getMvpView().showDocumentRemovedSuccessfully(); - } - }) - ); - } - -} diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/documentlist/DocumentListPresenter.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/documentlist/DocumentListPresenter.kt new file mode 100644 index 00000000000..8455031c40d --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/documentlist/DocumentListPresenter.kt @@ -0,0 +1,94 @@ +package com.mifos.mifosxdroid.online.documentlist + +import com.mifos.api.GenericResponse +import com.mifos.api.datamanager.DataManagerDocument +import com.mifos.mifosxdroid.R +import com.mifos.mifosxdroid.base.BasePresenter +import com.mifos.objects.noncore.Document +import okhttp3.ResponseBody +import rx.Subscriber +import rx.android.schedulers.AndroidSchedulers +import rx.schedulers.Schedulers +import rx.subscriptions.CompositeSubscription +import javax.inject.Inject + +/** + * Created by Rajan Maurya on 06/06/16. + */ +class DocumentListPresenter @Inject constructor(private val mDataManagerDocument: DataManagerDocument) : BasePresenter() { + private val mSubscriptions: CompositeSubscription + override fun attachView(mvpView: DocumentListMvpView?) { + super.attachView(mvpView) + } + + override fun detachView() { + super.detachView() + mSubscriptions.clear() + } + + fun loadDocumentList(type: String?, id: Int) { + checkViewAttached() + mvpView!!.showProgressbar(true) + mSubscriptions.add(mDataManagerDocument.getDocumentsList(type, id) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeOn(Schedulers.io()) + .subscribe(object : Subscriber?>() { + override fun onCompleted() {} + override fun onError(e: Throwable) { + mvpView!!.showProgressbar(false) + mvpView!!.showFetchingError(R.string.failed_to_fetch_documents) + } + + override fun onNext(documents: List?) { + mvpView!!.showProgressbar(false) + mvpView!!.showDocumentList(documents as List) + } + })) + } + + fun downloadDocument(entityType: String?, entityId: Int, documentId: Int) { + checkViewAttached() + mvpView!!.showProgressbar(true) + mSubscriptions.add(mDataManagerDocument.downloadDocument(entityType, entityId, documentId) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeOn(Schedulers.io()) + .subscribe(object : Subscriber() { + override fun onCompleted() {} + override fun onError(e: Throwable) { + mvpView!!.showProgressbar(false) + mvpView!!.showFetchingError(R.string.failed_to_fetch_documents) + } + + override fun onNext(responseBody: ResponseBody?) { + mvpView!!.showProgressbar(false) + mvpView!!.showDocumentFetchSuccessfully(responseBody) + } + }) + ) + } + + fun removeDocument(entityType: String?, entityId: Int, documentId: Int) { + checkViewAttached() + mvpView!!.showProgressbar(true) + mSubscriptions.add(mDataManagerDocument.removeDocument(entityType, entityId, documentId) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeOn(Schedulers.io()) + .subscribe(object : Subscriber() { + override fun onCompleted() {} + override fun onError(e: Throwable) { + mvpView!!.showProgressbar(false) + mvpView!!.showFetchingError(R.string.failed_to_remove_document) + } + + override fun onNext(genericResponse: GenericResponse?) { + mvpView!!.showProgressbar(false) + mvpView!!.showDocumentRemovedSuccessfully() + } + }) + ) + } + + init { + mSubscriptions = CompositeSubscription() + } +} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NoteFragment.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NoteFragment.java deleted file mode 100644 index cee73581d15..00000000000 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NoteFragment.java +++ /dev/null @@ -1,165 +0,0 @@ -package com.mifos.mifosxdroid.online.note; - -import android.os.Bundle; -import androidx.annotation.Nullable; -import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; - -import com.mifos.mifosxdroid.R; -import com.mifos.mifosxdroid.adapters.NoteAdapter; -import com.mifos.mifosxdroid.core.MifosBaseActivity; -import com.mifos.mifosxdroid.core.MifosBaseFragment; -import com.mifos.mifosxdroid.core.util.Toaster; -import com.mifos.objects.noncore.Note; -import com.mifos.utils.Constants; - -import java.util.ArrayList; -import java.util.List; - -import javax.inject.Inject; - -import butterknife.BindView; -import butterknife.ButterKnife; - -/** - * Created by rahul on 4/3/17. - */ -public class NoteFragment extends MifosBaseFragment implements NoteMvpView, - SwipeRefreshLayout.OnRefreshListener { - - @BindView(R.id.rv_note) - RecyclerView rvNote; - - @BindView(R.id.swipe_container) - SwipeRefreshLayout swipeRefreshLayout; - - @BindView(R.id.tv_error) - TextView tvError; - - @BindView(R.id.iv_error) - ImageView ivError; - - @BindView(R.id.ll_error) - LinearLayout llError; - - @Inject - NotePresenter notePresenter; - - @Inject - NoteAdapter noteAdapter; - - private View rootView; - private String entityType; - private int entityId; - private List notes; - - - public static NoteFragment newInstance(String entityType, int entityId) { - NoteFragment noteFragment = new NoteFragment(); - Bundle args = new Bundle(); - args.putString(Constants.ENTITY_TYPE, entityType); - args.putInt(Constants.ENTITY_ID, entityId); - noteFragment.setArguments(args); - return noteFragment; - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - ((MifosBaseActivity) getActivity()).getActivityComponent().inject(this); - notes = new ArrayList<>(); - if (getArguments() != null) { - entityType = getArguments().getString(Constants.ENTITY_TYPE); - entityId = getArguments().getInt(Constants.ENTITY_ID); - } - } - - @Override - public void onResume() { - super.onResume(); - notePresenter.loadNote(entityType, entityId); - } - - @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable - Bundle savedInstanceState) { - rootView = inflater.inflate(R.layout.fragment_notes, container, false); - ButterKnife.bind(this, rootView); - notePresenter.attachView(this); - - showUserInterface(); - notePresenter.loadNote(entityType, entityId); - - return rootView; - } - - @Override - public void onRefresh() { - notePresenter.loadNote(entityType, entityId); - } - - @Override - public void showUserInterface() { - setToolbarTitle(getResources().getString(R.string.note)); - LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity()); - mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); - rvNote.setLayoutManager(mLayoutManager); - rvNote.setHasFixedSize(true); - rvNote.setAdapter(noteAdapter); - swipeRefreshLayout.setColorSchemeColors(getActivity() - .getResources().getIntArray(R.array.swipeRefreshColors)); - swipeRefreshLayout.setOnRefreshListener(this); - } - - @Override - public void showNote(List notes) { - this.notes = notes; - noteAdapter.setNotes(this.notes); - } - - @Override - public void showEmptyNotes() { - llError.setVisibility(View.VISIBLE); - rvNote.setVisibility(View.GONE); - tvError.setText(R.string.empty_notes); - } - - @Override - public void showResetVisibility() { - llError.setVisibility(View.GONE); - rvNote.setVisibility(View.VISIBLE); - } - - @Override - public void showError(int message) { - Toaster.show(rootView, message); - llError.setVisibility(View.VISIBLE); - rvNote.setVisibility(View.GONE); - tvError.setText(getString(R.string.failed_to_fetch_notes)); - } - - @Override - public void showProgressbar(boolean show) { - if (show && (noteAdapter.getItemCount() == 0)) { - showMifosProgressBar(); - swipeRefreshLayout.setRefreshing(false); - } else { - hideMifosProgressBar(); - swipeRefreshLayout.setRefreshing(show); - } - } - - @Override - public void onDestroyView() { - super.onDestroyView(); - hideMifosProgressBar(); - notePresenter.detachView(); - } -} diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NoteFragment.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NoteFragment.kt new file mode 100644 index 00000000000..495b635b679 --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NoteFragment.kt @@ -0,0 +1,151 @@ +package com.mifos.mifosxdroid.online.note + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener +import butterknife.BindView +import butterknife.ButterKnife +import com.mifos.mifosxdroid.R +import com.mifos.mifosxdroid.adapters.NoteAdapter +import com.mifos.mifosxdroid.core.MifosBaseActivity +import com.mifos.mifosxdroid.core.MifosBaseFragment +import com.mifos.mifosxdroid.core.util.Toaster +import com.mifos.objects.noncore.Note +import com.mifos.utils.Constants +import java.util.* +import javax.inject.Inject + +/** + * Created by rahul on 4/3/17. + */ +class NoteFragment : MifosBaseFragment(), NoteMvpView, OnRefreshListener { + @JvmField + @BindView(R.id.rv_note) + var rvNote: RecyclerView? = null + + @JvmField + @BindView(R.id.swipe_container) + var swipeRefreshLayout: SwipeRefreshLayout? = null + + @JvmField + @BindView(R.id.tv_error) + var tvError: TextView? = null + + @JvmField + @BindView(R.id.iv_error) + var ivError: ImageView? = null + + @JvmField + @BindView(R.id.ll_error) + var llError: LinearLayout? = null + + @JvmField + @Inject + var notePresenter: NotePresenter? = null + + @JvmField + @Inject + var noteAdapter: NoteAdapter? = null + private lateinit var rootView: View + private var entityType: String? = null + private var entityId = 0 + private var notes: List? = null + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + (activity as MifosBaseActivity?)!!.activityComponent.inject(this) + notes = ArrayList() + if (arguments != null) { + entityType = arguments!!.getString(Constants.ENTITY_TYPE) + entityId = arguments!!.getInt(Constants.ENTITY_ID) + } + } + + override fun onResume() { + super.onResume() + notePresenter!!.loadNote(entityType, entityId) + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + rootView = inflater.inflate(R.layout.fragment_notes, container, false) + ButterKnife.bind(this, rootView) + notePresenter!!.attachView(this) + showUserInterface() + notePresenter!!.loadNote(entityType, entityId) + return rootView + } + + override fun onRefresh() { + notePresenter!!.loadNote(entityType, entityId) + } + + override fun showUserInterface() { + setToolbarTitle(resources.getString(R.string.note)) + val mLayoutManager = LinearLayoutManager(activity) + mLayoutManager.orientation = LinearLayoutManager.VERTICAL + rvNote!!.layoutManager = mLayoutManager + rvNote!!.setHasFixedSize(true) + rvNote!!.adapter = noteAdapter + swipeRefreshLayout!!.setColorSchemeColors(*activity + ?.getResources()!!.getIntArray(R.array.swipeRefreshColors)) + swipeRefreshLayout!!.setOnRefreshListener(this) + } + + override fun showNote(notes: List?) { + this.notes = notes + noteAdapter!!.setNotes(this.notes) + } + + override fun showEmptyNotes() { + llError!!.visibility = View.VISIBLE + rvNote!!.visibility = View.GONE + tvError!!.setText(R.string.empty_notes) + } + + override fun showResetVisibility() { + llError!!.visibility = View.GONE + rvNote!!.visibility = View.VISIBLE + } + + override fun showError(message: Int) { + Toaster.show(rootView, message) + llError!!.visibility = View.VISIBLE + rvNote!!.visibility = View.GONE + tvError!!.text = getString(R.string.failed_to_fetch_notes) + } + + override fun showProgressbar(show: Boolean) { + if (show && noteAdapter!!.itemCount == 0) { + showMifosProgressBar() + swipeRefreshLayout!!.isRefreshing = false + } else { + hideMifosProgressBar() + swipeRefreshLayout!!.isRefreshing = show + } + } + + override fun onDestroyView() { + super.onDestroyView() + hideMifosProgressBar() + notePresenter!!.detachView() + } + + companion object { + @JvmStatic + fun newInstance(entityType: String?, entityId: Int): NoteFragment { + val noteFragment = NoteFragment() + val args = Bundle() + args.putString(Constants.ENTITY_TYPE, entityType) + args.putInt(Constants.ENTITY_ID, entityId) + noteFragment.arguments = args + return noteFragment + } + } +} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NoteMvpView.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NoteMvpView.java deleted file mode 100644 index 9c8d8b277c6..00000000000 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NoteMvpView.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.mifos.mifosxdroid.online.note; - -import com.mifos.mifosxdroid.base.MvpView; -import com.mifos.objects.noncore.Note; - -import java.util.List; - -/** - * Created by rahul on 4/3/17. - */ -public interface NoteMvpView extends MvpView { - - void showUserInterface(); - - void showNote(List note); - - void showEmptyNotes(); - - void showResetVisibility(); - - void showError(int message); -} diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NoteMvpView.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NoteMvpView.kt new file mode 100644 index 00000000000..665f0353856 --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NoteMvpView.kt @@ -0,0 +1,15 @@ +package com.mifos.mifosxdroid.online.note + +import com.mifos.mifosxdroid.base.MvpView +import com.mifos.objects.noncore.Note + +/** + * Created by rahul on 4/3/17. + */ +interface NoteMvpView : MvpView { + fun showUserInterface() + fun showNote(note: List?) + fun showEmptyNotes() + fun showResetVisibility() + fun showError(message: Int) +} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NotePresenter.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NotePresenter.java deleted file mode 100644 index ad179e8b739..00000000000 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NotePresenter.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.mifos.mifosxdroid.online.note; - -import com.mifos.api.datamanager.DataManagerNote; -import com.mifos.mifosxdroid.R; -import com.mifos.mifosxdroid.base.BasePresenter; -import com.mifos.objects.noncore.Note; - -import java.util.List; - -import javax.inject.Inject; - -import rx.Subscriber; -import rx.android.schedulers.AndroidSchedulers; -import rx.schedulers.Schedulers; -import rx.subscriptions.CompositeSubscription; - -/** - * Created by rahul on 4/3/17. - */ -public class NotePresenter extends BasePresenter { - - private final DataManagerNote dataManagerNote; - private CompositeSubscription subscriptions; - - @Inject - public NotePresenter(DataManagerNote dataManagerNote) { - this.dataManagerNote = dataManagerNote; - subscriptions = new CompositeSubscription(); - } - - @Override - public void attachView(NoteMvpView mvpView) { - super.attachView(mvpView); - } - - @Override - public void detachView() { - super.detachView(); - subscriptions.unsubscribe(); - } - - /** - * This method load the Notes. - * Response: List - */ - public void loadNote(String type, int id) { - checkViewAttached(); - getMvpView().showProgressbar(true); - getMvpView().showResetVisibility(); - subscriptions.add(dataManagerNote.getNotes(type, id) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(new Subscriber>() { - @Override - public void onCompleted() { - } - - @Override - public void onError(Throwable e) { - getMvpView().showProgressbar(false); - getMvpView().showError(R.string.failed_to_fetch_datatable); - } - - @Override - public void onNext(List note) { - getMvpView().showProgressbar(false); - if (!note.isEmpty()) { - getMvpView().showNote(note); - } else { - getMvpView().showEmptyNotes(); - } - } - })); - } - -} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NotePresenter.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NotePresenter.kt new file mode 100644 index 00000000000..74d8d55a30a --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NotePresenter.kt @@ -0,0 +1,59 @@ +package com.mifos.mifosxdroid.online.note + +import com.mifos.api.datamanager.DataManagerNote +import com.mifos.mifosxdroid.R +import com.mifos.mifosxdroid.base.BasePresenter +import com.mifos.objects.noncore.Note +import rx.Subscriber +import rx.android.schedulers.AndroidSchedulers +import rx.schedulers.Schedulers +import rx.subscriptions.CompositeSubscription +import javax.inject.Inject + +/** + * Created by rahul on 4/3/17. + */ +class NotePresenter @Inject constructor(private val dataManagerNote: DataManagerNote) : BasePresenter() { + private val subscriptions: CompositeSubscription + override fun attachView(mvpView: NoteMvpView?) { + super.attachView(mvpView) + } + + override fun detachView() { + super.detachView() + subscriptions.unsubscribe() + } + + /** + * This method load the Notes. + * Response: List + */ + fun loadNote(type: String?, id: Int) { + checkViewAttached() + mvpView!!.showProgressbar(true) + mvpView!!.showResetVisibility() + subscriptions.add(dataManagerNote.getNotes(type, id) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeOn(Schedulers.io()) + .subscribe(object : Subscriber?>() { + override fun onCompleted() {} + override fun onError(e: Throwable) { + mvpView!!.showProgressbar(false) + mvpView!!.showError(R.string.failed_to_fetch_datatable) + } + + override fun onNext(note: List?) { + mvpView!!.showProgressbar(false) + if (!note!!.isEmpty()) { + mvpView!!.showNote(note as List?) + } else { + mvpView!!.showEmptyNotes() + } + } + })) + } + + init { + subscriptions = CompositeSubscription() + } +} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/sign/SignatureFragment.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/sign/SignatureFragment.java deleted file mode 100644 index 7667bcbf759..00000000000 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/sign/SignatureFragment.java +++ /dev/null @@ -1,268 +0,0 @@ -package com.mifos.mifosxdroid.online.sign; - -import android.Manifest; -import android.app.Activity; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.net.Uri; -import android.os.Build; -import android.os.Bundle; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import com.google.android.material.bottomnavigation.BottomNavigationView; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; - -import com.mifos.api.GenericResponse; -import com.mifos.mifosxdroid.R; -import com.mifos.mifosxdroid.core.MifosBaseActivity; -import com.mifos.mifosxdroid.core.MifosBaseFragment; -import com.mifos.mifosxdroid.core.util.Toaster; -import com.mifos.mifosxdroid.views.SignatureView; -import com.mifos.utils.AndroidVersionUtil; -import com.mifos.utils.CheckSelfPermissionAndRequest; -import com.mifos.utils.Constants; -import com.mifos.utils.FileUtils; -import com.mifos.utils.SafeUIBlockingUtility; - -import java.io.File; - -import javax.inject.Inject; - -import butterknife.BindView; -import butterknife.ButterKnife; - -/** - * Created by Tarun on 28-06-2017. - */ - -public class SignatureFragment extends MifosBaseFragment implements - SignatureMvpView, BottomNavigationView.OnNavigationItemSelectedListener, - SignatureView.OnSignatureSaveListener { - - public static final String LOG_TAG = SignatureFragment.class.getSimpleName(); - private static final int FILE_SELECT_CODE = 0; - - @BindView(R.id.sign_view) - SignatureView signView; - - @BindView(R.id.navigation) - BottomNavigationView bottomNavigationView; - - @Inject - SignaturePresenter mSignaturePresenter; - - private Integer mClientId; - private View rootView; - private File signatureFile; - private SafeUIBlockingUtility safeUIBlockingUtility; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - ((MifosBaseActivity) getActivity()).getActivityComponent().inject(this); - safeUIBlockingUtility = new SafeUIBlockingUtility(getActivity(), - getString(R.string.signature_fragment_loading_message)); - if (getArguments() != null) { - mClientId = getArguments().getInt(Constants.CLIENT_ID); - } - - setHasOptionsMenu(true); - } - - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - rootView = inflater.inflate(R.layout.fragment_sign, container, false); - ButterKnife.bind(this, rootView); - mSignaturePresenter.attachView(this); - showInterface(); - - return rootView; - } - - private void showInterface() { - setToolbarTitle(getString(R.string.upload_sign)); - signView.setOnSignatureSaveListener(this); - bottomNavigationView.setOnNavigationItemSelectedListener(this); - bottomNavigationView.setItemIconTintList(null); - } - - @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - inflater.inflate(R.menu.signature_menu, menu); - super.onCreateOptionsMenu(menu, inflater); - } - - - @Override - public boolean onNavigationItemSelected(@NonNull MenuItem item) { - switch (item.getItemId()) { - case R.id.btn_reset_sign: - signView.clear(); - break; - - case R.id.btn_from_gallery: - getDocumentFromGallery(); - break; - } - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case R.id.menu_upload_sign: - if (AndroidVersionUtil.isApiVersionGreaterOrEqual(Build.VERSION_CODES.M)) { - checkPermissionAndRequest(); - } else { - saveAndUploadSignature(); - } - break; - } - return super.onOptionsItemSelected(item); - } - - /** - * This method checks the permission WRITE_EXTERNAL_STORAGE is granted or not. - * If not, it prompts the user a dialog to grant the WRITE_EXTERNAL_STORAGE permission. - * If the permission is granted already then save the signature in external storage; - */ - @Override - public void checkPermissionAndRequest() { - if (CheckSelfPermissionAndRequest.checkSelfPermission(getActivity(), - Manifest.permission.WRITE_EXTERNAL_STORAGE)) { - saveAndUploadSignature(); - } else { - requestPermission(); - } - } - - @Override - public void requestPermission() { - CheckSelfPermissionAndRequest.requestPermission( - (MifosBaseActivity) getActivity(), - Manifest.permission.WRITE_EXTERNAL_STORAGE, - Constants.PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE, - getResources().getString( - R.string.dialog_message_write_external_storage_permission_denied), - getResources().getString(R.string.dialog_message_permission_never_ask_again_write), - Constants.WRITE_EXTERNAL_STORAGE_STATUS); - } - - /** - * This method handles the response after user grants or denies the permission. - * - * @param requestCode Request Code - * @param permissions Permission - * @param grantResults GrantResults - */ - @Override - public void onRequestPermissionsResult(int requestCode, - @NonNull String[] permissions, - @NonNull int[] grantResults) { - switch (requestCode) { - case Constants.PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE: { - if (grantResults.length > 0 - && grantResults[0] == PackageManager.PERMISSION_GRANTED) { - saveAndUploadSignature(); - - } else { - Toaster.show(rootView, getResources() - .getString(R.string.permission_denied_to_write_external_document)); - } - } - } - } - - @Override - public void getDocumentFromGallery() { - Intent intentDocument; - if (AndroidVersionUtil.isApiVersionGreaterOrEqual(Build.VERSION_CODES.KITKAT)) { - intentDocument = new Intent(Intent.ACTION_OPEN_DOCUMENT); - } else { - intentDocument = new Intent(Intent.ACTION_GET_CONTENT); - } - intentDocument.addCategory(Intent.CATEGORY_OPENABLE); - intentDocument.setType("image/*"); - startActivityForResult(intentDocument, FILE_SELECT_CODE); - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - switch (requestCode) { - case FILE_SELECT_CODE: - if (resultCode == Activity.RESULT_OK) { - Uri uri = data.getData(); - - String filePath = FileUtils.getPathReal(getActivity(), uri); - if (filePath != null) { - signatureFile = new File(filePath); - } - - if (signatureFile != null) { - uploadSignImage(); - } else { - break; - } - } - break; - } - super.onActivityResult(requestCode, resultCode, data); - } - - private void uploadSignImage() { - showProgressbar(true); - mSignaturePresenter.createDocument(Constants.ENTITY_TYPE_CLIENTS, - mClientId, signatureFile.getName(), "Signature", signatureFile); - } - - @Override - public void onSignSavedError(String errorMsg) { - Toaster.show(rootView, errorMsg); - } - - @Override - public void onSignSavedSuccess(String absoluteFilePath) { - Uri signImageUri = Uri.parse("file://" + absoluteFilePath); - signatureFile = new File(signImageUri.getPath()); - Toaster.show(rootView, getString(R.string.sign_saved_success_msg) - + signImageUri.getPath()); - uploadSignImage(); - } - - @Override - public void showSignatureUploadedSuccessfully(GenericResponse response) { - showProgressbar(false); - Toaster.show(rootView, R.string.sign_uploaded_success_msg); - } - - @Override - public void showError(int errorId) { - showProgressbar(false); - Toaster.show(rootView, getStringMessage(errorId)); - } - - @Override - public void showProgressbar(boolean b) { - if (b) { - safeUIBlockingUtility.safelyBlockUI(); - } else { - safeUIBlockingUtility.safelyUnBlockUI(); - } - } - - @Override - public void saveAndUploadSignature() { - if (signView.getXCoordinateSize() > 0 && signView.getYCoordinateSize() > 0) { - signView.saveSignature(mClientId); - } else { - Toaster.show(rootView, R.string.empty_signature); - } - } -} diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/sign/SignatureFragment.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/sign/SignatureFragment.kt new file mode 100644 index 00000000000..6541323afdb --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/sign/SignatureFragment.kt @@ -0,0 +1,220 @@ +package com.mifos.mifosxdroid.online.sign + +import android.Manifest +import android.app.Activity +import android.content.Intent +import android.content.pm.PackageManager +import android.net.Uri +import android.os.Build +import android.os.Bundle +import android.view.* +import butterknife.BindView +import butterknife.ButterKnife +import com.google.android.material.bottomnavigation.BottomNavigationView +import com.mifos.api.GenericResponse +import com.mifos.mifosxdroid.R +import com.mifos.mifosxdroid.core.MifosBaseActivity +import com.mifos.mifosxdroid.core.MifosBaseFragment +import com.mifos.mifosxdroid.core.util.Toaster +import com.mifos.mifosxdroid.views.SignatureView +import com.mifos.mifosxdroid.views.SignatureView.OnSignatureSaveListener +import com.mifos.utils.* +import java.io.File +import javax.inject.Inject + +/** + * Created by Tarun on 28-06-2017. + */ +class SignatureFragment : MifosBaseFragment(), SignatureMvpView, BottomNavigationView.OnNavigationItemSelectedListener, OnSignatureSaveListener { + @JvmField + @BindView(R.id.sign_view) + var signView: SignatureView? = null + + @JvmField + @BindView(R.id.navigation) + var bottomNavigationView: BottomNavigationView? = null + + @JvmField + @Inject + var mSignaturePresenter: SignaturePresenter? = null + private var mClientId: Int? = null + private lateinit var rootView: View + private var signatureFile: File? = null + private var safeUIBlockingUtility: SafeUIBlockingUtility? = null + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + (activity as MifosBaseActivity?)!!.activityComponent.inject(this) + safeUIBlockingUtility = SafeUIBlockingUtility(activity, + getString(R.string.signature_fragment_loading_message)) + if (arguments != null) { + mClientId = arguments!!.getInt(Constants.CLIENT_ID) + } + setHasOptionsMenu(true) + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle?): View? { + rootView = inflater.inflate(R.layout.fragment_sign, container, false) + ButterKnife.bind(this, rootView) + mSignaturePresenter!!.attachView(this) + showInterface() + return rootView + } + + private fun showInterface() { + setToolbarTitle(getString(R.string.upload_sign)) + signView!!.setOnSignatureSaveListener(this) + bottomNavigationView!!.setOnNavigationItemSelectedListener(this) + bottomNavigationView!!.itemIconTintList = null + } + + override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + inflater.inflate(R.menu.signature_menu, menu) + super.onCreateOptionsMenu(menu, inflater) + } + + override fun onNavigationItemSelected(item: MenuItem): Boolean { + when (item.itemId) { + R.id.btn_reset_sign -> signView!!.clear() + R.id.btn_from_gallery -> documentFromGallery + } + return true + } + + override fun onOptionsItemSelected(item: MenuItem): Boolean { + when (item.itemId) { + R.id.menu_upload_sign -> if (AndroidVersionUtil.isApiVersionGreaterOrEqual(Build.VERSION_CODES.M)) { + checkPermissionAndRequest() + } else { + saveAndUploadSignature() + } + } + return super.onOptionsItemSelected(item) + } + + /** + * This method checks the permission WRITE_EXTERNAL_STORAGE is granted or not. + * If not, it prompts the user a dialog to grant the WRITE_EXTERNAL_STORAGE permission. + * If the permission is granted already then save the signature in external storage; + */ + override fun checkPermissionAndRequest() { + if (CheckSelfPermissionAndRequest.checkSelfPermission(activity, + Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + saveAndUploadSignature() + } else { + requestPermission() + } + } + + override fun requestPermission() { + CheckSelfPermissionAndRequest.requestPermission( + activity as MifosBaseActivity?, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Constants.PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE, + resources.getString( + R.string.dialog_message_write_external_storage_permission_denied), + resources.getString(R.string.dialog_message_permission_never_ask_again_write), + Constants.WRITE_EXTERNAL_STORAGE_STATUS) + } + + /** + * This method handles the response after user grants or denies the permission. + * + * @param requestCode Request Code + * @param permissions Permission + * @param grantResults GrantResults + */ + override fun onRequestPermissionsResult(requestCode: Int, + permissions: Array, + grantResults: IntArray) { + when (requestCode) { + Constants.PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE -> { + if (grantResults.size > 0 + && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + saveAndUploadSignature() + } else { + Toaster.show(rootView, resources + .getString(R.string.permission_denied_to_write_external_document)) + } + } + } + } + + override val documentFromGallery: Unit + get() { + val intentDocument: Intent + intentDocument = if (AndroidVersionUtil.isApiVersionGreaterOrEqual(Build.VERSION_CODES.KITKAT)) { + Intent(Intent.ACTION_OPEN_DOCUMENT) + } else { + Intent(Intent.ACTION_GET_CONTENT) + } + intentDocument.addCategory(Intent.CATEGORY_OPENABLE) + intentDocument.type = "image/*" + startActivityForResult(intentDocument, FILE_SELECT_CODE) + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { + when (requestCode) { + FILE_SELECT_CODE -> if (resultCode == Activity.RESULT_OK) { + val uri = data.data + val filePath = FileUtils.getPathReal(activity, uri) + if (filePath != null) { + signatureFile = File(filePath) + } + if (signatureFile != null) { + uploadSignImage() + } + } + } + super.onActivityResult(requestCode, resultCode, data) + } + + private fun uploadSignImage() { + showProgressbar(true) + mSignaturePresenter!!.createDocument(Constants.ENTITY_TYPE_CLIENTS, + mClientId!!, signatureFile!!.name, "Signature", signatureFile) + } + + override fun onSignSavedError(errorMsg: String) { + Toaster.show(rootView, errorMsg) + } + + override fun onSignSavedSuccess(absoluteFilePath: String) { + val signImageUri = Uri.parse("file://$absoluteFilePath") + signatureFile = File(signImageUri.path) + Toaster.show(rootView, getString(R.string.sign_saved_success_msg) + + signImageUri.path) + uploadSignImage() + } + + override fun showSignatureUploadedSuccessfully(response: GenericResponse?) { + showProgressbar(false) + Toaster.show(rootView, R.string.sign_uploaded_success_msg) + } + + override fun showError(errorId: Int) { + showProgressbar(false) + Toaster.show(rootView, getStringMessage(errorId)) + } + + override fun showProgressbar(b: Boolean) { + if (b) { + safeUIBlockingUtility!!.safelyBlockUI() + } else { + safeUIBlockingUtility!!.safelyUnBlockUI() + } + } + + override fun saveAndUploadSignature() { + if (signView!!.xCoordinateSize > 0 && signView!!.yCoordinateSize > 0) { + signView!!.saveSignature(mClientId!!) + } else { + Toaster.show(rootView, R.string.empty_signature) + } + } + + companion object { + val LOG_TAG = SignatureFragment::class.java.simpleName + private const val FILE_SELECT_CODE = 0 + } +} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/sign/SignatureMvpView.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/sign/SignatureMvpView.java deleted file mode 100644 index 0cc905b8e8a..00000000000 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/sign/SignatureMvpView.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.mifos.mifosxdroid.online.sign; - -import com.mifos.api.GenericResponse; -import com.mifos.mifosxdroid.base.MvpView; - -/** - * Created by Tarun on 29-06-2017. - */ - -public interface SignatureMvpView extends MvpView { - - void showSignatureUploadedSuccessfully(GenericResponse response); - - void saveAndUploadSignature(); - - void requestPermission(); - - void checkPermissionAndRequest(); - - void showError(int errorId); - - void getDocumentFromGallery(); -} diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/sign/SignatureMvpView.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/sign/SignatureMvpView.kt new file mode 100644 index 00000000000..23f2d42602a --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/sign/SignatureMvpView.kt @@ -0,0 +1,16 @@ +package com.mifos.mifosxdroid.online.sign + +import com.mifos.api.GenericResponse +import com.mifos.mifosxdroid.base.MvpView + +/** + * Created by Tarun on 29-06-2017. + */ +interface SignatureMvpView : MvpView { + fun showSignatureUploadedSuccessfully(response: GenericResponse?) + fun saveAndUploadSignature() + fun requestPermission() + fun checkPermissionAndRequest() + fun showError(errorId: Int) + val documentFromGallery: Unit +} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/sign/SignaturePresenter.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/sign/SignaturePresenter.java deleted file mode 100644 index 6d4c2bd113b..00000000000 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/sign/SignaturePresenter.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.mifos.mifosxdroid.online.sign; - -import com.mifos.api.GenericResponse; -import com.mifos.api.datamanager.DataManagerDocument; -import com.mifos.mifosxdroid.R; -import com.mifos.mifosxdroid.base.BasePresenter; - -import java.io.File; - -import javax.inject.Inject; - -import okhttp3.MediaType; -import okhttp3.MultipartBody; -import okhttp3.RequestBody; -import rx.Subscriber; -import rx.android.schedulers.AndroidSchedulers; -import rx.schedulers.Schedulers; -import rx.subscriptions.CompositeSubscription; - -/** - * Created by Tarun on 29-06-2017. - */ - -public class SignaturePresenter extends BasePresenter { - private final DataManagerDocument mDataManagerDocument; - private CompositeSubscription mSubscriptions; - - @Inject - public SignaturePresenter(DataManagerDocument dataManagerDocument) { - mDataManagerDocument = dataManagerDocument; - mSubscriptions = new CompositeSubscription(); - } - - @Override - public void attachView(SignatureMvpView mvpView) { - super.attachView(mvpView); - } - - @Override - public void detachView() { - super.detachView(); - mSubscriptions.clear(); - } - - public void createDocument(String type, int id, String name, String desc, File file) { - checkViewAttached(); - getMvpView().showProgressbar(true); - mSubscriptions.add(mDataManagerDocument - .createDocument(type, id, name, desc, getRequestFileBody(file)) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(new Subscriber() { - @Override - public void onCompleted() { - getMvpView().showProgressbar(false); - } - - @Override - public void onError(Throwable e) { - getMvpView().showProgressbar(false); - getMvpView().showError(R.string.failed_to_upload_document); - } - - @Override - public void onNext(GenericResponse genericResponse) { - getMvpView().showProgressbar(false); - getMvpView().showSignatureUploadedSuccessfully(genericResponse); - } - })); - } - - private MultipartBody.Part getRequestFileBody(File file) { - // create RequestBody instance from file - RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file); - - // MultipartBody.Part is used to send also the actual file name - return MultipartBody.Part.createFormData("file", file.getName(), requestFile); - } - -} diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/sign/SignaturePresenter.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/sign/SignaturePresenter.kt new file mode 100644 index 00000000000..ddff873b735 --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/sign/SignaturePresenter.kt @@ -0,0 +1,66 @@ +package com.mifos.mifosxdroid.online.sign + +import com.mifos.api.GenericResponse +import com.mifos.api.datamanager.DataManagerDocument +import com.mifos.mifosxdroid.R +import com.mifos.mifosxdroid.base.BasePresenter +import okhttp3.MediaType +import okhttp3.MultipartBody +import okhttp3.RequestBody +import rx.Subscriber +import rx.android.schedulers.AndroidSchedulers +import rx.schedulers.Schedulers +import rx.subscriptions.CompositeSubscription +import java.io.File +import javax.inject.Inject + +/** + * Created by Tarun on 29-06-2017. + */ +class SignaturePresenter @Inject constructor(private val mDataManagerDocument: DataManagerDocument) : BasePresenter() { + private val mSubscriptions: CompositeSubscription + override fun attachView(mvpView: SignatureMvpView?) { + super.attachView(mvpView) + } + + override fun detachView() { + super.detachView() + mSubscriptions.clear() + } + + fun createDocument(type: String?, id: Int, name: String?, desc: String?, file: File?) { + checkViewAttached() + mvpView!!.showProgressbar(true) + mSubscriptions.add(mDataManagerDocument + .createDocument(type, id, name, desc, getRequestFileBody(file)) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeOn(Schedulers.io()) + .subscribe(object : Subscriber() { + override fun onCompleted() { + mvpView!!.showProgressbar(false) + } + + override fun onError(e: Throwable) { + mvpView!!.showProgressbar(false) + mvpView!!.showError(R.string.failed_to_upload_document) + } + + override fun onNext(genericResponse: GenericResponse?) { + mvpView!!.showProgressbar(false) + mvpView!!.showSignatureUploadedSuccessfully(genericResponse) + } + })) + } + + private fun getRequestFileBody(file: File?): MultipartBody.Part { + // create RequestBody instance from file + val requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file) + + // MultipartBody.Part is used to send also the actual file name + return MultipartBody.Part.createFormData("file", file!!.name, requestFile) + } + + init { + mSubscriptions = CompositeSubscription() + } +} \ No newline at end of file