Android Open Source - led-notifier Color Vibrate Dialog






From Project

Back to project page led-notifier.

License

The source code is released under:

Apache License

If you think the Android project led-notifier listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.ciubotariu_levy.lednotifier;
/*from   w  ww . ja  v  a  2 s.c o  m*/
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Vibrator;
import android.provider.Settings;
import android.support.v4.app.DialogFragment;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;

import com.ciubotariu_levy.lednotifier.providers.LedContactInfo;
import com.larswerkman.holocolorpicker.EndColorPicker;
import com.larswerkman.holocolorpicker.OnColorChangedListener;
import com.makeramen.RoundedTransformationBuilder;
import com.squareup.picasso.Picasso;
import com.squareup.picasso.Transformation;

public class ColorVibrateDialog extends DialogFragment implements OnColorChangedListener {

  public interface ContactDetailsUpdateListener {
    public void onContactDetailsUpdated (LedContactInfo updatedData);
  }
  public static final String TAG = ColorVibrateDialog.class.getName();
      
  public static final String SILENT = "silent_ringtone";
  public static final String GLOBAL = "application_setting_ringtone";

  private static final String LOOKUP_URI = "lookup_uri";
  private static final String CONTACT_ID = "_id";
  private static final String CONTACT_NAME = "contact_name";
  private static final String CONTACT_NUM = "user_number";
  private static final String CONTACT_COLOR = "user_color";
  private static final String CONTACT_CURRENT_COLOR = "user_current_color";
  private static final String CONTACT_CUSTOM_VIB = "custom_vibrate_pattern";

  private static final String CONTACT_DATA = "contact_data";
  private static final int VIB_NO_REPEAT = -1;
  private static final int REQ_CODE = 1;

  //0xFF000000 to 0xFFFFFFFF
  private int mColor;
  private int mOriginalColor;

  private EndColorPicker mPicker;

  private String mVibratePattern;
  private String mPrevVibratePattern;
  private CircularColorView mColorState;
  private Vibrator vibratorService;
  private Button chooseRingtoneButton;
  private Intent ringtonePickerIntent;
  private LedContactInfo contactData;

  public static ColorVibrateDialog getInstance (String name, String number, String lookupUri, long id, int color,String vibratePattern){
    ColorVibrateDialog dialog = new ColorVibrateDialog ();
    Bundle args = new Bundle();
    args.putString(CONTACT_NAME, name);
    args.putString(CONTACT_NUM, number);
    args.putString (LOOKUP_URI, lookupUri);
    args.putLong(CONTACT_ID, id);
    args.putInt (CONTACT_COLOR, color);    
    args.putString(CONTACT_CUSTOM_VIB, vibratePattern);
    dialog.setArguments(args);
    return dialog;
  }

  public static ColorVibrateDialog getInstance (LedContactInfo data){
    ColorVibrateDialog dialog = new ColorVibrateDialog ();
    Bundle args = new Bundle();
    args.putParcelable(CONTACT_DATA, data);
    dialog.setArguments(args);
    return dialog;
  }

  public ColorVibrateDialog(){
    //Required Empty Constructor
  }

