content: package im.actor.sdk.controllers.settings;
  
  import android.app.Activity;
  import android.content.Intent;
  import android.media.RingtoneManager;
  import android.net.Uri;
  import android.os.Bundle;
  import android.provider.Settings;
  import android.view.LayoutInflater;
  import android.view.View;
  import android.view.ViewGroup;
  import android.widget.CheckBox;
  import android.widget.TextView;
  
  import im.actor.sdk.ActorSDK;
  import im.actor.sdk.ActorStyle;
  import im.actor.sdk.R;
  import im.actor.sdk.controllers.BaseFragment;
  import im.actor.sdk.util.ViewUtils;
  
  import static im.actor.sdk.util.ActorSDKMessenger.messenger;
  
  public class NotificationsFragment extends BaseFragment {
  
      public static int SOUND_PICKER_REQUEST_CODE = 122;
  
      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
          View res = inflater.inflate(R.layout.fr_settings_notifications, container, false);
          res.setBackgroundColor(ActorSDK.sharedActor().style.getMainBackgroundColor());
  
          // Conversation tone
          final CheckBox enableTones = (CheckBox) res.findViewById(R.id.enableConversationTones);
          enableTones.setChecked(messenger().isConversationTonesEnabled());
          View.OnClickListener enableTonesListener = v -> {
              messenger().changeConversationTonesEnabled(!messenger().isConversationTonesEnabled());
              enableTones.setChecked(messenger().isConversationTonesEnabled());
          };
          ActorStyle style = ActorSDK.sharedActor().style;
          ((TextView) res.findViewById(R.id.settings_conversation_tones_title)).setTextColor(style.getTextPrimaryColor());
          ((TextView) res.findViewById(R.id.settings_conversation_tones_hint)).setTextColor(style.getTextSecondaryColor());
          enableTones.setOnClickListener(enableTonesListener);
          res.findViewById(R.id.conversationTonesCont).setOnClickListener(enableTonesListener);
  
          // Vibration
          final CheckBox enableVibration = (CheckBox) res.findViewById(R.id.enableVibration);
          enableVibration.setChecked(messenger().isNotificationVibrationEnabled());
          View.OnClickListener enableVibrationListener = v -> {
              messenger().changeNotificationVibrationEnabled(!messenger().isNotificationVibrationEnabled());
              enableVibration.setChecked(messenger().isNotificationVibrationEnabled());
          };
          enableVibration.setOnClickListener(enableVibrationListener);
          res.findViewById(R.id.vibrationCont).setOnClickListener(enableVibrationListener);
          ((TextView) res.findViewById(R.id.settings_vibration_title)).setTextColor(style.getTextPrimaryColor());
          ((TextView) res.findViewById(R.id.settings_vibration_hint)).setTextColor(style.getTextSecondaryColor());
  
          // Group
          final CheckBox enableGroup = (CheckBox) res.findViewById(R.id.enableGroup);
          enableGroup.setChecked(messenger().isGroupNotificationsEnabled());
          View.OnClickListener enableGroupListener = v -> {
              messenger().changeGroupNotificationsEnabled(!messenger().isGroupNotificationsEnabled());
              enableGroup.setChecked(messenger().isGroupNotificationsEnabled());
          };
          enableGroup.setOnClickListener(enableGroupListener);
          res.findViewById(R.id.groupCont).setOnClickListener(enableGroupListener);
          ((TextView) res.findViewById(R.id.settings_group_title)).setTextColor(style.getTextPrimaryColor());
          ((TextView) res.findViewById(R.id.settings_group_hint)).setTextColor(style.getTextSecondaryColor());
  
          // Mentions
          final CheckBox enableGroupMentions = (CheckBox) res.findViewById(R.id.enableGroupMentions);
          enableGroupMentions.setChecked(messenger().isGroupNotificationsOnlyMentionsEnabled());
          View.OnClickListener enableGroupMentionsListener = v -> {
              messenger().changeGroupNotificationsOnlyMentionsEnabled(!messenger().isGroupNotificationsOnlyMentionsEnabled());
              enableGroupMentions.setChecked(messenger().isGroupNotificationsOnlyMentionsEnabled());
          };
          enableGroupMentions.setOnClickListener(enableGroupMentionsListener);
          res.findViewById(R.id.groupMentionsCont).setOnClickListener(enableGroupMentionsListener);
          ((TextView) res.findViewById(R.id.settings_group_mentions_title)).setTextColor(style.getTextPrimaryColor());
          ((TextView) res.findViewById(R.id.settings_group_mentions_hint)).setTextColor(style.getTextSecondaryColor());
  
          // Names and messages
          final CheckBox enableText = (CheckBox) res.findViewById(R.id.enableTitles);
          enableText.setChecked(messenger().isShowNotificationsText());
          View.OnClickListener enableTextListener = v -> {
              messenger().changeShowNotificationTextEnabled(!messenger().isShowNotificationsText());
              enableText.setChecked(messenger().isShowNotificationsText());
          };
          enableText.setOnClickListener(enableTextListener);
          res.findViewById(R.id.titlesCont).setOnClickListener(enableTextListener);
          ((TextView) res.findViewById(R.id.settings_titles_title)).setTextColor(style.getTextPrimaryColor());
          ((TextView) res.findViewById(R.id.settings_titles_hint)).setTextColor(style.getTextSecondaryColor());
  
          // Sound
          View soundPickerCont = res.findViewById(R.id.soundPickerCont);
          View soundPickerDivider = res.findViewById(R.id.divider);
  
          if (messenger().isNotificationSoundEnabled()) {
              ViewUtils.showViews(false, soundPickerCont, soundPickerDivider);
          } else {
              ViewUtils.goneViews(false, soundPickerCont, soundPickerDivider);
          }
  
          final CheckBox enableSound = (CheckBox) res.findViewById(R.id.enableSound);
          enableSound.setChecked(messenger().isNotificationSoundEnabled());
          View.OnClickListener enableSoundListener = v -> {
              messenger().changeNotificationSoundEnabled(!messenger().isNotificationSoundEnabled());
              enableSound.setChecked(messenger().isNotificationSoundEnabled());
  
              //show/hide sound picker
              if (messenger().isNotificationSoundEnabled()) {
                  ViewUtils.showViews(soundPickerCont, soundPickerDivider);
              } else {
                  ViewUtils.goneViews(soundPickerCont, soundPickerDivider);
              }
          };
          enableSound.setOnClickListener(enableSoundListener);
          res.findViewById(R.id.soundCont).setOnClickListener(enableSoundListener);
          ((TextView) res.findViewById(R.id.settings_sound_title)).setTextColor(style.getTextPrimaryColor());
          ((TextView) res.findViewById(R.id.settings_sound_hint)).setTextColor(style.getTextSecondaryColor());
  
          // Sound picker
          View.OnClickListener soundPickerListener = v -> {
              Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
              intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION);
              intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
              intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
  
              Uri currentSound = null;
              String defaultPath = null;
              Uri defaultUri = Settings.System.DEFAULT_NOTIFICATION_URI;
              if (defaultUri != null) {
                  defaultPath = defaultUri.getPath();
              }
  
              String path = messenger().getPreferences().getString("globalNotificationSound");
              if (path == null) {
                  path = defaultPath;
              }
              if (path != null && !path.equals("none")) {
                  if (path.equals(defaultPath)) {
                      currentSound = defaultUri;
                  } else {
                      currentSound = Uri.parse(path);
                  }
              }
              intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, currentSound);
              startActivityForResult(intent, SOUND_PICKER_REQUEST_CODE);
          };
          res.findViewById(R.id.soundPickerCont).setOnClickListener(soundPickerListener);
          ((TextView) res.findViewById(R.id.settings_sound_picker_title)).setTextColor(style.getTextPrimaryColor());
          ((TextView) res.findViewById(R.id.settings_sound_picker_hint)).setTextColor(style.getTextSecondaryColor());
          return res;
      }
  
      @Override
      public void onActivityResult(int requestCode, int resultCode, Intent data) {
          if (resultCode == Activity.RESULT_OK && requestCode == SOUND_PICKER_REQUEST_CODE) {
              Uri ringtone = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
  
              if (ringtone != null) {
                  messenger().getPreferences().putString("globalNotificationSound", ringtone.toString());
              } else {
                  messenger().getPreferences().putString("globalNotificationSound", "none");
              }
          }
      }
  }
  