From c5e4f0756cba974d227400a4a4fd6f1e19006f51 Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Sat, 27 Aug 2016 01:48:35 +0200 Subject: [PATCH] Added bugreporting and refined the backlog load UI --- app/build.gradle | 3 ++ app/proguard-rules.pro | 25 ++++++++++----- .../quasseldroid_ng/QuasselDroidNG.java | 26 +++++++++++++++- .../ui/chat/fragment/ChatFragment.java | 31 ++++++++++--------- app/src/main/res/layout/fragment_chat.xml | 14 +++------ app/src/main/res/values/strings.xml | 1 + 6 files changed, 66 insertions(+), 34 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index fe0ce963f..7547f70f7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -166,6 +166,9 @@ dependencies { compile 'com.android.support:preference-v14:24.0.0' compile 'com.android.support:cardview-v7:24.0.0' + // Crashreports + compile 'ch.acra:acra:4.9.0' + // UI autobinding compile 'com.jakewharton:butterknife:7.0.1' } diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 7c8fadb22..df5f69275 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -18,14 +18,12 @@ -dontobfuscate --dontwarn javax.annotation.** --dontwarn javax.lang.model.** --dontwarn javax.tools.** --dontwarn com.google.j2objc.annotations.** --dontwarn java.lang.ClassValue --dontwarn sun.misc.Unsafe +-dontwarn javax.** +-dontwarn com.google.** +-dontwarn sndroid.** +-dontwarn java.** +-dontwarn sun.** -dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement --dontwarn javax.annotation.processing.ProcessingEnvironment -dontwarn com.nineoldandroids.view.animation.AnimatorProxy -keepclasseswithmembernames class de.kuschku.** { @@ -38,6 +36,11 @@ <fields>; } +-keepclasses class de.kuschku.** { + <methods>; + <fields>; +} + ######################################### ## Bufferknife ## @@ -69,4 +72,10 @@ ######################################### ## RetroLambda ## ######################################### --dontwarn java.lang.invoke.* \ No newline at end of file +-dontwarn java.lang.invoke.* + + +######################################### +## DBFlow ## +######################################### +-keep class * extends com.raizlabs.android.dbflow.config.DatabaseHolder { *; } \ No newline at end of file diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/QuasselDroidNG.java b/app/src/main/java/de/kuschku/quasseldroid_ng/QuasselDroidNG.java index 3cc4a1d3e..75e2e59f8 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/QuasselDroidNG.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/QuasselDroidNG.java @@ -27,10 +27,30 @@ import android.content.Context; import com.raizlabs.android.dbflow.config.FlowConfig; import com.raizlabs.android.dbflow.config.FlowManager; +import org.acra.ACRA; +import org.acra.ReportField; +import org.acra.ReportingInteractionMode; +import org.acra.annotation.ReportsCrashes; + import de.kuschku.libquassel.localtypes.orm.ConnectedDatabase; +@ReportsCrashes( + formUri = "https://reports.kuschku.de/report/2/", + reportType = org.acra.sender.HttpSender.Type.JSON, + httpMethod = org.acra.sender.HttpSender.Method.POST, + customReportContent = { + ReportField.APP_VERSION_CODE, + ReportField.APP_VERSION_NAME, + ReportField.ANDROID_VERSION, + ReportField.PACKAGE_NAME, + ReportField.REPORT_ID, + ReportField.BUILD, + ReportField.STACK_TRACE + }, + mode = ReportingInteractionMode.TOAST, + resToastText = R.string.notification_report_crash +) public class QuasselDroidNG extends Application { - private static Context applicationContext; public static Context context() { @@ -40,7 +60,11 @@ public class QuasselDroidNG extends Application { @Override public void onCreate() { super.onCreate(); + + ACRA.init(this); + applicationContext = getApplicationContext(); + FlowManager.init(new FlowConfig.Builder(this).build()); FlowManager.getDatabase(ConnectedDatabase.class).getWritableDatabase(); } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/fragment/ChatFragment.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/fragment/ChatFragment.java index 1bff0eb39..ab349f567 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/fragment/ChatFragment.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/fragment/ChatFragment.java @@ -30,6 +30,7 @@ import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.AbsListView; import com.sothree.slidinguppanel.SlidingUpPanelLayout; @@ -56,13 +57,13 @@ public class ChatFragment extends BoundFragment { */ @Bind(R.id.messages) RecyclerView messages; - @Bind(R.id.swipe_view) - SwipeRefreshLayout swipeView; + @Bind(R.id.sliding_layout) SlidingUpPanelLayout sliderMain; private MessageAdapter messageAdapter; private LinearLayoutManager layoutManager; + private boolean loading = false; @Nullable @Override @@ -79,14 +80,18 @@ public class ChatFragment extends BoundFragment { messageAdapter = new MessageAdapter(getActivity(), context, new AutoScroller(messages)); messages.setAdapter(messageAdapter); - swipeView.setColorSchemeColors(context.themeUtil().res.colorPrimary); - swipeView.setEnabled(false); - swipeView.setOnRefreshListener(() -> { - Client client = context.client(); - assertNotNull(client); - QBacklogManager<? extends QBacklogManager> backlogManager = client.backlogManager(); - assertNotNull(backlogManager); - backlogManager.requestMoreBacklog(client.backlogManager().open(), 20); + messages.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrolled(RecyclerView recyclerView, int dx, int dy) { + if (!loading && !recyclerView.canScrollVertically(-1)) { + Client client = context.client(); + assertNotNull(client); + QBacklogManager<? extends QBacklogManager> backlogManager = client.backlogManager(); + assertNotNull(backlogManager); + backlogManager.requestMoreBacklog(client.backlogManager().open(), 20); + loading = true; + } + } }); return view; @@ -101,11 +106,7 @@ public class ChatFragment extends BoundFragment { int id = backlogManager.open(); ObservableComparableSortedList<Message> messageList = backlogManager.filtered(id); messageAdapter.setMessageList(messageList); - swipeView.setEnabled(id != -1); - // Load markerline - } else { - swipeView.setEnabled(false); } } @@ -127,7 +128,7 @@ public class ChatFragment extends BoundFragment { public void onEventMainThread(BacklogReceivedEvent event) { Client client = context.client(); if (client != null && client.backlogManager().open() == event.bufferId) { - swipeView.setRefreshing(false); + loading = false; } } } diff --git a/app/src/main/res/layout/fragment_chat.xml b/app/src/main/res/layout/fragment_chat.xml index b7053461b..100626338 100644 --- a/app/src/main/res/layout/fragment_chat.xml +++ b/app/src/main/res/layout/fragment_chat.xml @@ -34,17 +34,11 @@ app:umanoShadowHeight="4dp" tools:showIn="@layout/activity_chat"> - <de.kuschku.quasseldroid_ng.ui.chat.util.ScrollRefreshLayout - android:id="@+id/swipe_view" + <android.support.v7.widget.RecyclerView + android:id="@+id/messages" android:layout_width="match_parent" - android:layout_height="match_parent"> - - <android.support.v7.widget.RecyclerView - android:id="@+id/messages" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:clickable="true" /> - </de.kuschku.quasseldroid_ng.ui.chat.util.ScrollRefreshLayout> + android:layout_height="match_parent" + android:clickable="true" /> <include layout="@layout/widget_slider" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ae9ebc859..d94f0e3a0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -80,4 +80,5 @@ <string name="statusConnected">Connected</string> <string name="statusWelcome">Welcome!</string> <string name="statusDisconnected">Connection lost</string> + <string name="notification_report_crash">Reporting Crashes</string> </resources> -- GitLab