From e76913145236b50c847bada60ff2e3b55fca8f42 Mon Sep 17 00:00:00 2001 From: dkanada Date: Sat, 17 Apr 2021 15:36:04 +0900 Subject: [PATCH] add select activity for multiserver authentication --- app/src/main/AndroidManifest.xml | 4 + .../gramophone/activities/LoginActivity.java | 6 ++ .../gramophone/activities/SelectActivity.java | 72 +++++++++++++++ .../gramophone/adapter/SelectAdapter.java | 88 +++++++++++++++++++ app/src/main/res/drawable/card_server.xml | 5 ++ app/src/main/res/layout/activity_login.xml | 23 ++++- app/src/main/res/layout/activity_select.xml | 46 ++++++++++ app/src/main/res/layout/card_server.xml | 58 ++++++++++++ app/src/main/res/values/strings.xml | 2 + 9 files changed, 300 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/com/dkanada/gramophone/activities/SelectActivity.java create mode 100644 app/src/main/java/com/dkanada/gramophone/adapter/SelectAdapter.java create mode 100644 app/src/main/res/drawable/card_server.xml create mode 100644 app/src/main/res/layout/activity_select.xml create mode 100644 app/src/main/res/layout/card_server.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 715c3ea7..374fdfd9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,6 +57,10 @@ android:name=".activities.LoginActivity" android:label="@string/action_login" android:theme="@style/LoginScreen" /> + users = App.getDatabase().userDao().getUsers(); + SelectAdapter adapter = new SelectAdapter(this, users); + + binding.recyclerView.setAdapter(adapter); + binding.recyclerView.setLayoutManager(new LinearLayoutManager(this)); + + binding.add.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + startActivity(new Intent(context, LoginActivity.class)); + } + }); + + setDrawUnderStatusbar(); + setStatusbarColorAuto(); + + setNavigationbarColorAuto(); + setTaskDescriptionColorAuto(); + + int primaryColor = ThemeStore.primaryColor(this); + + binding.add.setBackgroundColor(primaryColor); + binding.toolbar.setBackgroundColor(primaryColor); + setSupportActionBar(binding.toolbar); + } + + @Override + public void onPause() { + super.onPause(); + overridePendingTransition(0, R.anim.fade_quick); + } + + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + if (item.getItemId() == android.R.id.home) { + onBackPressed(); + return true; + } + + return super.onOptionsItemSelected(item); + } +} diff --git a/app/src/main/java/com/dkanada/gramophone/adapter/SelectAdapter.java b/app/src/main/java/com/dkanada/gramophone/adapter/SelectAdapter.java new file mode 100644 index 00000000..2752bfa4 --- /dev/null +++ b/app/src/main/java/com/dkanada/gramophone/adapter/SelectAdapter.java @@ -0,0 +1,88 @@ +package com.dkanada.gramophone.adapter; + +import android.content.Intent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.RecyclerView; + +import com.dkanada.gramophone.App; +import com.dkanada.gramophone.R; +import com.dkanada.gramophone.activities.SplashActivity; +import com.dkanada.gramophone.model.User; +import com.dkanada.gramophone.util.PreferenceUtil; +import com.dkanada.gramophone.views.IconImageView; + +import java.util.List; + +public class SelectAdapter extends RecyclerView.Adapter { + private final AppCompatActivity activity; + private final List users; + + public SelectAdapter(@NonNull AppCompatActivity activity, List users) { + this.activity = activity; + this.users = users; + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(activity).inflate(R.layout.card_server, parent, false); + + return new ViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + final User user = users.get(position); + + holder.name.setText(user.name); + holder.url.setText(user.server); + } + + @Override + public int getItemCount() { + return users.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder { + TextView name; + TextView url; + + IconImageView delete; + IconImageView select; + + public ViewHolder(@NonNull View itemView) { + super(itemView); + + name = itemView.findViewById(R.id.name); + url = itemView.findViewById(R.id.url); + delete = itemView.findViewById(R.id.delete); + select = itemView.findViewById(R.id.select); + + delete.setOnClickListener(this::onDelete); + select.setOnClickListener(this::onSelect); + } + + public void onSelect(View v) { + final User user = users.get(getBindingAdapterPosition()); + + PreferenceUtil.getInstance(activity).setServer(user.server); + PreferenceUtil.getInstance(activity).setUser(user.id); + + activity.startActivity(new Intent(activity, SplashActivity.class)); + } + + public void onDelete(View v) { + final User user = users.get(getBindingAdapterPosition()); + + App.getDatabase().userDao().deleteUser(user); + users.remove(user); + notifyDataSetChanged(); + } + } +} diff --git a/app/src/main/res/drawable/card_server.xml b/app/src/main/res/drawable/card_server.xml new file mode 100644 index 00000000..84f9bd16 --- /dev/null +++ b/app/src/main/res/drawable/card_server.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 0188e885..25800289 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -4,11 +4,9 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:orientation="vertical" tools:context=".activities.LoginActivity"> @@ -127,11 +125,28 @@ android:id="@+id/login" android:layout_width="match_parent" android:layout_height="64dp" - android:layout_margin="32dp" + android:layout_marginHorizontal="32dp" + android:layout_marginTop="32dp" + android:layout_marginBottom="16dp" android:text="@string/login" app:cornerRadius="24dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintBottom_toBottomOf="parent" /> + app:layout_constraintBottom_toTopOf="@id/select" /> + + diff --git a/app/src/main/res/layout/activity_select.xml b/app/src/main/res/layout/activity_select.xml new file mode 100644 index 00000000..e797f0db --- /dev/null +++ b/app/src/main/res/layout/activity_select.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/layout/card_server.xml b/app/src/main/res/layout/card_server.xml new file mode 100644 index 00000000..e413794f --- /dev/null +++ b/app/src/main/res/layout/card_server.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b88c2079..86a2aa80 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -187,6 +187,8 @@ Classic Card + Select + Add Login Disable Ignore