diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b41ddfe..8e8c47a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,7 +13,7 @@ android:supportsRtl="true" android:theme="@style/AppTheme" - tools:ignore="GoogleAppIndexingWarning"> + tools:ignore="AllowBackup,GoogleAppIndexingWarning"> @@ -22,6 +22,16 @@ android:label="@string/title_activity_new_board" android:theme="@style/AppTheme.NoActionBar" /> + + + + + @@ -31,11 +41,6 @@ - - \ No newline at end of file diff --git a/app/src/main/java/it/unisannio/ding/ids/wedroid/app/data/dao/WListDao.java b/app/src/main/java/it/unisannio/ding/ids/wedroid/app/data/dao/WListDao.java index be9e2e4..9fe2653 100644 --- a/app/src/main/java/it/unisannio/ding/ids/wedroid/app/data/dao/WListDao.java +++ b/app/src/main/java/it/unisannio/ding/ids/wedroid/app/data/dao/WListDao.java @@ -19,7 +19,7 @@ public interface WListDao { LiveData> getAllWList(); @Insert(onConflict = OnConflictStrategy.REPLACE) - /**Completable**/ void insert(WList wList); + void insert(WList wList); @Delete void delete(WList wList); diff --git a/app/src/main/java/it/unisannio/ding/ids/wedroid/app/data/repository/WListRepository.kt b/app/src/main/java/it/unisannio/ding/ids/wedroid/app/data/repository/WListRepository.kt index c2f28fe..d704b55 100644 --- a/app/src/main/java/it/unisannio/ding/ids/wedroid/app/data/repository/WListRepository.kt +++ b/app/src/main/java/it/unisannio/ding/ids/wedroid/app/data/repository/WListRepository.kt @@ -1,6 +1,8 @@ package it.unisannio.ding.ids.wedroid.app.data.repository import android.util.Log + +import androidx.lifecycle.LiveData import it.unisannio.ding.ids.wedroid.app.data.dao.WListDao import it.unisannio.ding.ids.wedroid.app.data.entity.WList import it.unisannio.ding.ids.wedroid.app.data.entity.convert @@ -18,8 +20,9 @@ class WListRepository( private val service: ListService, private val reader: PreferenceReader ) { - val allWLists by lazy{ - dao.getAllWList() + + val allWLists: LiveData> by lazy{ + dao.allWList } init { @@ -46,7 +49,7 @@ class WListRepository( }) } - private suspend fun synchronizeCallback( + private fun synchronizeCallback( response: Response>) { if (!response.isSuccessful) { @@ -90,19 +93,21 @@ class WListRepository( } - private suspend fun addNewWListToDb(wLists: Collection) { + private fun addNewWListToDb(wLists: Collection) { wLists.forEach { dao.insert(it) } } - private suspend fun removeOldWListsFromDb(wLists: Collection) { + + private fun removeOldWListsFromDb(wLists: Collection) { allWLists.value?.minus(wLists) ?.forEach { dao.delete(it) } } + @Suppress("NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS") private fun logNetworkError(message: String?) { Log.e("RETROFIT", message) } diff --git a/app/src/main/java/it/unisannio/ding/ids/wedroid/app/util/ServicesFactory.kt b/app/src/main/java/it/unisannio/ding/ids/wedroid/app/util/ServicesFactory.kt index 5e3d8dd..2001c80 100644 --- a/app/src/main/java/it/unisannio/ding/ids/wedroid/app/util/ServicesFactory.kt +++ b/app/src/main/java/it/unisannio/ding/ids/wedroid/app/util/ServicesFactory.kt @@ -1,17 +1,10 @@ package it.unisannio.ding.ids.wedroid.app.util -import it.unisannio.ding.ids.wedroid.wrapper.api.BoardService -import it.unisannio.ding.ids.wedroid.wrapper.api.CardCommentService -import it.unisannio.ding.ids.wedroid.wrapper.api.CardService -import it.unisannio.ding.ids.wedroid.wrapper.api.ChecklistService -import it.unisannio.ding.ids.wedroid.wrapper.api.ListService -import it.unisannio.ding.ids.wedroid.wrapper.api.SwimlanesService -import it.unisannio.ding.ids.wedroid.wrapper.api.UserService +import it.unisannio.ding.ids.wedroid.wrapper.api.* import okhttp3.OkHttpClient import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory - class ServicesFactory( reader: PreferenceReader ) { diff --git a/app/src/main/java/it/unisannio/ding/ids/wedroid/app/util/SharedPreferenceHelper.kt b/app/src/main/java/it/unisannio/ding/ids/wedroid/app/util/SharedPreferenceHelper.kt index 41907b7..796625c 100644 --- a/app/src/main/java/it/unisannio/ding/ids/wedroid/app/util/SharedPreferenceHelper.kt +++ b/app/src/main/java/it/unisannio/ding/ids/wedroid/app/util/SharedPreferenceHelper.kt @@ -2,8 +2,7 @@ package it.unisannio.ding.ids.wedroid.app.util import android.content.Context -class SharedPreferenceHelper(context: Context) : PreferenceReader, PreferenceWriter { - +class SharedPreferenceHelper(context : Context) : PreferenceReader, PreferenceWriter { private val sp = context.getSharedPreferences("userinfo", Context.MODE_PRIVATE) override fun getBaseUrl(): String? { @@ -21,7 +20,8 @@ class SharedPreferenceHelper(context: Context) : PreferenceReader, PreferenceWri override fun setBaseUrl(baseUrl: String?) { val editor = sp.edit() editor.putString("url", baseUrl).apply() - } + + } override fun setUserId(userId: String?) { val editor = sp.edit() @@ -42,4 +42,3 @@ class SharedPreferenceHelper(context: Context) : PreferenceReader, PreferenceWri editor.putString("boardId", token).apply() } } - diff --git a/app/src/main/java/it/unisannio/ding/ids/wedroid/app/view/BoardViewActivity.java b/app/src/main/java/it/unisannio/ding/ids/wedroid/app/view/BoardViewActivity.java index ead9d77..0d2f5b5 100644 --- a/app/src/main/java/it/unisannio/ding/ids/wedroid/app/view/BoardViewActivity.java +++ b/app/src/main/java/it/unisannio/ding/ids/wedroid/app/view/BoardViewActivity.java @@ -14,7 +14,7 @@ import android.widget.Toast; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; - +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -43,6 +43,7 @@ public class BoardViewActivity extends AppCompatActivity { private ServicesFactory service; private Toolbar myToolbar; private Board board; + private SwipeRefreshLayout swipeRefreshLayout; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -51,6 +52,9 @@ public class BoardViewActivity extends AppCompatActivity { myToolbar = findViewById(R.id.my_toolbar); setSupportActionBar(myToolbar); + swipeRefreshLayout = findViewById(R.id.pullToRefresh); + swipeRefreshLayout.setRefreshing(false); + Intent i = getIntent(); idBoard= i.getStringExtra("idBoard"); @@ -80,6 +84,14 @@ public class BoardViewActivity extends AppCompatActivity { startActivityForResult(i, WLISTS_REQUEST); } }); + + swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { + @Override + public void onRefresh() { + initializeUI(idBoard); + swipeRefreshLayout.setRefreshing(false); + } + }); } private void initializeUI(String idBoard) { @@ -87,47 +99,62 @@ public class BoardViewActivity extends AppCompatActivity { service.getBoardService().getBoard(idBoard).enqueue(new Callback() { @Override public void onResponse(@NotNull Call call, @NotNull Response response) { + assert response.body() != null; board = response.body(); + if (board.getId()==null) { + Toast.makeText( + getApplicationContext(), + getApplicationContext().getString(R.string.board_deleted), + Toast.LENGTH_LONG) + .show(); + getListsButton.setEnabled(false); + } else { + Objects.requireNonNull(getSupportActionBar()).setTitle(board.getTitle()); + myToolbar.setBackgroundColor(Color.parseColor(encodeColor( + board.getBackgroundColor().toString()))); - Objects.requireNonNull(getSupportActionBar()).setTitle(board.getTitle()); - myToolbar.setBackgroundColor(Color.parseColor(encodeColor( - board.getBackgroundColor().toString()))); + boardTitle = board.getTitle(); - boardTitle = board.getTitle(); + boardColor = Color.parseColor(encodeColor( + board.getBackgroundColor().toString())); - boardColor= Color.parseColor(encodeColor( - board.getBackgroundColor().toString())); + Drawable background = getListsButton.getBackground(); + background.setTint(boardColor); + getListsButton.setBackgroundDrawable(background); - Drawable background = getListsButton.getBackground(); - background.setTint(boardColor); - getListsButton.setBackgroundDrawable(background); + description.setText(board.getDescription()); + permission.setText(board.getPermission().toString()); + members.setText(""); + for (int i = 0; i < board.getMembers().size(); i++) { + replaceIDUserToUsername(board.getMembers().get(i).getUserId()); + } - description.setText(board.getDescription()); - permission.setText(board.getPermission().toString()); - members.setText(""); - for(int i =0; i labelsTitle = new ArrayList<>(); + for (int i = 0; i < board.getLabels().size(); i++) { + labelsTitle.add(board.getLabels().get(i).getName()); + } + ArrayAdapter adapter = new ArrayAdapter<>(getApplicationContext(), + android.R.layout.simple_list_item_1, labelsTitle); + listView.setAdapter(adapter); } - creationDate.append("\n" + board.getCreatedAt()); - lastModificationDate.append("\n" + board.getModifiedAt()); - - divider1.setBackgroundColor(boardColor); - divider2.setBackgroundColor(boardColor); - divider3.setBackgroundColor(boardColor); - - ArrayList labelsTitle = new ArrayList<>(); - for (int i=0; i call, @NotNull Throwable t){ + Toast.makeText(getApplicationContext(), + getApplicationContext().getString(R.string.board_deleted), + Toast.LENGTH_LONG).show(); } - ArrayAdapter adapter = new ArrayAdapter<>(getApplicationContext(), - android.R.layout.simple_list_item_1, labelsTitle); - listView.setAdapter(adapter); - } - - @Override - public void onFailure(@NotNull Call call, @NotNull Throwable t) { - //TODO - } }); } diff --git a/app/src/main/java/it/unisannio/ding/ids/wedroid/app/view/WListsListActivity.java b/app/src/main/java/it/unisannio/ding/ids/wedroid/app/view/WListsListActivity.java index 83a13b1..fe836ce 100644 --- a/app/src/main/java/it/unisannio/ding/ids/wedroid/app/view/WListsListActivity.java +++ b/app/src/main/java/it/unisannio/ding/ids/wedroid/app/view/WListsListActivity.java @@ -22,10 +22,11 @@ import java.util.List; import java.util.Objects; import it.unisannio.ding.ids.wedroid.app.R; + +import it.unisannio.ding.ids.wedroid.app.viewmodel.WListsListViewModel; import it.unisannio.ding.ids.wedroid.app.data.entity.WList; import it.unisannio.ding.ids.wedroid.app.util.SharedPreferenceHelper; import it.unisannio.ding.ids.wedroid.app.view.adapter.WListsAdapter; -import it.unisannio.ding.ids.wedroid.app.viewModel.WListsListViewModel; public class WListsListActivity extends AppCompatActivity { diff --git a/app/src/main/java/it/unisannio/ding/ids/wedroid/app/view/adapter/BoardsListAdapter.kt b/app/src/main/java/it/unisannio/ding/ids/wedroid/app/view/adapter/BoardsListAdapter.kt index 8d66b87..a92fc66 100644 --- a/app/src/main/java/it/unisannio/ding/ids/wedroid/app/view/adapter/BoardsListAdapter.kt +++ b/app/src/main/java/it/unisannio/ding/ids/wedroid/app/view/adapter/BoardsListAdapter.kt @@ -38,9 +38,11 @@ class BoardsListAdapter internal constructor( holder.boardTitle.text = board.title holder.itemView.setOnClickListener { - val intent = Intent(it.context, BoardViewActivity::class.java) + + val intent = Intent(holder.itemView.context, BoardViewActivity::class.java) intent.putExtra("idBoard", board.id) - it.context.startActivity(intent) + holder.itemView.context.startActivity(intent) + } } diff --git a/app/src/main/java/it/unisannio/ding/ids/wedroid/app/viewmodel/WListsListViewModel.java b/app/src/main/java/it/unisannio/ding/ids/wedroid/app/viewmodel/WListsListViewModel.java new file mode 100644 index 0000000..e5281a5 --- /dev/null +++ b/app/src/main/java/it/unisannio/ding/ids/wedroid/app/viewmodel/WListsListViewModel.java @@ -0,0 +1,47 @@ +package it.unisannio.ding.ids.wedroid.app.viewmodel; + +import android.app.Application; + +import androidx.annotation.NonNull; +import androidx.lifecycle.AndroidViewModel; +import androidx.lifecycle.LiveData; + +import java.util.List; + +import it.unisannio.ding.ids.wedroid.app.data.database.WListDatabase; +import it.unisannio.ding.ids.wedroid.app.data.entity.WList; +import it.unisannio.ding.ids.wedroid.app.data.repository.WListRepository; +import it.unisannio.ding.ids.wedroid.app.util.PreferenceReader; +import it.unisannio.ding.ids.wedroid.app.util.ServicesFactory; +import it.unisannio.ding.ids.wedroid.app.util.SharedPreferenceHelper; + + +public class WListsListViewModel extends AndroidViewModel { + private WListRepository wListRepository; + private LiveData> allWLists; + + public WListsListViewModel(@NonNull Application application) { + super(application); + PreferenceReader reader = new SharedPreferenceHelper(application); + wListRepository = new WListRepository( + WListDatabase.getDatabase(application).wListDao(), + ServicesFactory.Companion.getInstance(reader).getListService(), + reader); + allWLists = wListRepository.getAllWLists(); + } + + public LiveData> getAllWLists(){ + return allWLists; + } + + public void deleteWList(int position, String idBoard) { + List wList = allWLists.getValue(); + + if (wList != null) + wListRepository.deleteWList(idBoard, wList.get(position).getId()); + } + + public void refresh() { + wListRepository.synchronize(); + } +} diff --git a/app/src/main/res/layout/activity_board_view.xml b/app/src/main/res/layout/activity_board_view.xml index 60678e1..04c8d00 100644 --- a/app/src/main/res/layout/activity_board_view.xml +++ b/app/src/main/res/layout/activity_board_view.xml @@ -1,198 +1,212 @@ - - - + + + + - + + + android:orientation="vertical"> - + + + + + + + + + + + + + + + + + + + + + + + + + + + android:layout_height="match_parent"> - + - + - - - - - - - - - - - - - - - + + - - - - - - - - - - - - \ No newline at end of file + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 57620b6..935d24e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -21,6 +21,7 @@ There was a problem with the name of the new board It was not possible to add a new board Name cannot be empty + The selected board has been deleted Belize