From 36f44095c332ec03ddf256e6189a595079b3ae37 Mon Sep 17 00:00:00 2001 From: dkanada Date: Mon, 17 Aug 2020 04:17:06 +0900 Subject: [PATCH] add dialog to confirm logout --- .../dialogs/ConfirmLogoutDialog.java | 51 +++++++++++++++++++ .../ui/activities/MainActivity.java | 25 +++------ app/src/main/res/values/strings.xml | 1 + 3 files changed, 60 insertions(+), 17 deletions(-) create mode 100644 app/src/main/java/com/dkanada/gramophone/dialogs/ConfirmLogoutDialog.java diff --git a/app/src/main/java/com/dkanada/gramophone/dialogs/ConfirmLogoutDialog.java b/app/src/main/java/com/dkanada/gramophone/dialogs/ConfirmLogoutDialog.java new file mode 100644 index 00000000..ff90bb4b --- /dev/null +++ b/app/src/main/java/com/dkanada/gramophone/dialogs/ConfirmLogoutDialog.java @@ -0,0 +1,51 @@ +package com.dkanada.gramophone.dialogs; + +import android.app.Dialog; +import android.content.Intent; +import android.os.Bundle; + +import androidx.annotation.NonNull; +import androidx.fragment.app.DialogFragment; + +import com.afollestad.materialdialogs.MaterialDialog; +import com.dkanada.gramophone.App; +import com.dkanada.gramophone.R; +import com.dkanada.gramophone.ui.activities.LoginActivity; + +import org.jellyfin.apiclient.interaction.EmptyResponse; +import org.jellyfin.apiclient.interaction.VolleyHttpClient; +import org.jellyfin.apiclient.interaction.http.IAsyncHttpClient; +import org.jellyfin.apiclient.logging.AndroidLogger; +import org.jellyfin.apiclient.model.logging.ILogger; +import org.jellyfin.apiclient.model.serialization.GsonJsonSerializer; +import org.jellyfin.apiclient.model.serialization.IJsonSerializer; + +public class ConfirmLogoutDialog extends DialogFragment { + @NonNull + public static ConfirmLogoutDialog create() { + return new ConfirmLogoutDialog(); + } + + @NonNull + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + return new MaterialDialog.Builder(getActivity()) + .title(R.string.logout) + .content(R.string.confirm_logout) + .positiveText(R.string.logout) + .negativeText(android.R.string.cancel) + .onPositive((dialog, which) -> { + if (getActivity() == null) return; + + IJsonSerializer jsonSerializer = new GsonJsonSerializer(); + ILogger logger = new AndroidLogger(getActivity().getClass().getName()); + IAsyncHttpClient httpClient = new VolleyHttpClient(logger, getActivity()); + + App.getConnectionManager(getActivity(), jsonSerializer, logger, httpClient).Logout(new EmptyResponse()); + Intent intent = new Intent(getActivity(), LoginActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); + this.startActivity(intent); + }) + .build(); + } +} diff --git a/app/src/main/java/com/dkanada/gramophone/ui/activities/MainActivity.java b/app/src/main/java/com/dkanada/gramophone/ui/activities/MainActivity.java index 52ddd836..861f24cd 100644 --- a/app/src/main/java/com/dkanada/gramophone/ui/activities/MainActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/ui/activities/MainActivity.java @@ -7,6 +7,8 @@ import android.os.Bundle; import android.os.Handler; import androidx.annotation.NonNull; import androidx.annotation.Nullable; + +import com.dkanada.gramophone.dialogs.ConfirmLogoutDialog; import com.google.android.material.navigation.NavigationView; import androidx.fragment.app.Fragment; import androidx.drawerlayout.widget.DrawerLayout; @@ -23,7 +25,6 @@ import com.bumptech.glide.Glide; import com.kabouzeid.appthemehelper.ThemeStore; import com.kabouzeid.appthemehelper.util.ATHUtil; import com.kabouzeid.appthemehelper.util.NavigationViewUtil; -import com.dkanada.gramophone.App; import com.dkanada.gramophone.R; import com.dkanada.gramophone.glide.CustomGlideRequest; import com.dkanada.gramophone.helper.MusicPlayerRemote; @@ -36,14 +37,7 @@ import com.dkanada.gramophone.util.MusicUtil; import com.dkanada.gramophone.util.QueryUtil; import com.sothree.slidinguppanel.SlidingUpPanelLayout; -import org.jellyfin.apiclient.interaction.EmptyResponse; -import org.jellyfin.apiclient.interaction.VolleyHttpClient; -import org.jellyfin.apiclient.interaction.http.IAsyncHttpClient; -import org.jellyfin.apiclient.logging.AndroidLogger; import org.jellyfin.apiclient.model.dto.BaseItemDto; -import org.jellyfin.apiclient.model.logging.ILogger; -import org.jellyfin.apiclient.model.serialization.GsonJsonSerializer; -import org.jellyfin.apiclient.model.serialization.IJsonSerializer; import java.util.List; @@ -146,14 +140,8 @@ public class MainActivity extends AbsSlidingMusicPanelActivity { new Handler().postDelayed(() -> startActivity(new Intent(MainActivity.this, AboutActivity.class)), 200); break; case R.id.nav_logout: - IJsonSerializer jsonSerializer = new GsonJsonSerializer(); - ILogger logger = new AndroidLogger(TAG); - IAsyncHttpClient httpClient = new VolleyHttpClient(logger, this); - - App.getConnectionManager(this, jsonSerializer, logger, httpClient).Logout(new EmptyResponse()); - Intent intent = new Intent(this, LoginActivity.class); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); - this.startActivity(intent); + ConfirmLogoutDialog.create().show(getSupportFragmentManager(), "CONFIRM_LOGOUT_DIALOG"); + break; } // only run the following code when a new library has been selected @@ -169,7 +157,10 @@ public class MainActivity extends AbsSlidingMusicPanelActivity { // setCheckable must be applied to the items on creation // it also applies a tacky background color for the checked item // this is a hack to check the current item without that - if (menuItem.getItemId() == R.id.nav_settings || menuItem.getItemId() == R.id.nav_about) return true; + if (menuItem.getItemId() == R.id.nav_settings + || menuItem.getItemId() == R.id.nav_about + || menuItem.getItemId() == R.id.nav_logout) return true; + for (int i = 0; i < navigationView.getMenu().size(); i++) { if (navigationView.getMenu().getItem(i) == menuItem) { navigationView.getMenu().getItem(i).setChecked(true); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7a942bfc..fc70b6bc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2,6 +2,7 @@ What do you want to share? + Are you sure you want to logout? Currently listening to %1$s by %2$s. The audio file Couldn\u2019t play this song.