diff options
author | Scott Jackson <daneren2005@gmail.com> | 2014-06-10 19:24:00 -0700 |
---|---|---|
committer | Scott Jackson <daneren2005@gmail.com> | 2014-06-10 19:24:00 -0700 |
commit | f064378307cf651c1f0cb82a36b81099b4db7401 (patch) | |
tree | 5e56d4b9c223f193aa652180dc41dc41c4046b53 /src | |
parent | 42843c2b45668064aee7ce985bb941acb54f5eac (diff) | |
download | dsub-f064378307cf651c1f0cb82a36b81099b4db7401.tar.gz dsub-f064378307cf651c1f0cb82a36b81099b4db7401.tar.bz2 dsub-f064378307cf651c1f0cb82a36b81099b4db7401.zip |
#171 Only display admin stuff if user is an admin
Diffstat (limited to 'src')
7 files changed, 108 insertions, 20 deletions
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<User> { 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<User> { @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<User> { file.delete();
List<User> users = new ArrayList<User>();
- 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 <http://www.gnu.org/licenses/>.
+ 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<Void>(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<ChatMessage> { 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;
|