From f064378307cf651c1f0cb82a36b81099b4db7401 Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Tue, 10 Jun 2014 19:24:00 -0700 Subject: #171 Only display admin stuff if user is an admin --- .../dsub/activity/SubsonicFragmentActivity.java | 3 + .../daneren2005/dsub/fragments/AdminFragment.java | 15 +++- .../daneren2005/dsub/fragments/MainFragment.java | 6 +- .../daneren2005/dsub/fragments/UserFragment.java | 9 ++- src/github/daneren2005/dsub/util/UserUtil.java | 79 ++++++++++++++++++++++ src/github/daneren2005/dsub/util/Util.java | 13 ---- src/github/daneren2005/dsub/view/ChatAdapter.java | 3 +- 7 files changed, 108 insertions(+), 20 deletions(-) create mode 100644 src/github/daneren2005/dsub/util/UserUtil.java (limited to 'src') diff --git a/src/github/daneren2005/dsub/activity/SubsonicFragmentActivity.java b/src/github/daneren2005/dsub/activity/SubsonicFragmentActivity.java index 2afdaf3f..7fafae60 100644 --- a/src/github/daneren2005/dsub/activity/SubsonicFragmentActivity.java +++ b/src/github/daneren2005/dsub/activity/SubsonicFragmentActivity.java @@ -63,6 +63,7 @@ import github.daneren2005.dsub.util.BackgroundTask; import github.daneren2005.dsub.util.Constants; import github.daneren2005.dsub.util.FileUtil; import github.daneren2005.dsub.util.SilentBackgroundTask; +import github.daneren2005.dsub.util.UserUtil; import github.daneren2005.dsub.util.Util; import github.daneren2005.dsub.view.ChangeLog; @@ -467,6 +468,8 @@ public class SubsonicFragmentActivity extends SubsonicActivity { editor.putInt(Constants.PREFERENCES_KEY_SERVER_COUNT, 3); editor.commit(); } + + UserUtil.seedCurrentUser(this); } private void resetCacheLocation(SharedPreferences prefs) { diff --git a/src/github/daneren2005/dsub/fragments/AdminFragment.java b/src/github/daneren2005/dsub/fragments/AdminFragment.java index faa7529a..b7f09532 100644 --- a/src/github/daneren2005/dsub/fragments/AdminFragment.java +++ b/src/github/daneren2005/dsub/fragments/AdminFragment.java @@ -41,6 +41,7 @@ import github.daneren2005.dsub.service.parser.SubsonicRESTException; import github.daneren2005.dsub.util.Constants; import github.daneren2005.dsub.util.ProgressListener; import github.daneren2005.dsub.util.SilentBackgroundTask; +import github.daneren2005.dsub.util.UserUtil; import github.daneren2005.dsub.util.Util; import github.daneren2005.dsub.view.UserAdapter; @@ -52,7 +53,11 @@ public class AdminFragment extends SelectListFragment { super.onCreateContextMenu(menu, view, menuInfo); MenuInflater inflater = context.getMenuInflater(); - inflater.inflate(R.menu.admin_context, menu); + if(UserUtil.isCurrentAdmin(context) && Util.checkServerVersion(context, "1.10")) { + inflater.inflate(R.menu.admin_context, menu); + } else { + inflater.inflate(R.menu.admin_context_user, menu); + } } @Override @@ -74,7 +79,11 @@ public class AdminFragment extends SelectListFragment { @Override public int getOptionsMenu() { - return R.menu.admin; + if(UserUtil.isCurrentAdmin(context)) { + return R.menu.admin; + } else { + return R.menu.empty; + } } @Override @@ -95,7 +104,7 @@ public class AdminFragment extends SelectListFragment { file.delete(); List users = new ArrayList(); - users.add(musicService.getUser(refresh, Util.getCurrentUsername(context), context, listener)); + users.add(musicService.getUser(refresh, UserUtil.getCurrentUsername(context), context, listener)); return users; } } diff --git a/src/github/daneren2005/dsub/fragments/MainFragment.java b/src/github/daneren2005/dsub/fragments/MainFragment.java index 88baf717..e9f06e45 100644 --- a/src/github/daneren2005/dsub/fragments/MainFragment.java +++ b/src/github/daneren2005/dsub/fragments/MainFragment.java @@ -25,6 +25,7 @@ import github.daneren2005.dsub.util.Constants; import github.daneren2005.dsub.util.FileUtil; import github.daneren2005.dsub.util.LoadingTask; import github.daneren2005.dsub.util.Pair; +import github.daneren2005.dsub.util.UserUtil; import github.daneren2005.dsub.view.MergeAdapter; import github.daneren2005.dsub.util.Util; import github.daneren2005.dsub.service.MusicService; @@ -207,6 +208,7 @@ public class MainFragment extends SubsonicFragment { } Util.setActiveServer(context, instance); context.invalidate(); + UserUtil.seedCurrentUser(context); } } @@ -218,13 +220,15 @@ public class MainFragment extends SubsonicFragment { if (service != null) { service.setOnline(isOffline); } - + + // Coming back online if(isOffline) { int scrobblesCount = Util.offlineScrobblesCount(context); int starsCount = Util.offlineStarsCount(context); if(scrobblesCount > 0 || starsCount > 0){ showOfflineSyncDialog(scrobblesCount, starsCount); } + UserUtil.seedCurrentUser(context); } } diff --git a/src/github/daneren2005/dsub/fragments/UserFragment.java b/src/github/daneren2005/dsub/fragments/UserFragment.java index 1f4d4592..f2af85fb 100644 --- a/src/github/daneren2005/dsub/fragments/UserFragment.java +++ b/src/github/daneren2005/dsub/fragments/UserFragment.java @@ -33,6 +33,7 @@ import github.daneren2005.dsub.service.OfflineException; import github.daneren2005.dsub.service.ServerTooOldException; import github.daneren2005.dsub.util.Constants; import github.daneren2005.dsub.util.SilentBackgroundTask; +import github.daneren2005.dsub.util.UserUtil; import github.daneren2005.dsub.util.Util; import github.daneren2005.dsub.view.SettingsAdapter; @@ -53,7 +54,7 @@ public class UserFragment extends SubsonicFragment{ user = (User) args.getSerializable(Constants.INTENT_EXTRA_NAME_ID); listView = (ListView)rootView.findViewById(R.id.fragment_list); - listView.setAdapter(new SettingsAdapter(context, user.getSettings(), true)); + listView.setAdapter(new SettingsAdapter(context, user.getSettings(), UserUtil.isCurrentAdmin(context))); setTitle(user.getUsername()); @@ -66,7 +67,11 @@ public class UserFragment extends SubsonicFragment{ return; } - menuInflater.inflate(R.menu.user, menu); + if(UserUtil.isCurrentAdmin(context)) { + menuInflater.inflate(R.menu.user, menu); + } else { + menuInflater.inflate(R.menu.empty, menu); + } } @Override diff --git a/src/github/daneren2005/dsub/util/UserUtil.java b/src/github/daneren2005/dsub/util/UserUtil.java new file mode 100644 index 00000000..5158829c --- /dev/null +++ b/src/github/daneren2005/dsub/util/UserUtil.java @@ -0,0 +1,79 @@ +/* + This file is part of Subsonic. + Subsonic is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + Subsonic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with Subsonic. If not, see . + Copyright 2014 (C) Scott Jackson +*/ + +package github.daneren2005.dsub.util; + +import android.content.Context; +import android.content.SharedPreferences; + +import java.io.File; + +import github.daneren2005.dsub.R; +import github.daneren2005.dsub.domain.User; +import github.daneren2005.dsub.service.MusicServiceFactory; + +public final class UserUtil { + private static User currentUser; + + public static void seedCurrentUser(final Context context) { + // Only try to seed if online + if(Util.isOffline(context)) { + return; + } + + new SilentBackgroundTask(context) { + @Override + protected Void doInBackground() throws Throwable { + currentUser = MusicServiceFactory.getMusicService(context).getUser(false, getCurrentUsername(context), context, null); + return null; + } + }.execute(); + } + + public static User getCurrentUser(Context context) { + return currentUser; + } + + public static String getCurrentUsername(Context context, int instance) { + SharedPreferences prefs = Util.getPreferences(context); + return prefs.getString(Constants.PREFERENCES_KEY_USERNAME + instance, null); + } + + public static String getCurrentUsername(Context context) { + return getCurrentUsername(context, Util.getActiveServer(context)); + } + + public static boolean isCurrentAdmin(Context context) { + if(currentUser == null) { + return false; + } else { + return isCurrentRole(context, "adminRole"); + } + } + + public static boolean isCurrentRole(Context context, String role) { + if(currentUser == null) { + return false; + } + + for(User.Setting setting: currentUser.getSettings()) { + if(setting.getName().equals(role)) { + return setting.getValue() == true; + } + } + + return false; + } +} diff --git a/src/github/daneren2005/dsub/util/Util.java b/src/github/daneren2005/dsub/util/Util.java index dad557e3..931aa590 100644 --- a/src/github/daneren2005/dsub/util/Util.java +++ b/src/github/daneren2005/dsub/util/Util.java @@ -169,11 +169,6 @@ public final class Util { SharedPreferences prefs = getPreferences(context); return prefs.getBoolean(Constants.PREFERENCES_KEY_OFFLINE, false) ? 0 : prefs.getInt(Constants.PREFERENCES_KEY_SERVER_INSTANCE, 1); } - - public static String getCurrentUsername(Context context) { - SharedPreferences prefs = getPreferences(context); - return prefs.getString(Constants.PREFERENCES_KEY_USERNAME + getActiveServer(context), null); - } public static boolean checkServerVersion(Context context, String requiredVersion) { Version version = Util.getServerRestVersion(context); @@ -231,14 +226,6 @@ public final class Util { SharedPreferences prefs = getPreferences(context); return prefs.getString(Constants.PREFERENCES_KEY_SERVER_NAME + instance, null); } - - public static String getUserName(Context context, int instance) { - if (instance == 0) { - return context.getResources().getString(R.string.main_offline); - } - SharedPreferences prefs = getPreferences(context); - return prefs.getString(Constants.PREFERENCES_KEY_USERNAME + instance, null); - } public static void setServerRestVersion(Context context, Version version) { int instance = getActiveServer(context); diff --git a/src/github/daneren2005/dsub/view/ChatAdapter.java b/src/github/daneren2005/dsub/view/ChatAdapter.java index 518f81ef..c7bc13f2 100644 --- a/src/github/daneren2005/dsub/view/ChatAdapter.java +++ b/src/github/daneren2005/dsub/view/ChatAdapter.java @@ -10,6 +10,7 @@ import android.widget.TextView; import github.daneren2005.dsub.R; import github.daneren2005.dsub.activity.SubsonicActivity; import github.daneren2005.dsub.domain.ChatMessage; +import github.daneren2005.dsub.util.UserUtil; import github.daneren2005.dsub.util.Util; import java.text.DateFormat; @@ -47,7 +48,7 @@ public class ChatAdapter extends ArrayAdapter { Date messageTime = new java.util.Date(message.getTime()); String messageText = message.getMessage(); - String me = Util.getUserName(activity, Util.getActiveServer(activity)); + String me = UserUtil.getCurrentUsername(activity); if (messageUser.equals(me)) { layout = R.layout.chat_item_reverse; -- cgit v1.2.3