diff --git a/mobile/src/main/java/org/openhab/habdroid/model/Recognition.java b/mobile/src/main/java/org/openhab/habdroid/model/Recognition.java index 615318f405b2d9d07bbbb9d7f3fffaced40c3fe7..f833f8d08b7e0ee66aca1720485f965211cc418e 100644 --- a/mobile/src/main/java/org/openhab/habdroid/model/Recognition.java +++ b/mobile/src/main/java/org/openhab/habdroid/model/Recognition.java @@ -1,5 +1,7 @@ package org.openhab.habdroid.model; +import android.util.Log; + import java.util.List; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/RecognitionsActivity.java b/mobile/src/main/java/org/openhab/habdroid/ui/RecognitionsActivity.java index 737100d71333aa48c78bcf49b2be25c50639396d..8f039c62c42d224dc7c7133e4ee1aaed29d20556 100644 --- a/mobile/src/main/java/org/openhab/habdroid/ui/RecognitionsActivity.java +++ b/mobile/src/main/java/org/openhab/habdroid/ui/RecognitionsActivity.java @@ -1,6 +1,7 @@ package org.openhab.habdroid.ui; import android.app.ProgressDialog; +import android.os.Build; import android.os.Bundle; import android.util.Log; import android.view.MenuItem; @@ -20,6 +21,7 @@ import org.openhab.habdroid.util.RetrofitClientInstance; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Comparator; import java.util.Date; import java.util.List; import java.util.Locale; @@ -34,6 +36,7 @@ import androidx.appcompat.widget.Toolbar; import androidx.fragment.app.FragmentManager; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import android.widget.TextView; import android.widget.Toast; @@ -43,10 +46,11 @@ import android.widget.Toast; * By Muhammad Ibrahim Rahman */ -public class RecognitionsActivity extends AppCompatActivity implements WidgetAdapter.ItemClickListener{ +public class RecognitionsActivity extends AppCompatActivity implements WidgetAdapter.ItemClickListener { private RecognitionsAdapter mPastRecognitionsAdapter; private RecyclerView mRvPastRecognitions; + private SwipeRefreshLayout mSwipeRefreshLayout; ProgressDialog progressDialog; @@ -60,6 +64,8 @@ public class RecognitionsActivity extends AppCompatActivity implements WidgetAda Toolbar toolbar = findViewById(R.id.openhab_toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); + mSwipeRefreshLayout = findViewById(R.id.swipeRefresh_recognitions); + mSwipeRefreshLayout.setOnRefreshListener(() -> getRESTData()); if (savedInstanceState == null) { getRESTData(); @@ -72,7 +78,7 @@ public class RecognitionsActivity extends AppCompatActivity implements WidgetAda private void getRESTData() { progressDialog = new ProgressDialog(RecognitionsActivity.this); progressDialog.setMessage("Loading"); - progressDialog.show(); + if (!mSwipeRefreshLayout.isRefreshing()) progressDialog.show(); // Interface for the RetrofitInstance try { @@ -85,13 +91,18 @@ public class RecognitionsActivity extends AppCompatActivity implements WidgetAda progressDialog.dismiss(); //generateDataList(response.body()); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + response.body().sort((o1, o2) -> o2.getTimestamp() - o1.getTimestamp()); + } generateCurrentActivity(response.body().get(0)); generatePastActivities(response.body().subList(1, response.body().size())); + mSwipeRefreshLayout.setRefreshing(false); } @Override public void onFailure(Call<List<Recognition>> call, Throwable t) { progressDialog.dismiss(); + mSwipeRefreshLayout.setRefreshing(false); Toast.makeText(RecognitionsActivity.this, "Error loading Recognition. Please check your network connection.", Toast.LENGTH_SHORT).show(); } }); @@ -101,7 +112,6 @@ public class RecognitionsActivity extends AppCompatActivity implements WidgetAda } - } private void generateCurrentActivity(Recognition recognition) { @@ -110,7 +120,7 @@ public class RecognitionsActivity extends AppCompatActivity implements WidgetAda RecyclerView mCurrentActivityChangedItems = findViewById(R.id.rv_recognition_current_items); mCurrentActivityTitle.setText(recognition.getDescription().toString()); DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT, Locale.US); - mCurrentActivityTime.setText(dateFormat.format(new Date(recognition.getTimestamp()))); + mCurrentActivityTime.setText(dateFormat.format(new Date(((long) recognition.getTimestamp()) * 1000))); ArrayList<Widget> widgets = getIntent().getParcelableArrayListExtra("widgets"); ArrayList<Widget> activityWidgets = new ArrayList<>(); for (ChangedItem ci : recognition.getChangedItems()) { diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/RecognitionsAdapter.java b/mobile/src/main/java/org/openhab/habdroid/ui/RecognitionsAdapter.java index 6d379db96ef8c0f9064cbbd54349a0a73fb43cd4..857312bb73b7f6e445f6bc1d196ed03423bd8424 100644 --- a/mobile/src/main/java/org/openhab/habdroid/ui/RecognitionsAdapter.java +++ b/mobile/src/main/java/org/openhab/habdroid/ui/RecognitionsAdapter.java @@ -61,7 +61,7 @@ public class RecognitionsAdapter extends RecyclerView.Adapter<RecognitionsAdapte public void onBindViewHolder(CustomViewHolder holder, int position) { Recognition item = mRecognitions.get(position); DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT, Locale.US); - holder.recognitionTime.setText(dateFormat.format(new Date(item.getTimestamp()))); + holder.recognitionTime.setText(dateFormat.format(new Date(((long)item.getTimestamp())*1000))); holder.recognitionTitle.setText(item.getDescription().toString()); } diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/WidgetAdapter.java b/mobile/src/main/java/org/openhab/habdroid/ui/WidgetAdapter.java index cc07a3a417474b5cb646355b341c244deb6753b6..ad937674371b2e12ad91ac8e412f766366a2de05 100644 --- a/mobile/src/main/java/org/openhab/habdroid/ui/WidgetAdapter.java +++ b/mobile/src/main/java/org/openhab/habdroid/ui/WidgetAdapter.java @@ -1001,11 +1001,11 @@ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder private static void showSnackbar(View v, int delay) { mSnackbarHandler.removeCallbacksAndMessages(null); final View currentView = v.getRootView(); + Snackbar snackbar = Snackbar.make(currentView, "Manuelle Änderung als neuen Standardwert setzen?", Snackbar.LENGTH_LONG); + snackbar.setAction("Setze als\nStandard", v1 -> { + Toast.makeText(currentView.getContext(), "Änderung wurde als neuer Standardwert gesetzt!", Toast.LENGTH_SHORT).show(); + }); mSnackbarHandler.postDelayed(() -> { - Snackbar snackbar = Snackbar.make(currentView, "Manuelle Änderung als neuen Standardwert setzen?", Snackbar.LENGTH_LONG); - snackbar.setAction("Setze als\nStandard", v1 -> { - Toast.makeText(currentView.getContext(), "Änderung wurde als neuer Standardwert gesetzt!", Toast.LENGTH_SHORT).show(); - }); snackbar.show(); }, delay); diff --git a/mobile/src/main/res/layout/activity_recognitions.xml b/mobile/src/main/res/layout/activity_recognitions.xml index 38d89c20efedc78a39618b0e08dd70559a35422c..5f29c8239e39f14cb53c870ca13cf6bffc5bf319 100644 --- a/mobile/src/main/res/layout/activity_recognitions.xml +++ b/mobile/src/main/res/layout/activity_recognitions.xml @@ -13,64 +13,75 @@ app:popupTheme="@style/ThemeOverlay.AppCompat.Light" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" /> - <com.google.android.material.card.MaterialCardView - android:id="@+id/card_recognition_current" - style="@style/Widget.MaterialComponents.CardView" + <androidx.swiperefreshlayout.widget.SwipeRefreshLayout + android:id="@+id/swipeRefresh_recognitions" android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginLeft="@dimen/mtrl_card_spacing" - android:layout_marginTop="@dimen/mtrl_card_spacing" - android:layout_marginRight="@dimen/mtrl_card_spacing"> + android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="vertical" - android:padding="16dp"> + android:layout_height="match_parent" + android:orientation="vertical"> - <TextView + <com.google.android.material.card.MaterialCardView + android:id="@+id/card_recognition_current" + style="@style/Widget.MaterialComponents.CardView" android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="Current Activity" - android:textAllCaps="true" - android:textColor="@color/black" - android:textSize="10dp" /> + android:layout_marginLeft="@dimen/mtrl_card_spacing" + android:layout_marginTop="@dimen/mtrl_card_spacing" + android:layout_marginRight="@dimen/mtrl_card_spacing"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + android:padding="16dp"> + + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="Current Activity" + android:textAllCaps="true" + android:textColor="@color/black" + android:textSize="10dp" /> + + <TextView + android:id="@+id/text_recognition_current_title" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:textColor="@color/black" + android:textSize="24sp" /> + + <TextView + android:id="@+id/text_recognition_current_time" + android:layout_width="match_parent" + android:layout_height="wrap_content" /> + + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/rv_recognition_current_items" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_marginTop="16dp" /> + + </LinearLayout> + </com.google.android.material.card.MaterialCardView> <TextView - android:id="@+id/text_recognition_current_title" android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_marginStart="24dp" + android:layout_marginTop="16dp" + android:layout_marginEnd="24dp" + android:text="Past activities" + android:textAllCaps="true" android:textColor="@color/black" - android:textSize="24sp" /> - - <TextView - android:id="@+id/text_recognition_current_time" - android:layout_width="match_parent" - android:layout_height="wrap_content" /> + android:textSize="10dp" /> <androidx.recyclerview.widget.RecyclerView - android:id="@+id/rv_recognition_current_items" + android:id="@+id/rv_past_recognitions" android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_marginTop="16dp" /> - + android:layout_height="match_parent" /> </LinearLayout> - </com.google.android.material.card.MaterialCardView> - - <TextView - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:text="Past activities" - android:textAllCaps="true" - android:textColor="@color/black" - android:layout_marginTop="16dp" - android:layout_marginStart="24dp" - android:layout_marginEnd="24dp" - android:textSize="10dp"/> - - <androidx.recyclerview.widget.RecyclerView - android:id="@+id/rv_past_recognitions" - android:layout_width="match_parent" - android:layout_height="match_parent" /> - + </androidx.swiperefreshlayout.widget.SwipeRefreshLayout> </LinearLayout> \ No newline at end of file