  @Override
  public void onCreate (Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    contactData = getArguments().getParcelable(CONTACT_DATA);
    ringtonePickerIntent = new Intent (RingtoneManager.ACTION_RINGTONE_PICKER);
    ringtonePickerIntent.putExtra (RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION);
    ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
    ringtonePickerIntent.putExtra (RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
    ringtonePickerIntent.putExtra (RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true);
    ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Custom contact ringtone");
  }

  @Override
  public void onColorChanged(int color) {
    mColor = color;
    mColorState.setColor(color);
  }

  @Override
  public void onViewCreated (final View view, Bundle savedInstanceState){
    view.findViewById(R.id.submit_color).setOnClickListener(new OnClickListener() {      
      @Override
      public void onClick(View v) {
        mVibratePattern = "";
        if (((CheckBox)view.findViewById(R.id.vibrate_checkbox)).isChecked()){
          mVibratePattern = ((EditText)view.findViewById(R.id.vib_input)).getText().toString().trim();
        } 
        if (!((CheckBox)view.findViewById(R.id.ringtone_checkbox)).isChecked()){
          contactData.ringtoneUri = GLOBAL;
        }
        onConfirm (mColor,mVibratePattern);
        dismiss();
      }
    });
    view.findViewById(R.id.cancel).setOnClickListener(new OnClickListener() {      
      @Override
      public void onClick(View v) {
        //onConfirm (originalColor,prevVibratePattern);
        dismiss();
      }
    });

  }

  @Override
  public void onActivityResult (int requestCode, int resultCode, Intent data){
    if (requestCode == REQ_CODE){
      if (resultCode == Activity.RESULT_OK){
        Uri ringtoneUri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
        onRingtoneSelected(ringtoneUri == null ? SILENT : ringtoneUri.toString());
      }
    }
    super.onActivityResult(requestCode, resultCode, data);
  }

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    View view = inflater.inflate(R.layout.custom_contact_dialog, container,false);

    ((TextView)view.findViewById(R.id.contact_name)).setText (contactData.lastKnownName);
    ((TextView)view.findViewById(R.id.contact_number)).setText (contactData.lastKnownNumber);

    Transformation transformation = new RoundedTransformationBuilder()
    .borderColor(Color.BLACK)
    .borderWidthDp(0)
    .cornerRadiusDp(30)
    .oval(false)
    .build();
    Uri contactUri = Uri.parse(contactData.systemLookupUri);
    ImageView contactPic = (ImageView) view.findViewById(R.id.contact_image);
    Picasso.with(getActivity())
    .load(contactUri)
    .placeholder(R.drawable.contact_picture_placeholder)
    .fit()
    .transform(transformation)
    .into(contactPic);

    mOriginalColor = contactData.color;
    mPrevVibratePattern = contactData.vibratePattern;
    mColor = mOriginalColor;
    mVibratePattern = mPrevVibratePattern;
    if (savedInstanceState != null){
      mColor = savedInstanceState.getInt(CONTACT_CURRENT_COLOR, mOriginalColor);
      mVibratePattern = savedInstanceState.getString(CONTACT_CUSTOM_VIB);
    }  
    mColorState = (CircularColorView) view.findViewById(R.id.contact_display_color);
    mColorState.setColor(mColor);
    mPicker = (EndColorPicker) view.findViewById(R.id.colorbar);
    mPicker.setColor(mColor);
    mPicker.setOnColorChangedListener(this);
    final View vibrateHint = view.findViewById(R.id.vib_hint);
    final View vibrateInputContainer = view.findViewById(R.id.vib_input_container);
    final EditText vibrateInput = (EditText) view.findViewById(R.id.vib_input);
    vibrateInput.setMaxHeight(vibrateInput.getHeight());
    
    Button insertCommaButton = (Button) view.findViewById(R.id.insert_comma);
    insertCommaButton.setOnClickListener(new OnClickListener() {
      
      @Override
      public void onClick(View v) {
        vibrateInput.append(",");  
      }
    });
    
    vibratorService = (Vibrator)getActivity().getSystemService(Context.VIBRATOR_SERVICE);
    final Button testVibrate = (Button) view.findViewById(R.id.test_vibrate);
    testVibrate.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View v) {
        long [] pattern = LedContactInfo.getVibratePattern(vibrateInput.getText().toString());
        vibratorService.vibrate(pattern, VIB_NO_REPEAT);
      }
    });

    CheckBox vibrateCheckbox = (CheckBox) view.findViewById(R.id.vibrate_checkbox);
    vibrateCheckbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

      @Override
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (isChecked){
          vibrateHint.setVisibility(View.VISIBLE);
          vibrateInputContainer.setVisibility(View.VISIBLE);
          testVibrate.setVisibility(View.VISIBLE);
          if (!TextUtils.isEmpty(mVibratePattern)){
            vibrateInput.setText(mVibratePattern);
            vibrateInput.setSelection(mVibratePattern.length());
          }
        }
        else{
          vibrateHint.setVisibility(View.GONE);
          vibrateInputContainer.setVisibility(View.GONE);
          testVibrate.setVisibility(View.GONE);
        }
      }
    });
    vibrateCheckbox.setChecked(!TextUtils.isEmpty(mVibratePattern));

    chooseRingtoneButton  = (Button) view.findViewById(R.id.choose_ringtone);
    chooseRingtoneButton.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View v) {
        Uri existingUri = Settings.System.DEFAULT_NOTIFICATION_URI;
        if (SILENT.equals(contactData.ringtoneUri)){
          Log.i("RingtonePicker", "silent picked");
          existingUri = null;
        } else if (!GLOBAL.equals(contactData.ringtoneUri)){
          Log.i("RingtonePicker", "Custom ringtone. Updating Intent.");
          existingUri =  contactData.ringtoneUri == null ? existingUri : Uri.parse(contactData.ringtoneUri);
        }
        ringtonePickerIntent.putExtra (RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, existingUri);
        startActivityForResult(ringtonePickerIntent, REQ_CODE);

      }
    });
    CheckBox ringtoneCheckbox = (CheckBox) view.findViewById(R.id.ringtone_checkbox);
    ringtoneCheckbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

      @Override
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {    
        chooseRingtoneButton.setVisibility (isChecked ? View.VISIBLE : View.GONE);
      }
    });

    boolean hasCustomRingtone =  !TextUtils.isEmpty(contactData.ringtoneUri) && !GLOBAL.equals(contactData.ringtoneUri);
    ringtoneCheckbox.setChecked(hasCustomRingtone);
    if (!hasCustomRingtone){
      onRingtoneSelected(GLOBAL);
    } else {
      onRingtoneSelected(contactData.ringtoneUri);
    }

    return view;
  }

  private void onRingtoneSelected (String uriString){
    contactData.ringtoneUri = uriString;
    String buttonText = "No custom ringtone";
    if (SILENT.equals(uriString)){
      buttonText = "Force silent";
    } else {
      try {
        Uri uri = Uri.parse(uriString);
        if (uri != null && !GLOBAL.equals(uriString)){
          Ringtone ringtone =  RingtoneManager.getRingtone(getActivity(), uri);
          buttonText = ringtone.getTitle(getActivity());
          ringtone.stop();
        }
      } catch (Exception e){
        Log.e("RingtoneTitle", "Error");
        e.printStackTrace();
      }
    }
    chooseRingtoneButton.setText(buttonText);
  }
  @Override
  public void onSaveInstanceState (Bundle outState){
    super.onSaveInstanceState(outState);
    outState.putInt(CONTACT_CURRENT_COLOR, mColor);
    outState.putString(CONTACT_CUSTOM_VIB, mVibratePattern);
  }

  //called when user chooses a color
  private void onConfirm (int color, String vibrate){
    vibrate = LedContactInfo.addZeroesWhereEmpty (vibrate);
    ContactDetailsUpdateListener listener = null;
    try{
      listener =(ContactDetailsUpdateListener) getParentFragment();
    }
    catch (ClassCastException e){
      e.printStackTrace();
    }
    if (listener == null){
      try{
        listener = (ContactDetailsUpdateListener) getActivity();
      }
      catch (ClassCastException e){
        e.printStackTrace();
      }
    }

    if (listener == null){
      return;
    }

    contactData.color = color;
    if (TextUtils.isEmpty(vibrate)){ 
      contactData.vibratePattern = "";
    }else {
      contactData.vibratePattern = vibrate;
    }

    listener.onContactDetailsUpdated(contactData);

  }

  @Override
  public void onCancel(DialogInterface dialog){
    super.onCancel(dialog);
    cleanupAndFinish();
  }

  @Override
  public void onDismiss(DialogInterface dialog){
    super.onDismiss(dialog);
    cleanupAndFinish();
  }

  private void cleanupAndFinish(){
    if (vibratorService != null){
      vibratorService.cancel();
    }
    if ((contactData == null || contactData.systemLookupUri == null)  && getActivity() != null){
      getActivity().finish();
    }
  }
}




