diff options
author | Andrew Comminos <andrew@comminos.com> | 2016-02-01 08:07:39 +0300 |
---|---|---|
committer | Andrew Comminos <andrew@comminos.com> | 2016-02-01 08:07:39 +0300 |
commit | 69998097a38e32255a89c6149d934b05512ba39d (patch) | |
tree | 2b34e2531b16bf80304c02025801c3c533b589cb | |
parent | fb2cd883c385c02dbcf340ac9264e04de494a94e (diff) |
Added option to show/hide channel count.
5 files changed, 60 insertions, 5 deletions
diff --git a/app/src/main/java/com/morlunk/mumbleclient/Settings.java b/app/src/main/java/com/morlunk/mumbleclient/Settings.java index 4fe6676..450c4fe 100644 --- a/app/src/main/java/com/morlunk/mumbleclient/Settings.java +++ b/app/src/main/java/com/morlunk/mumbleclient/Settings.java @@ -156,6 +156,9 @@ public class Settings { public static final String PREF_STAY_AWAKE = "stay_awake"; public static final boolean DEFAULT_STAY_AWAKE = false; + public static final String PREF_SHOW_USER_COUNT = "show_user_count"; + public static final boolean DEFAULT_SHOW_USER_COUNT = false; + static { ARRAY_INPUT_METHODS = new HashSet<String>(); ARRAY_INPUT_METHODS.add(ARRAY_INPUT_METHOD_VOICE); @@ -429,4 +432,11 @@ public class Settings { public boolean isUsingCertificate() { return getDefaultCertificate() >= 0; } + + /** + * @return true if the user count should be shown next to channels. + */ + public boolean shouldShowUserCount() { + return preferences.getBoolean(PREF_SHOW_USER_COUNT, DEFAULT_SHOW_USER_COUNT); + } } diff --git a/app/src/main/java/com/morlunk/mumbleclient/channel/ChannelListAdapter.java b/app/src/main/java/com/morlunk/mumbleclient/channel/ChannelListAdapter.java index cc30afe..bc993a9 100644 --- a/app/src/main/java/com/morlunk/mumbleclient/channel/ChannelListAdapter.java +++ b/app/src/main/java/com/morlunk/mumbleclient/channel/ChannelListAdapter.java @@ -84,15 +84,18 @@ public class ChannelListAdapter extends RecyclerView.Adapter implements UserMenu private HashMap<Integer, Boolean> mExpandedChannels; private OnUserClickListener mUserClickListener; private OnChannelClickListener mChannelClickListener; + private boolean mShowChannelUserCount; private final FragmentManager mFragmentManager; public ChannelListAdapter(Context context, IJumbleService service, PlumbleDatabase database, - FragmentManager fragmentManager, boolean showPinnedOnly) throws RemoteException { + FragmentManager fragmentManager, boolean showPinnedOnly, + boolean showChannelUserCount) throws RemoteException { setHasStableIds(true); mContext = context; mService = service; mDatabase = database; mFragmentManager = fragmentManager; + mShowChannelUserCount = showChannelUserCount; mRootChannels = new ArrayList<Integer>(); if(showPinnedOnly) { @@ -154,8 +157,13 @@ public class ChannelListAdapter extends RecyclerView.Adapter implements UserMenu cvh.mChannelName.setText(channel.getName()); - int userCount = channel.getSubchannelUserCount(); - cvh.mChannelUserCount.setText(String.format("%d", userCount)); + if (mShowChannelUserCount) { + cvh.mChannelUserCount.setVisibility(View.VISIBLE); + int userCount = channel.getSubchannelUserCount(); + cvh.mChannelUserCount.setText(String.format("%d", userCount)); + } else { + cvh.mChannelUserCount.setVisibility(View.GONE); + } // Pad the view depending on channel's nested level. DisplayMetrics metrics = mContext.getResources().getDisplayMetrics(); @@ -387,6 +395,14 @@ public class ChannelListAdapter extends RecyclerView.Adapter implements UserMenu } /** + * Sets whether to show the channel user count in a channel row. + */ + public void setShowChannelUserCount(boolean showUserCount) { + mShowChannelUserCount = showUserCount; + notifyDataSetChanged(); + } + + /** * Recursively creates a list of {@link Node}s representing the channel hierarchy. * @param parent The parent node to propagate under. * @param channel The parent channel. diff --git a/app/src/main/java/com/morlunk/mumbleclient/channel/ChannelListFragment.java b/app/src/main/java/com/morlunk/mumbleclient/channel/ChannelListFragment.java index fc1991e..3427509 100644 --- a/app/src/main/java/com/morlunk/mumbleclient/channel/ChannelListFragment.java +++ b/app/src/main/java/com/morlunk/mumbleclient/channel/ChannelListFragment.java @@ -23,11 +23,13 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.content.SharedPreferences; import android.database.CursorWrapper; import android.graphics.PorterDuff; import android.media.AudioManager; import android.os.Bundle; import android.os.RemoteException; +import android.preference.PreferenceManager; import android.support.v4.view.MenuItemCompat; import android.support.v7.app.ActionBarActivity; import android.support.v7.view.ActionMode; @@ -48,10 +50,11 @@ import com.morlunk.jumble.util.IJumbleObserver; import com.morlunk.jumble.util.JumbleException; import com.morlunk.jumble.util.JumbleObserver; import com.morlunk.mumbleclient.R; +import com.morlunk.mumbleclient.Settings; import com.morlunk.mumbleclient.db.DatabaseProvider; import com.morlunk.mumbleclient.util.JumbleServiceFragment; -public class ChannelListFragment extends JumbleServiceFragment implements OnChannelClickListener, OnUserClickListener { +public class ChannelListFragment extends JumbleServiceFragment implements OnChannelClickListener, OnUserClickListener, SharedPreferences.OnSharedPreferenceChangeListener { private IJumbleObserver mServiceObserver = new JumbleObserver() { @Override @@ -128,6 +131,7 @@ public class ChannelListFragment extends JumbleServiceFragment implements OnChan private ChatTargetProvider mTargetProvider; private DatabaseProvider mDatabaseProvider; private ActionMode mActionMode; + private Settings mSettings; @Override public void onCreate(Bundle savedInstanceState) { @@ -148,6 +152,9 @@ public class ChannelListFragment extends JumbleServiceFragment implements OnChan } catch (ClassCastException e) { throw new ClassCastException(getActivity().toString()+" must implement DatabaseProvider"); } + mSettings = Settings.getInstance(activity); + SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(activity); + preferences.registerOnSharedPreferenceChangeListener(this); } @Override @@ -174,6 +181,13 @@ public class ChannelListFragment extends JumbleServiceFragment implements OnChan } @Override + public void onDestroy() { + super.onDestroy(); + SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); + preferences.unregisterOnSharedPreferenceChangeListener(this); + } + + @Override public IJumbleObserver getServiceObserver() { return mServiceObserver; } @@ -294,7 +308,7 @@ public class ChannelListFragment extends JumbleServiceFragment implements OnChan private void setupChannelList() throws RemoteException { mChannelListAdapter = new ChannelListAdapter(getActivity(), getService(), mDatabaseProvider.getDatabase(), getChildFragmentManager(), - isShowingPinnedChannels()); + isShowingPinnedChannels(), mSettings.shouldShowUserCount()); mChannelListAdapter.setOnChannelClickListener(this); mChannelListAdapter.setOnUserClickListener(this); mChannelView.setAdapter(mChannelListAdapter); @@ -356,4 +370,11 @@ public class ChannelListFragment extends JumbleServiceFragment implements OnChan mActionMode = ((ActionBarActivity)getActivity()).startSupportActionMode(cb); } } + + @Override + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { + if (Settings.PREF_SHOW_USER_COUNT.equals(key) && mChannelListAdapter != null) { + mChannelListAdapter.setShowChannelUserCount(mSettings.shouldShowUserCount()); + } + } } diff --git a/app/src/main/res/values/preference.xml b/app/src/main/res/values/preference.xml index fcbc015..4a093ab 100644 --- a/app/src/main/res/values/preference.xml +++ b/app/src/main/res/values/preference.xml @@ -127,4 +127,6 @@ <string name="pref_import_certificate_summary">Import a certificate from external storage.</string> <string name="pref_export_certificate_title">Export Certificate</string> <string name="pref_export_certificate_summary">Exports a certificate to external storage.</string> + <string name="pref_show_user_count">Show Channel User Count</string> + <string name="pref_show_user_count_summary">Show a counter with the number of users in a channel subtree.</string> </resources> diff --git a/app/src/main/res/xml/settings_appearance.xml b/app/src/main/res/xml/settings_appearance.xml index 449fbab..ab6fc07 100644 --- a/app/src/main/res/xml/settings_appearance.xml +++ b/app/src/main/res/xml/settings_appearance.xml @@ -25,6 +25,12 @@ android:key="theme" android:summary="@string/themeSum" android:title="@string/theme" /> + + <CheckBoxPreference + android:key="show_user_count" + android:defaultValue="false" + android:title="@string/pref_show_user_count" + android:summary="@string/pref_show_user_count_summary" /> <!-- <ListPreference android:defaultValue="35" |