diff --git a/LocationRinger/src/com/TwentyCodes/android/LocationRinger/db/RingerDatabase.java b/LocationRinger/src/com/TwentyCodes/android/LocationRinger/db/RingerDatabase.java index c24fa36..8103052 100644 --- a/LocationRinger/src/com/TwentyCodes/android/LocationRinger/db/RingerDatabase.java +++ b/LocationRinger/src/com/TwentyCodes/android/LocationRinger/db/RingerDatabase.java @@ -600,7 +600,21 @@ public class RingerDatabase { if(ringer == null || info == null) throw new NullPointerException("ringer content was null"); - String ringer_name = getRingerName(id); + final String ringer_name = getRingerName(id); + + /* + * here we retrive the old values. + * we will compare the old value against the new values. + * we will delete all values that are NOT included in the new values. + */ + final ContentValues old = getRingerInfo(ringer_name); + for(final Entry item : info.valueSet()){ + if(old.containsKey(item.getKey())) + old.remove(item.getKey()); + } + for(final Entry item : old.valueSet()){ + RingerDatabase.this.mDb.delete(RINGER_INFO_TABLE, KEY +" = "+ DatabaseUtils.sqlEscapeString(item.getKey()) +" and "+ KEY_RINGER_NAME +" = "+DatabaseUtils.sqlEscapeString(ringer_name), null); + } if(!ringer_name.equals(ringer.getAsString(RingerDatabase.KEY_RINGER_NAME))) ringer.put(RingerDatabase.KEY_RINGER_NAME, checkRingerName(ringer.getAsString(RingerDatabase.KEY_RINGER_NAME))); diff --git a/LocationRinger/src/com/TwentyCodes/android/LocationRinger/ui/RingerInformationActivity.java b/LocationRinger/src/com/TwentyCodes/android/LocationRinger/ui/RingerInformationActivity.java index b9d0215..f93ab8b 100644 --- a/LocationRinger/src/com/TwentyCodes/android/LocationRinger/ui/RingerInformationActivity.java +++ b/LocationRinger/src/com/TwentyCodes/android/LocationRinger/ui/RingerInformationActivity.java @@ -137,6 +137,11 @@ public class RingerInformationActivity extends FragmentActivity implements OnCon return super.onCreateOptionsMenu(menu); } + /** + * Called when the ringer info has changed + * (non-Javadoc) + * @see com.TwentyCodes.android.LocationRinger.OnContentChangedListener#onInfoContentChanged(android.content.ContentValues) + */ @Override public void onInfoContentChanged(ContentValues values) { if(Debug.DEBUG){ @@ -186,6 +191,11 @@ public class RingerInformationActivity extends FragmentActivity implements OnCon public void onPageSelected(int arg0) { } + /** + * Called when the ringer content has been changed + * (non-Javadoc) + * @see com.TwentyCodes.android.LocationRinger.OnContentChangedListener#onRingerContentChanged(android.content.ContentValues) + */ @Override public void onRingerContentChanged(ContentValues values) { if(Debug.DEBUG){ @@ -215,11 +225,21 @@ public class RingerInformationActivity extends FragmentActivity implements OnCon }).start(); } + /** + * Called when the scrolling state of the view pager is changed + * (non-Javadoc) + * @see com.TwentyCodes.android.LocationRinger.EnableScrollingListener#setScrollEnabled(boolean) + */ @Override public void setScrollEnabled(boolean enabled) { this.mPager.setScrollEnabled(enabled); } + /** + * Called when a feature is removed + * (non-Javadoc) + * @see com.TwentyCodes.android.LocationRinger.OnContentChangedListener#onInfoContentRemoved(java.lang.String[]) + */ @Override public void onInfoContentRemoved(String... keys) { for(String key : keys) diff --git a/LocationRinger/src/com/TwentyCodes/android/LocationRinger/ui/fragments/FeatureListFragment.java b/LocationRinger/src/com/TwentyCodes/android/LocationRinger/ui/fragments/FeatureListFragment.java index 1a52e4e..f0ed135 100644 --- a/LocationRinger/src/com/TwentyCodes/android/LocationRinger/ui/fragments/FeatureListFragment.java +++ b/LocationRinger/src/com/TwentyCodes/android/LocationRinger/ui/fragments/FeatureListFragment.java @@ -86,27 +86,27 @@ public class FeatureListFragment extends BaseFragmentListFragment implements OnC public Fragment initFeatureFragment(int fragmentCode){ Fragment f = null; switch(fragmentCode){ - case 0: + case KEY_ADDED_RINGTONE: f= new RingtoneFragment(this.mInfo, this.mListener, this, AudioManager.STREAM_RING, KEY_ADDED_RINGTONE); mAdded.add(KEY_ADDED_RINGTONE); break; - case 1: + case KEY_ADDED_NOTIFICATIONTONE: f = new RingtoneFragment(this.mInfo, this.mListener, this, AudioManager.STREAM_NOTIFICATION, KEY_ADDED_NOTIFICATIONTONE); mAdded.add(KEY_ADDED_NOTIFICATIONTONE); break; - case 2: + case KEY_ADDED_ALARM_VOLUME: f = new VolumeFragment(this.mInfo, this.getActivity(), this.mListener, this, AudioManager.STREAM_ALARM, KEY_ADDED_ALARM_VOLUME); mAdded.add(KEY_ADDED_ALARM_VOLUME); break; - case 3: + case KEY_ADDED_MUSIC_VOLUME: f = new VolumeFragment(this.mInfo, this.getActivity(), this.mListener, this, AudioManager.STREAM_MUSIC, KEY_ADDED_MUSIC_VOLUME); mAdded.add(KEY_ADDED_MUSIC_VOLUME); break; - case 4: + case KEY_ADDED_BT: f = new ToggleButtonFragment(android.R.drawable.stat_sys_data_bluetooth, this.getString(R.string.bluetooth), RingerDatabase.KEY_BT, this.mInfo, this.mListener, this, KEY_ADDED_BT); mAdded.add(KEY_ADDED_BT); break; - case 5: + case KEY_ADDED_WIFI: f = new ToggleButtonFragment(android.R.drawable.stat_sys_data_bluetooth, this.getString(R.string.wifi), RingerDatabase.KEY_WIFI, this.mInfo, this.mListener, this, KEY_ADDED_WIFI); mAdded.add(KEY_ADDED_WIFI); break; @@ -249,6 +249,9 @@ public class FeatureListFragment extends BaseFragmentListFragment implements OnC final int id = ((IdFragment) f).getFragmentId(); mAdded.remove(new Integer(id)); + /* + * we need to notify our parent activity that the feature have been removed. + */ switch(id){ case KEY_ADDED_RINGTONE: this.mListener.onInfoContentRemoved(RingerDatabase.KEY_RINGTONE_URI, RingerDatabase.KEY_RINGTONE_IS_SILENT, RingerDatabase.KEY_RINGTONE_VOLUME);