Java Source Code List

com.ciubotariu_levy.lednotifier.AboutActivity.java
com.ciubotariu_levy.lednotifier.AlarmDismissReceiver.java
com.ciubotariu_levy.lednotifier.BoldCheckedView.java
com.ciubotariu_levy.lednotifier.BootBroadcastReceiver.java
com.ciubotariu_levy.lednotifier.CircularColorView.java
com.ciubotariu_levy.lednotifier.ColorDialog.java
com.ciubotariu_levy.lednotifier.ColorVibrateDialog.java
com.ciubotariu_levy.lednotifier.ContactsFragment.java
com.ciubotariu_levy.lednotifier.CustomContactsFragment.java
com.ciubotariu_levy.lednotifier.DataFetcher.java
com.ciubotariu_levy.lednotifier.DefaultColorChooserContainer.java
com.ciubotariu_levy.lednotifier.FastScrollThemedListView.java
com.ciubotariu_levy.lednotifier.LEDCancelReceiver.java
com.ciubotariu_levy.lednotifier.MainActivity.java
com.ciubotariu_levy.lednotifier.NotificationService.java
com.ciubotariu_levy.lednotifier.NotificationUtils.java
com.ciubotariu_levy.lednotifier.ObserverService.java
com.ciubotariu_levy.lednotifier.SMSAppAdapter.java
com.ciubotariu_levy.lednotifier.SMSAppChooserContainer.java
com.ciubotariu_levy.lednotifier.SMSReceiver.java
com.ciubotariu_levy.lednotifier.SectionedCursorAdapter.java
com.ciubotariu_levy.lednotifier.SettingsActivity.java
com.ciubotariu_levy.lednotifier.SmsAppChooserDialog.java
com.ciubotariu_levy.lednotifier.providers.LedContactInfo.java
com.ciubotariu_levy.lednotifier.providers.LedContactProvider.java
com.ciubotariu_levy.lednotifier.providers.LedContacts.java
com.larswerkman.holocolorpicker.ColorPicker.java
com.larswerkman.holocolorpicker.EndColorPicker.java
com.larswerkman.holocolorpicker.LinearColorPicker.java
com.larswerkman.holocolorpicker.OnColorChangedListener.java
com.larswerkman.holocolorpicker.OpacityBar.java
com.larswerkman.holocolorpicker.SVBar.java
com.larswerkman.holocolorpicker.SaturationBar.java
com.larswerkman.holocolorpicker.ValueBar.java
com.makeramen.RoundedDrawable.java
com.makeramen.RoundedTransformationBuilder.java