From e1c088be78cab51e16fe792b36455ff345550c6c Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Sun, 14 Feb 2016 20:42:32 +0100 Subject: [PATCH] Fixed several issues regarding account login --- .../quasseldroid_ng/ui/chat/MainActivity.java | 33 ++++++++++++++- .../ui/chat/chatview/MessageAdapter.java | 6 ++- .../ui/chat/fragment/ChatFragment.java | 40 ++++++++++++++++++- .../util/accounts/Account.java | 12 ++++++ .../util/accounts/AccountManager.java | 4 ++ .../util/accounts/AccountManagerHelper.java | 7 +++- .../main/res/layout/widget_core_account.xml | 11 ++++- 7 files changed, 106 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java index b60656591..a7fa4797f 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java @@ -26,10 +26,13 @@ import android.support.annotation.IntRange; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; +import android.support.v7.widget.AppCompatEditText; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; +import android.view.View; import android.widget.FrameLayout; +import android.widget.Toast; import com.afollestad.materialdialogs.MaterialDialog; import com.mikepenz.materialdrawer.AccountHeader; @@ -46,6 +49,7 @@ import butterknife.ButterKnife; import de.kuschku.libquassel.client.Client; import de.kuschku.libquassel.events.ConnectionChangeEvent; import de.kuschku.libquassel.events.GeneralErrorEvent; +import de.kuschku.libquassel.events.LoginRequireEvent; import de.kuschku.libquassel.localtypes.BacklogFilter; import de.kuschku.libquassel.message.Message; import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewConfig; @@ -61,6 +65,7 @@ import de.kuschku.quasseldroid_ng.ui.chat.util.ActivityImplFactory; import de.kuschku.quasseldroid_ng.ui.chat.util.ILayoutHelper; import de.kuschku.quasseldroid_ng.ui.chat.util.Status; import de.kuschku.quasseldroid_ng.util.BoundActivity; +import de.kuschku.quasseldroid_ng.util.accounts.Account; import de.kuschku.quasseldroid_ng.util.accounts.AccountManager; import static de.kuschku.util.AndroidAssert.assertNotNull; @@ -205,11 +210,13 @@ public class MainActivity extends BoundActivity { if (status == ConnectionChangeEvent.Status.CONNECTED) { replaceFragment(new ChatFragment()); updateBufferViewConfigs(); + } else if (status == ConnectionChangeEvent.Status.DISCONNECTED) { + finish(); } } public void onEventMainThread(GeneralErrorEvent event) { - + Toast.makeText(this, event.exception.getClass().getSimpleName() + ": " + event.debugInfo, Toast.LENGTH_LONG).show(); } private void selectBufferViewConfig(@IntRange(from = -1) int bufferViewConfigId) { @@ -316,4 +323,28 @@ public class MainActivity extends BoundActivity { .show(); } } + + public void onEventMainThread(LoginRequireEvent event) { + if (event.failedLast) { + new MaterialDialog.Builder(this) + .title(R.string.labelLogin) + .customView(R.layout.dialog_login, false) + .onPositive((dialog1, which) -> { + View parent = dialog1.getCustomView(); + assertNotNull(parent); + AppCompatEditText usernameField = (AppCompatEditText) parent.findViewById(R.id.username); + AppCompatEditText passwordField = (AppCompatEditText) parent.findViewById(R.id.password); + String username = usernameField.getText().toString(); + String password = passwordField.getText().toString(); + + Account account = manager.account(context.settings().lastAccount.get()); + manager.update(account.withLoginData(username, password)); + }) + .cancelListener(dialog1 -> finish()) + .negativeColor(context.themeUtil().res.colorForeground) + .positiveText(R.string.labelLogin) + .negativeText(R.string.labelCancel) + .build().show(); + } + } } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/MessageAdapter.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/MessageAdapter.java index 5aebb0f42..fd7ecb4b8 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/MessageAdapter.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/MessageAdapter.java @@ -80,7 +80,7 @@ public class MessageAdapter extends RecyclerView.Adapter<MessageViewHolder> { @Override public void onBindViewHolder(@NonNull MessageViewHolder holder, int position) { - Message msg = messageList.get(position); + Message msg = getItem(position); assertNotNull(msg); renderer.onBind(holder, msg); @@ -90,4 +90,8 @@ public class MessageAdapter extends RecyclerView.Adapter<MessageViewHolder> { public int getItemCount() { return messageList.size(); } + + public Message getItem(int position) { + return messageList.get(position); + } } 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 da9fbbd63..f51e95b47 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 @@ -27,6 +27,7 @@ import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -59,7 +60,9 @@ public class ChatFragment extends BoundFragment { SwipeRefreshLayout swipeView; @Bind(R.id.sliding_layout) SlidingUpPanelLayout sliderMain; + private MessageAdapter messageAdapter; + private LinearLayoutManager layoutManager; @Nullable @Override @@ -71,7 +74,8 @@ public class ChatFragment extends BoundFragment { assertNotNull(messages); messages.setItemAnimator(new DefaultItemAnimator()); - messages.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, true)); + layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, true); + messages.setLayoutManager(layoutManager); messageAdapter = new MessageAdapter(getActivity(), context, new AutoScroller(messages)); messages.setAdapter(messageAdapter); @@ -89,6 +93,8 @@ public class ChatFragment extends BoundFragment { } public void onEventMainThread(BufferChangeEvent event) { + setMarkerline(); + Client client = context.client(); if (client != null) { QBacklogManager<? extends QBacklogManager> backlogManager = client.backlogManager(); @@ -96,11 +102,43 @@ public class ChatFragment extends BoundFragment { ObservableComparableSortedList<Message> messageList = backlogManager.filtered(id); messageAdapter.setMessageList(messageList); swipeView.setEnabled(id != -1); + + int markerLine = client.bufferSyncer().markerLine(id); + for (int i = 0; i < messageList.size(); i++) { + if (messageList.get(i).messageId == markerLine) { + Log.d("DEBUG", "Load: " + markerLine + ":" + i); + messages.scrollToPosition(i); + break; + } + } } else { swipeView.setEnabled(false); } } + @Override + public void onPause() { + setMarkerline(); + super.onPause(); + } + + private void setMarkerline() { + Client client = context.client(); + if (client == null) return; + + int buffer = client.backlogManager().open(); + if (buffer == -1) return; + + int messageposition = layoutManager.findFirstCompletelyVisibleItemPosition(); + if (messageposition == -1) return; + + Message message = messageAdapter.getItem(messageposition); + if (message == null) return; + + client.bufferSyncer().requestSetMarkerLine(buffer, message.messageId); + Log.d("DEBUG", "Store: " + message.messageId + ":" + messageposition); + } + public void onEventMainThread(BacklogReceivedEvent event) { Client client = context.client(); if (client != null && client.backlogManager().open() == event.bufferId) { diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/Account.java b/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/Account.java index 85601c9b8..2c202b4b5 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/Account.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/Account.java @@ -48,4 +48,16 @@ public class Account { public ServerAddress toAddress() { return new ServerAddress(host, port); } + + public Account withLoginData(String user, String pass) { + return new Account(id, name, host, port, user, pass); + } + + public Account withServerData(String host, int port) { + return new Account(id, name, host, port, user, pass); + } + + public Account withName(String name) { + return new Account(id, name, host, port, user, pass); + } } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/AccountManager.java b/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/AccountManager.java index 127359db6..0c1bd45d4 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/AccountManager.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/AccountManager.java @@ -41,6 +41,10 @@ public class AccountManager { helper.addAccount(account); } + public void update(Account account) { + helper.updateAccount(account); + } + public void remove(String id) { remove(UUID.fromString(id)); } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/AccountManagerHelper.java b/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/AccountManagerHelper.java index 6ffc8f7b5..f2581ae28 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/AccountManagerHelper.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/AccountManagerHelper.java @@ -29,9 +29,7 @@ import android.database.sqlite.SQLiteStatement; import android.support.annotation.NonNull; import android.util.Log; -import java.util.ArrayList; import java.util.HashSet; -import java.util.List; import java.util.Set; import java.util.UUID; @@ -104,6 +102,11 @@ public class AccountManagerHelper extends SQLiteOpenHelper { return statement.executeInsert() != -1; } + public boolean updateAccount(Account account) { + removeAccount(account.id); + return addAccount(account); + } + public boolean removeAccount(UUID id) { return removeAccount(id.toString()); } diff --git a/app/src/main/res/layout/widget_core_account.xml b/app/src/main/res/layout/widget_core_account.xml index 1705a7400..b9d3a5d60 100644 --- a/app/src/main/res/layout/widget_core_account.xml +++ b/app/src/main/res/layout/widget_core_account.xml @@ -41,10 +41,10 @@ android:paddingTop="@dimen/material_drawer_item_profile_icon_padding"> <android.support.v7.widget.AppCompatRadioButton + android:id="@+id/account_select" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_gravity="center_vertical" - android:id="@+id/account_select" /> + android:layout_gravity="center_vertical" /> </LinearLayout> @@ -83,4 +83,11 @@ android:textSize="@dimen/material_drawer_item_profile_description" tools:text="kuschku on kuschku.de" /> </LinearLayout> + + <!-- + <ImageButton + android:layout_width="48dp" + android:layout_height="48dp" + android:src=""/> + --> </LinearLayout> -- GitLab