Skip to content
Snippets Groups Projects
Commit e1c088be authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Fixed several issues regarding account login

parent bc52c5a8
Branches
Tags
No related merge requests found
...@@ -26,10 +26,13 @@ import android.support.annotation.IntRange; ...@@ -26,10 +26,13 @@ import android.support.annotation.IntRange;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction; import android.support.v4.app.FragmentTransaction;
import android.support.v7.widget.AppCompatEditText;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import android.widget.Toast;
import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.MaterialDialog;
import com.mikepenz.materialdrawer.AccountHeader; import com.mikepenz.materialdrawer.AccountHeader;
...@@ -46,6 +49,7 @@ import butterknife.ButterKnife; ...@@ -46,6 +49,7 @@ import butterknife.ButterKnife;
import de.kuschku.libquassel.client.Client; import de.kuschku.libquassel.client.Client;
import de.kuschku.libquassel.events.ConnectionChangeEvent; import de.kuschku.libquassel.events.ConnectionChangeEvent;
import de.kuschku.libquassel.events.GeneralErrorEvent; import de.kuschku.libquassel.events.GeneralErrorEvent;
import de.kuschku.libquassel.events.LoginRequireEvent;
import de.kuschku.libquassel.localtypes.BacklogFilter; import de.kuschku.libquassel.localtypes.BacklogFilter;
import de.kuschku.libquassel.message.Message; import de.kuschku.libquassel.message.Message;
import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewConfig; import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewConfig;
...@@ -61,6 +65,7 @@ import de.kuschku.quasseldroid_ng.ui.chat.util.ActivityImplFactory; ...@@ -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.ILayoutHelper;
import de.kuschku.quasseldroid_ng.ui.chat.util.Status; import de.kuschku.quasseldroid_ng.ui.chat.util.Status;
import de.kuschku.quasseldroid_ng.util.BoundActivity; import de.kuschku.quasseldroid_ng.util.BoundActivity;
import de.kuschku.quasseldroid_ng.util.accounts.Account;
import de.kuschku.quasseldroid_ng.util.accounts.AccountManager; import de.kuschku.quasseldroid_ng.util.accounts.AccountManager;
import static de.kuschku.util.AndroidAssert.assertNotNull; import static de.kuschku.util.AndroidAssert.assertNotNull;
...@@ -205,11 +210,13 @@ public class MainActivity extends BoundActivity { ...@@ -205,11 +210,13 @@ public class MainActivity extends BoundActivity {
if (status == ConnectionChangeEvent.Status.CONNECTED) { if (status == ConnectionChangeEvent.Status.CONNECTED) {
replaceFragment(new ChatFragment()); replaceFragment(new ChatFragment());
updateBufferViewConfigs(); updateBufferViewConfigs();
} else if (status == ConnectionChangeEvent.Status.DISCONNECTED) {
finish();
} }
} }
public void onEventMainThread(GeneralErrorEvent event) { 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) { private void selectBufferViewConfig(@IntRange(from = -1) int bufferViewConfigId) {
...@@ -316,4 +323,28 @@ public class MainActivity extends BoundActivity { ...@@ -316,4 +323,28 @@ public class MainActivity extends BoundActivity {
.show(); .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();
}
}
} }
...@@ -80,7 +80,7 @@ public class MessageAdapter extends RecyclerView.Adapter<MessageViewHolder> { ...@@ -80,7 +80,7 @@ public class MessageAdapter extends RecyclerView.Adapter<MessageViewHolder> {
@Override @Override
public void onBindViewHolder(@NonNull MessageViewHolder holder, int position) { public void onBindViewHolder(@NonNull MessageViewHolder holder, int position) {
Message msg = messageList.get(position); Message msg = getItem(position);
assertNotNull(msg); assertNotNull(msg);
renderer.onBind(holder, msg); renderer.onBind(holder, msg);
...@@ -90,4 +90,8 @@ public class MessageAdapter extends RecyclerView.Adapter<MessageViewHolder> { ...@@ -90,4 +90,8 @@ public class MessageAdapter extends RecyclerView.Adapter<MessageViewHolder> {
public int getItemCount() { public int getItemCount() {
return messageList.size(); return messageList.size();
} }
public Message getItem(int position) {
return messageList.get(position);
}
} }
...@@ -27,6 +27,7 @@ import android.support.v4.widget.SwipeRefreshLayout; ...@@ -27,6 +27,7 @@ import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
...@@ -59,7 +60,9 @@ public class ChatFragment extends BoundFragment { ...@@ -59,7 +60,9 @@ public class ChatFragment extends BoundFragment {
SwipeRefreshLayout swipeView; SwipeRefreshLayout swipeView;
@Bind(R.id.sliding_layout) @Bind(R.id.sliding_layout)
SlidingUpPanelLayout sliderMain; SlidingUpPanelLayout sliderMain;
private MessageAdapter messageAdapter; private MessageAdapter messageAdapter;
private LinearLayoutManager layoutManager;
@Nullable @Nullable
@Override @Override
...@@ -71,7 +74,8 @@ public class ChatFragment extends BoundFragment { ...@@ -71,7 +74,8 @@ public class ChatFragment extends BoundFragment {
assertNotNull(messages); assertNotNull(messages);
messages.setItemAnimator(new DefaultItemAnimator()); 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)); messageAdapter = new MessageAdapter(getActivity(), context, new AutoScroller(messages));
messages.setAdapter(messageAdapter); messages.setAdapter(messageAdapter);
...@@ -89,6 +93,8 @@ public class ChatFragment extends BoundFragment { ...@@ -89,6 +93,8 @@ public class ChatFragment extends BoundFragment {
} }
public void onEventMainThread(BufferChangeEvent event) { public void onEventMainThread(BufferChangeEvent event) {
setMarkerline();
Client client = context.client(); Client client = context.client();
if (client != null) { if (client != null) {
QBacklogManager<? extends QBacklogManager> backlogManager = client.backlogManager(); QBacklogManager<? extends QBacklogManager> backlogManager = client.backlogManager();
...@@ -96,11 +102,43 @@ public class ChatFragment extends BoundFragment { ...@@ -96,11 +102,43 @@ public class ChatFragment extends BoundFragment {
ObservableComparableSortedList<Message> messageList = backlogManager.filtered(id); ObservableComparableSortedList<Message> messageList = backlogManager.filtered(id);
messageAdapter.setMessageList(messageList); messageAdapter.setMessageList(messageList);
swipeView.setEnabled(id != -1); 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 { } else {
swipeView.setEnabled(false); 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) { public void onEventMainThread(BacklogReceivedEvent event) {
Client client = context.client(); Client client = context.client();
if (client != null && client.backlogManager().open() == event.bufferId) { if (client != null && client.backlogManager().open() == event.bufferId) {
......
...@@ -48,4 +48,16 @@ public class Account { ...@@ -48,4 +48,16 @@ public class Account {
public ServerAddress toAddress() { public ServerAddress toAddress() {
return new ServerAddress(host, port); 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);
}
} }
...@@ -41,6 +41,10 @@ public class AccountManager { ...@@ -41,6 +41,10 @@ public class AccountManager {
helper.addAccount(account); helper.addAccount(account);
} }
public void update(Account account) {
helper.updateAccount(account);
}
public void remove(String id) { public void remove(String id) {
remove(UUID.fromString(id)); remove(UUID.fromString(id));
} }
......
...@@ -29,9 +29,7 @@ import android.database.sqlite.SQLiteStatement; ...@@ -29,9 +29,7 @@ import android.database.sqlite.SQLiteStatement;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.util.Log; import android.util.Log;
import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
...@@ -104,6 +102,11 @@ public class AccountManagerHelper extends SQLiteOpenHelper { ...@@ -104,6 +102,11 @@ public class AccountManagerHelper extends SQLiteOpenHelper {
return statement.executeInsert() != -1; return statement.executeInsert() != -1;
} }
public boolean updateAccount(Account account) {
removeAccount(account.id);
return addAccount(account);
}
public boolean removeAccount(UUID id) { public boolean removeAccount(UUID id) {
return removeAccount(id.toString()); return removeAccount(id.toString());
} }
......
...@@ -41,10 +41,10 @@ ...@@ -41,10 +41,10 @@
android:paddingTop="@dimen/material_drawer_item_profile_icon_padding"> android:paddingTop="@dimen/material_drawer_item_profile_icon_padding">
<android.support.v7.widget.AppCompatRadioButton <android.support.v7.widget.AppCompatRadioButton
android:id="@+id/account_select"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical" />
android:id="@+id/account_select" />
</LinearLayout> </LinearLayout>
...@@ -83,4 +83,11 @@ ...@@ -83,4 +83,11 @@
android:textSize="@dimen/material_drawer_item_profile_description" android:textSize="@dimen/material_drawer_item_profile_description"
tools:text="kuschku on kuschku.de" /> tools:text="kuschku on kuschku.de" />
</LinearLayout> </LinearLayout>
<!--
<ImageButton
android:layout_width="48dp"
android:layout_height="48dp"
android:src=""/>
-->
</LinearLayout> </LinearLayout>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment