diff --git a/app/build.gradle b/app/build.gradle
index c90c6ba..69a5d26 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -85,6 +85,9 @@ dependencies {
// https://mvnrepository.com/artifact/commons-io/commons-io
implementation 'commons-io:commons-io:2.11.0'
+ // Picasso (image loader)
+ implementation 'com.squareup.picasso:picasso:2.8'
+
configurations.all {
resolutionStrategy {
force 'commons-io:commons-io:2.11.0'
diff --git a/app/src/main/java/it/danieleverducci/nextcloudmaps/activity/main/MainActivity.java b/app/src/main/java/it/danieleverducci/nextcloudmaps/activity/main/MainActivity.java
index 49d6087..63261d4 100644
--- a/app/src/main/java/it/danieleverducci/nextcloudmaps/activity/main/MainActivity.java
+++ b/app/src/main/java/it/danieleverducci/nextcloudmaps/activity/main/MainActivity.java
@@ -195,7 +195,7 @@ public class MainActivity extends NextcloudMapsStyledActivity {
startActivity(new Intent(this, AboutActivity.class));
}
- private void switch_account() {
+ public void switch_account() {
ApiProvider.logout();
SingleAccountHelper.applyCurrentAccount(this, null);
Intent intent = new Intent(MainActivity.this, LoginActivity.class);
diff --git a/app/src/main/java/it/danieleverducci/nextcloudmaps/fragments/GeofavoritesFragment.java b/app/src/main/java/it/danieleverducci/nextcloudmaps/fragments/GeofavoritesFragment.java
index 08fb599..4204ae1 100644
--- a/app/src/main/java/it/danieleverducci/nextcloudmaps/fragments/GeofavoritesFragment.java
+++ b/app/src/main/java/it/danieleverducci/nextcloudmaps/fragments/GeofavoritesFragment.java
@@ -3,6 +3,8 @@ package it.danieleverducci.nextcloudmaps.fragments;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
+import android.os.Handler;
+import android.util.Log;
import android.view.View;
import android.widget.Toast;
@@ -10,10 +12,19 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.AppCompatImageButton;
+import androidx.appcompat.widget.AppCompatImageView;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
+import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException;
+import com.nextcloud.android.sso.exceptions.NoCurrentAccountSelectedException;
+import com.nextcloud.android.sso.helper.SingleAccountHelper;
+import com.nextcloud.android.sso.model.SingleSignOnAccount;
+import com.squareup.picasso.Picasso;
+
+import java.io.File;
+
import it.danieleverducci.nextcloudmaps.R;
import it.danieleverducci.nextcloudmaps.activity.detail.GeofavoriteDetailActivity;
import it.danieleverducci.nextcloudmaps.activity.main.GeofavoritesFragmentViewModel;
@@ -26,6 +37,7 @@ import it.danieleverducci.nextcloudmaps.utils.IntentGenerator;
* to communicate with the activity
*/
public abstract class GeofavoritesFragment extends Fragment {
+ private final String TAG = "GeofavoritesFragment";
protected GeofavoritesFragmentViewModel mGeofavoritesFragmentViewModel;
@@ -54,6 +66,24 @@ public abstract class GeofavoritesFragment extends Fragment {
// Set views
AppCompatImageButton menuButton = view.findViewById(R.id.menu_button);
menuButton.setOnClickListener(v -> ((MainActivity)requireActivity()).openDrawer());
+
+ View userBadgeContainer = view.findViewById(R.id.user_badge_container);
+ userBadgeContainer.setOnClickListener(v -> showSwitchAccountDialog());
+
+ // Set user badge (async)
+ Handler h = new Handler();
+ h.post(() -> {
+ try {
+ SingleSignOnAccount ssoAccount = SingleAccountHelper.getCurrentSingleSignOnAccount(requireContext());
+ String userBadgePath = ssoAccount.url + "/index.php/avatar/" + ssoAccount.userId + "/64";
+ if (getActivity() != null)
+ getActivity().runOnUiThread(
+ () -> Picasso.get().load(userBadgePath).into((AppCompatImageView)userBadgeContainer.findViewById(R.id.user_badge))
+ );
+ } catch (Exception e) {
+ Log.e(TAG, "Unable to load user image: " + e.toString());
+ }
+ });
}
@Override
@@ -110,4 +140,18 @@ public abstract class GeofavoritesFragment extends Fragment {
ad.show();
}
+ private void showSwitchAccountDialog() {
+ AlertDialog.Builder builder = new AlertDialog.Builder(requireContext());
+ builder.setMessage(R.string.dialog_logout_message)
+ .setTitle(R.string.dialog_logout_title)
+ .setPositiveButton(android.R.string.yes, (dialog, id) -> {
+ if (getActivity() != null)
+ ((MainActivity) getActivity()).switch_account();
+ dialog.dismiss();
+ })
+ .setNegativeButton(android.R.string.no, (dialog, id) -> dialog.dismiss());
+ AlertDialog ad = builder.create();
+ ad.show();
+ }
+
}
diff --git a/app/src/main/res/drawable/user_badge_mask.xml b/app/src/main/res/drawable/user_badge_mask.xml
new file mode 100644
index 0000000..0d36cbd
--- /dev/null
+++ b/app/src/main/res/drawable/user_badge_mask.xml
@@ -0,0 +1,15 @@
+
+
+
+ -
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/app_toolbar.xml b/app/src/main/res/layout/app_toolbar.xml
index 1279674..ef84b90 100644
--- a/app/src/main/res/layout/app_toolbar.xml
+++ b/app/src/main/res/layout/app_toolbar.xml
@@ -67,6 +67,22 @@
android:lines="1"
android:textSize="16sp"
android:text="@string/search_in_all"/>
+
+
+
+
+
+
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index b0f6ac7..ca707f7 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -39,6 +39,8 @@
Stai per eliminare il geosegnalibro {name}. Procedere?
Elimina
Mantieni
+ Cambia account
+ Vuoi cambiare account?
Geosegnalibro eliminato
Impossibile ottenere la lista dei geosegnalibri
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 54e2c87..85685cd 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -38,6 +38,8 @@
You are about to delete geofavorite {name}. Proceed?
Delete
Maintain
+ Switch account
+ Do you want to switch account?
Geofavorite deleted
Unable to obtain geofavorites list