Merge branch 'Feature/#73'
This commit is contained in:
32
LocationRinger/res/layout/feature_title_bar.xml
Normal file
32
LocationRinger/res/layout/feature_title_bar.xml
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@android:drawable/title_bar"
|
||||||
|
android:orientation="horizontal" >
|
||||||
|
|
||||||
|
<ImageButton
|
||||||
|
android:id="@+id/close"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentRight="true"
|
||||||
|
android:src="@android:drawable/ic_menu_close_clear_cancel" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/title"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:text="test"
|
||||||
|
android:textColor="#FFFFFF" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/icon"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:src="@android:drawable/stat_sys_data_bluetooth" />
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:id="@android:id/list"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent" />
|
|
||||||
@@ -4,14 +4,12 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical" >
|
android:orientation="vertical" >
|
||||||
|
|
||||||
<TextView
|
<include
|
||||||
android:id="@+id/label"
|
android:id="@+id/title_bar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="10dip"
|
android:layout_marginTop="10dip"
|
||||||
android:background="@android:drawable/title_bar"
|
layout="@layout/feature_title_bar" />
|
||||||
android:text="@string/ringtone_options"
|
|
||||||
android:textColor="#FFFFFF" />
|
|
||||||
|
|
||||||
<EditText
|
<EditText
|
||||||
android:id="@+id/ringtone"
|
android:id="@+id/ringtone"
|
||||||
|
|||||||
@@ -4,14 +4,12 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical" >
|
android:orientation="vertical" >
|
||||||
|
|
||||||
<TextView
|
<include
|
||||||
android:id="@+id/label"
|
android:id="@+id/title_bar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="10dip"
|
android:layout_marginTop="10dip"
|
||||||
android:background="@android:drawable/title_bar"
|
layout="@layout/feature_title_bar" />
|
||||||
android:text="@string/ringtone_options"
|
|
||||||
android:textColor="#FFFFFF" />
|
|
||||||
|
|
||||||
<ToggleButton
|
<ToggleButton
|
||||||
android:id="@+id/toggle"
|
android:id="@+id/toggle"
|
||||||
|
|||||||
@@ -4,14 +4,12 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical" >
|
android:orientation="vertical" >
|
||||||
|
|
||||||
<TextView
|
<include
|
||||||
android:id="@+id/volume_label"
|
android:id="@+id/title_bar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="10dip"
|
android:layout_marginTop="10dip"
|
||||||
android:background="@android:drawable/title_bar"
|
layout="@layout/feature_title_bar" />
|
||||||
android:text="@string/volume"
|
|
||||||
android:textColor="#FFFFFF" />
|
|
||||||
|
|
||||||
<SeekBar
|
<SeekBar
|
||||||
android:id="@+id/volume"
|
android:id="@+id/volume"
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
/**
|
||||||
|
* FeatureRemovedListener.java
|
||||||
|
* @date May 26, 2012
|
||||||
|
* @author ricky barrette
|
||||||
|
* @author Twenty Codes, LLC
|
||||||
|
*/
|
||||||
|
package com.TwentyCodes.android.LocationRinger;
|
||||||
|
|
||||||
|
import android.support.v4.app.Fragment;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This interface will be used to notify
|
||||||
|
* @author ricky barrette
|
||||||
|
*/
|
||||||
|
public interface FeatureRemovedListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when a feature is removed from the list
|
||||||
|
* @author ricky barrette
|
||||||
|
*/
|
||||||
|
public void onFeatureRemoved(Fragment fragment);
|
||||||
|
}
|
||||||
@@ -19,4 +19,5 @@ public interface OnContentChangedListener {
|
|||||||
|
|
||||||
void onInfoContentChanged(ContentValues info);
|
void onInfoContentChanged(ContentValues info);
|
||||||
|
|
||||||
|
void onInfoContentRemoved(String... keys);
|
||||||
}
|
}
|
||||||
@@ -38,10 +38,10 @@ import com.TwentyCodes.android.LocationRinger.debug.Debug;
|
|||||||
public class RingerDatabase {
|
public class RingerDatabase {
|
||||||
|
|
||||||
private static final String TAG = "RingerDatabase";
|
private static final String TAG = "RingerDatabase";
|
||||||
private Context mContext;
|
private final Context mContext;
|
||||||
private SQLiteDatabase mDb;
|
private SQLiteDatabase mDb;
|
||||||
|
private final DatabaseListener mListener;
|
||||||
public boolean isUpgrading = false;
|
public boolean isUpgrading = false;
|
||||||
private DatabaseListener mListener;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* database information values
|
* database information values
|
||||||
@@ -109,7 +109,7 @@ public class RingerDatabase {
|
|||||||
*/
|
*/
|
||||||
private void convert2to3(SQLiteDatabase db){
|
private void convert2to3(SQLiteDatabase db){
|
||||||
//get all the ringer information from the old table
|
//get all the ringer information from the old table
|
||||||
Cursor cursor = db.query("two", new String[] { KEY_RINGER_NAME, KEY_RINGTONE,
|
final Cursor cursor = db.query("two", new String[] { KEY_RINGER_NAME, KEY_RINGTONE,
|
||||||
KEY_NOTIFICATION_RINGTONE, KEY_RINGTONE_IS_SILENT,
|
KEY_NOTIFICATION_RINGTONE, KEY_RINGTONE_IS_SILENT,
|
||||||
KEY_NOTIFICATION_IS_SILENT, KEY_IS_ENABLED,
|
KEY_NOTIFICATION_IS_SILENT, KEY_IS_ENABLED,
|
||||||
KEY_RADIUS, KEY_LOCATION_LAT, KEY_LOCATION_LON,
|
KEY_RADIUS, KEY_LOCATION_LAT, KEY_LOCATION_LON,
|
||||||
@@ -124,7 +124,7 @@ public class RingerDatabase {
|
|||||||
int count = cursor.getColumnCount();
|
int count = cursor.getColumnCount();
|
||||||
if (cursor.moveToFirst()) {
|
if (cursor.moveToFirst()) {
|
||||||
do {
|
do {
|
||||||
ContentValues ringer = new ContentValues();
|
final ContentValues ringer = new ContentValues();
|
||||||
if(Debug.DEBUG)
|
if(Debug.DEBUG)
|
||||||
Log.v(TAG, "Converting: " + cursor.getString(0));
|
Log.v(TAG, "Converting: " + cursor.getString(0));
|
||||||
for(int i = 0; i < count; i++){
|
for(int i = 0; i < count; i++){
|
||||||
@@ -278,10 +278,15 @@ public class RingerDatabase {
|
|||||||
* @author ricky barrette
|
* @author ricky barrette
|
||||||
*/
|
*/
|
||||||
public RingerDatabase(Context context){
|
public RingerDatabase(Context context){
|
||||||
this.mContext = context;
|
this(context, null);
|
||||||
this.mDb = new OpenHelper(this.mContext).getWritableDatabase();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new RingerDatabase
|
||||||
|
* @param context
|
||||||
|
* @param listener
|
||||||
|
* @author ricky barrette
|
||||||
|
*/
|
||||||
public RingerDatabase(Context context, DatabaseListener listener){
|
public RingerDatabase(Context context, DatabaseListener listener){
|
||||||
this.mListener = listener;
|
this.mListener = listener;
|
||||||
this.mContext = context;
|
this.mContext = context;
|
||||||
@@ -308,13 +313,14 @@ public class RingerDatabase {
|
|||||||
* @author ricky barrette
|
* @author ricky barrette
|
||||||
*/
|
*/
|
||||||
public boolean backup(){
|
public boolean backup(){
|
||||||
File dbFile = new File(Environment.getDataDirectory() + "/data/"+mContext.getPackageName()+"/databases/"+DATABASE_NAME);
|
final File dbFile = new File(Environment.getDataDirectory() + "/data/"+mContext.getPackageName()+"/databases/"+DATABASE_NAME);
|
||||||
|
|
||||||
File exportDir = new File(Environment.getExternalStorageDirectory(), "/"+this.mContext.getString(R.string.app_name));
|
final File exportDir = new File(Environment.getExternalStorageDirectory(), "/"+this.mContext.getString(R.string.app_name));
|
||||||
if (!exportDir.exists()) {
|
if (!exportDir.exists()) {
|
||||||
exportDir.mkdirs();
|
exportDir.mkdirs();
|
||||||
}
|
}
|
||||||
File file = new File(exportDir, dbFile.getName());
|
|
||||||
|
final File file = new File(exportDir, dbFile.getName());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
file.createNewFile();
|
file.createNewFile();
|
||||||
@@ -331,9 +337,9 @@ public class RingerDatabase {
|
|||||||
* @param name
|
* @param name
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private String checkRingerName(String name){
|
private String checkRingerName(final String name){
|
||||||
|
|
||||||
List<String> names = this.getAllRingerTitles();
|
final List<String> names = this.getAllRingerTitles();
|
||||||
String ringerName = name;
|
String ringerName = name;
|
||||||
int count = 1;
|
int count = 1;
|
||||||
|
|
||||||
@@ -344,8 +350,6 @@ public class RingerDatabase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ringerName;
|
return ringerName;
|
||||||
|
|
||||||
// return checkRingerName(name, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -355,9 +359,9 @@ public class RingerDatabase {
|
|||||||
* @throws IOException
|
* @throws IOException
|
||||||
* @author ricky barrette
|
* @author ricky barrette
|
||||||
*/
|
*/
|
||||||
private void copyFile(File src, File dst) throws IOException {
|
private void copyFile(final File src, final File dst) throws IOException {
|
||||||
FileChannel inChannel = new FileInputStream(src).getChannel();
|
final FileChannel inChannel = new FileInputStream(src).getChannel();
|
||||||
FileChannel outChannel = new FileOutputStream(dst).getChannel();
|
final FileChannel outChannel = new FileOutputStream(dst).getChannel();
|
||||||
try {
|
try {
|
||||||
inChannel.transferTo(0, inChannel.size(), outChannel);
|
inChannel.transferTo(0, inChannel.size(), outChannel);
|
||||||
} finally {
|
} finally {
|
||||||
@@ -421,8 +425,8 @@ public class RingerDatabase {
|
|||||||
* @author ricky barrette
|
* @author ricky barrette
|
||||||
*/
|
*/
|
||||||
public List<String> getAllRingerTitles() {
|
public List<String> getAllRingerTitles() {
|
||||||
List<String> list = new ArrayList<String>();
|
final List<String> list = new ArrayList<String>();
|
||||||
Cursor cursor = this.mDb.query(RINGER_TABLE, new String[] { KEY_RINGER_NAME }, null, null, null, null, null);
|
final Cursor cursor = this.mDb.query(RINGER_TABLE, new String[] { KEY_RINGER_NAME }, null, null, null, null, null);
|
||||||
if (cursor.moveToFirst()) {
|
if (cursor.moveToFirst()) {
|
||||||
do {
|
do {
|
||||||
list.add(cursor.getString(0));
|
list.add(cursor.getString(0));
|
||||||
@@ -440,8 +444,8 @@ public class RingerDatabase {
|
|||||||
* @author ricky barrette
|
* @author ricky barrette
|
||||||
*/
|
*/
|
||||||
public List<String> getAllRingerDescriptions() {
|
public List<String> getAllRingerDescriptions() {
|
||||||
List<String> list = new ArrayList<String>();
|
final List<String> list = new ArrayList<String>();
|
||||||
List<String> ringers = getAllRingerTitles();
|
final List<String> ringers = getAllRingerTitles();
|
||||||
for(String ringer: ringers){
|
for(String ringer: ringers){
|
||||||
list.add(getRingerInfo(ringer).getAsString(KEY_RINGER_DESCRIPTION));
|
list.add(getRingerInfo(ringer).getAsString(KEY_RINGER_DESCRIPTION));
|
||||||
}
|
}
|
||||||
@@ -464,9 +468,9 @@ public class RingerDatabase {
|
|||||||
* @return
|
* @return
|
||||||
* @author ricky barrette
|
* @author ricky barrette
|
||||||
*/
|
*/
|
||||||
public ContentValues getRingerInfo(String ringerName){
|
public ContentValues getRingerInfo(final String ringerName){
|
||||||
ContentValues values = new ContentValues();
|
final ContentValues values = new ContentValues();
|
||||||
Cursor info = this.mDb.query(RINGER_INFO_TABLE, new String[]{ KEY, KEY_VALUE }, KEY_RINGER_NAME +" = "+ DatabaseUtils.sqlEscapeString(ringerName), null, null, null, null);
|
final Cursor info = this.mDb.query(RINGER_INFO_TABLE, new String[]{ KEY, KEY_VALUE }, KEY_RINGER_NAME +" = "+ DatabaseUtils.sqlEscapeString(ringerName), null, null, null, null);
|
||||||
if (info.moveToFirst()) {
|
if (info.moveToFirst()) {
|
||||||
do {
|
do {
|
||||||
values.put(info.getString(0), info.getString(1));
|
values.put(info.getString(0), info.getString(1));
|
||||||
@@ -484,9 +488,9 @@ public class RingerDatabase {
|
|||||||
* @return ringer's name
|
* @return ringer's name
|
||||||
* @author ricky barrette
|
* @author ricky barrette
|
||||||
*/
|
*/
|
||||||
public String getRingerName(long id) {
|
public String getRingerName(final long id) {
|
||||||
String name = null;
|
String name = null;
|
||||||
Cursor cursor = this.mDb.query(RINGER_TABLE, new String[]{ KEY_RINGER_NAME }, "id = "+id, null, null, null, null);;
|
final Cursor cursor = this.mDb.query(RINGER_TABLE, new String[]{ KEY_RINGER_NAME }, "id = "+id, null, null, null, null);;
|
||||||
if (cursor.moveToFirst()) {
|
if (cursor.moveToFirst()) {
|
||||||
name = cursor.getString(0);
|
name = cursor.getString(0);
|
||||||
}
|
}
|
||||||
@@ -502,14 +506,14 @@ public class RingerDatabase {
|
|||||||
* @param ringerInfo values
|
* @param ringerInfo values
|
||||||
* @author ricky barrette
|
* @author ricky barrette
|
||||||
*/
|
*/
|
||||||
public void insertRinger(ContentValues ringer, ContentValues ringerInfo){
|
public void insertRinger(final ContentValues ringer, final ContentValues ringerInfo){
|
||||||
ringer.put(RingerDatabase.KEY_RINGER_NAME, checkRingerName(ringer.getAsString(RingerDatabase.KEY_RINGER_NAME)));
|
ringer.put(RingerDatabase.KEY_RINGER_NAME, checkRingerName(ringer.getAsString(RingerDatabase.KEY_RINGER_NAME)));
|
||||||
mDb.insert(RINGER_TABLE, null, ringer);
|
mDb.insert(RINGER_TABLE, null, ringer);
|
||||||
String ringerName = ringer.getAsString(RingerDatabase.KEY_RINGER_NAME);
|
final String ringerName = ringer.getAsString(RingerDatabase.KEY_RINGER_NAME);
|
||||||
|
|
||||||
//insert the information values
|
//insert the information values
|
||||||
for(Entry<String, Object> item : ringerInfo.valueSet()){
|
for(final Entry<String, Object> item : ringerInfo.valueSet()){
|
||||||
ContentValues values = new ContentValues();
|
final ContentValues values = new ContentValues();
|
||||||
values.put(KEY_RINGER_NAME, ringerName);
|
values.put(KEY_RINGER_NAME, ringerName);
|
||||||
values.put(KEY, item.getKey());
|
values.put(KEY, item.getKey());
|
||||||
/*
|
/*
|
||||||
@@ -540,8 +544,8 @@ public class RingerDatabase {
|
|||||||
* @return true if the ringer is enabled
|
* @return true if the ringer is enabled
|
||||||
* @author ricky barrette
|
* @author ricky barrette
|
||||||
*/
|
*/
|
||||||
public boolean isRingerEnabled(long id) {
|
public boolean isRingerEnabled(final long id) {
|
||||||
Cursor cursor = this.mDb.query(RINGER_TABLE, new String[] { KEY_IS_ENABLED }, "id = "+id, null, null, null, null);
|
final Cursor cursor = this.mDb.query(RINGER_TABLE, new String[] { KEY_IS_ENABLED }, "id = "+id, null, null, null, null);
|
||||||
if (cursor.moveToFirst()) {
|
if (cursor.moveToFirst()) {
|
||||||
if(Debug.DEBUG)
|
if(Debug.DEBUG)
|
||||||
Log.d(TAG, "isRingerEnabled("+id+") = "+ cursor.getString(0));
|
Log.d(TAG, "isRingerEnabled("+id+") = "+ cursor.getString(0));
|
||||||
@@ -556,13 +560,14 @@ public class RingerDatabase {
|
|||||||
* @author ricky barrette
|
* @author ricky barrette
|
||||||
*/
|
*/
|
||||||
public void restore(){
|
public void restore(){
|
||||||
File dbFile = new File(Environment.getDataDirectory() + "/data/"+mContext.getPackageName()+"/databases/"+DATABASE_NAME);
|
final File dbFile = new File(Environment.getDataDirectory() + "/data/"+mContext.getPackageName()+"/databases/"+DATABASE_NAME);
|
||||||
|
|
||||||
File exportDir = new File(Environment.getExternalStorageDirectory(), "/"+this.mContext.getString(R.string.app_name));
|
final File exportDir = new File(Environment.getExternalStorageDirectory(), "/"+this.mContext.getString(R.string.app_name));
|
||||||
if (!exportDir.exists()) {
|
if (!exportDir.exists()) {
|
||||||
exportDir.mkdirs();
|
exportDir.mkdirs();
|
||||||
}
|
}
|
||||||
File file = new File(exportDir, dbFile.getName());
|
|
||||||
|
final File file = new File(exportDir, dbFile.getName());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
file.createNewFile();
|
file.createNewFile();
|
||||||
@@ -580,10 +585,10 @@ public class RingerDatabase {
|
|||||||
this.mListener.onRestoreComplete();
|
this.mListener.onRestoreComplete();
|
||||||
}
|
}
|
||||||
|
|
||||||
public int setRingerEnabled(long id, boolean enabled) {
|
public int setRingerEnabled(final long id, final boolean enabled) {
|
||||||
if(Debug.DEBUG)
|
if(Debug.DEBUG)
|
||||||
Log.d(TAG, "setRingerEnabled("+id+") = "+ enabled);
|
Log.d(TAG, "setRingerEnabled("+id+") = "+ enabled);
|
||||||
ContentValues values = new ContentValues();
|
final ContentValues values = new ContentValues();
|
||||||
values.put(KEY_IS_ENABLED, enabled);
|
values.put(KEY_IS_ENABLED, enabled);
|
||||||
return mDb.update(RINGER_TABLE, values, "id" + "= "+ id, null);
|
return mDb.update(RINGER_TABLE, values, "id" + "= "+ id, null);
|
||||||
}
|
}
|
||||||
@@ -595,19 +600,38 @@ public class RingerDatabase {
|
|||||||
* @param info values
|
* @param info values
|
||||||
* @author ricky barrette
|
* @author ricky barrette
|
||||||
*/
|
*/
|
||||||
public void updateRinger(long id, ContentValues ringer, ContentValues info) throws NullPointerException{
|
public void updateRinger(final long id, final ContentValues ringer, final ContentValues info) throws NullPointerException{
|
||||||
|
|
||||||
if(ringer == null || info == null)
|
if(ringer == null || info == null)
|
||||||
throw new NullPointerException("ringer content was 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<String, Object> item : info.valueSet()){
|
||||||
|
if(old.containsKey(item.getKey()))
|
||||||
|
old.remove(item.getKey());
|
||||||
|
}
|
||||||
|
for(final Entry<String, Object> item : old.valueSet()){
|
||||||
|
RingerDatabase.this.mDb.delete(RINGER_INFO_TABLE, KEY +" = "+ DatabaseUtils.sqlEscapeString(item.getKey()) +" and "+ KEY_RINGER_NAME +" = "+DatabaseUtils.sqlEscapeString(ringer_name), null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* here we want to update the ringer name if needed
|
||||||
|
*/
|
||||||
if(!ringer_name.equals(ringer.getAsString(RingerDatabase.KEY_RINGER_NAME)))
|
if(!ringer_name.equals(ringer.getAsString(RingerDatabase.KEY_RINGER_NAME)))
|
||||||
ringer.put(RingerDatabase.KEY_RINGER_NAME, checkRingerName(ringer.getAsString(RingerDatabase.KEY_RINGER_NAME)));
|
ringer.put(RingerDatabase.KEY_RINGER_NAME, checkRingerName(ringer.getAsString(RingerDatabase.KEY_RINGER_NAME)));
|
||||||
|
|
||||||
//update the information values in the info table
|
/*
|
||||||
for(Entry<String, Object> item : info.valueSet()){
|
* here we wanr to update the information values in the info table
|
||||||
ContentValues values = new ContentValues();
|
*/
|
||||||
|
for(final Entry<String, Object> item : info.valueSet()){
|
||||||
|
final ContentValues values = new ContentValues();
|
||||||
values.put(KEY_RINGER_NAME, ringer.getAsString(KEY_RINGER_NAME));
|
values.put(KEY_RINGER_NAME, ringer.getAsString(KEY_RINGER_NAME));
|
||||||
values.put(KEY, item.getKey());
|
values.put(KEY, item.getKey());
|
||||||
try {
|
try {
|
||||||
@@ -619,7 +643,11 @@ public class RingerDatabase {
|
|||||||
values.put(KEY_VALUE, (Integer) item.getValue());
|
values.put(KEY_VALUE, (Integer) item.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//try to update, if update fails insert
|
|
||||||
|
/*
|
||||||
|
* here we are going to try to update a row,
|
||||||
|
* if that fails we will insert a row insead
|
||||||
|
*/
|
||||||
if(!(mDb.update(RINGER_INFO_TABLE, values, KEY_RINGER_NAME + "="+ DatabaseUtils.sqlEscapeString(ringer_name) +" AND " + KEY +"='"+ item.getKey()+"'", null) > 0))
|
if(!(mDb.update(RINGER_INFO_TABLE, values, KEY_RINGER_NAME + "="+ DatabaseUtils.sqlEscapeString(ringer_name) +" AND " + KEY +"='"+ item.getKey()+"'", null) > 0))
|
||||||
mDb.insert(RINGER_INFO_TABLE, null, values);
|
mDb.insert(RINGER_INFO_TABLE, null, values);
|
||||||
}
|
}
|
||||||
@@ -636,7 +664,7 @@ public class RingerDatabase {
|
|||||||
private void updateRowIds(long id) {
|
private void updateRowIds(long id) {
|
||||||
long currentRow;
|
long currentRow;
|
||||||
ContentValues values = new ContentValues();
|
ContentValues values = new ContentValues();
|
||||||
Cursor cursor = this.mDb.query(RINGER_TABLE, new String[] { "id" },null, null, null, null, null);
|
final Cursor cursor = this.mDb.query(RINGER_TABLE, new String[] { "id" },null, null, null, null, null);
|
||||||
if (cursor.moveToFirst()) {
|
if (cursor.moveToFirst()) {
|
||||||
do {
|
do {
|
||||||
currentRow = cursor.getLong(0);
|
currentRow = cursor.getLong(0);
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ import android.app.ProgressDialog;
|
|||||||
import android.content.ContentValues;
|
import android.content.ContentValues;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.media.AudioManager;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
@@ -35,9 +34,6 @@ import com.TwentyCodes.android.LocationRinger.debug.Debug;
|
|||||||
import com.TwentyCodes.android.LocationRinger.ui.fragments.AboutRingerFragment;
|
import com.TwentyCodes.android.LocationRinger.ui.fragments.AboutRingerFragment;
|
||||||
import com.TwentyCodes.android.LocationRinger.ui.fragments.FeatureListFragment;
|
import com.TwentyCodes.android.LocationRinger.ui.fragments.FeatureListFragment;
|
||||||
import com.TwentyCodes.android.LocationRinger.ui.fragments.LocationInfomationFragment;
|
import com.TwentyCodes.android.LocationRinger.ui.fragments.LocationInfomationFragment;
|
||||||
import com.TwentyCodes.android.LocationRinger.ui.fragments.RingtoneFragment;
|
|
||||||
import com.TwentyCodes.android.LocationRinger.ui.fragments.ToggleButtonFragment;
|
|
||||||
import com.TwentyCodes.android.LocationRinger.ui.fragments.VolumeFragment;
|
|
||||||
import com.jakewharton.android.viewpagerindicator.TitlePageIndicator;
|
import com.jakewharton.android.viewpagerindicator.TitlePageIndicator;
|
||||||
import com.jakewharton.android.viewpagerindicator.TitledFragmentAdapter;
|
import com.jakewharton.android.viewpagerindicator.TitledFragmentAdapter;
|
||||||
|
|
||||||
@@ -63,12 +59,16 @@ public class RingerInformationActivity extends FragmentActivity implements OnCon
|
|||||||
Log.d(TAG, item.getKey() +" = "+ item.getValue());
|
Log.d(TAG, item.getKey() +" = "+ item.getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the activity is first created
|
||||||
|
* (non-Javadoc)
|
||||||
|
* @see android.support.v4.app.FragmentActivity#onCreate(android.os.Bundle)
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle arg0) {
|
protected void onCreate(Bundle arg0) {
|
||||||
super.onCreate(arg0);
|
super.onCreate(arg0);
|
||||||
setContentView(R.layout.ringer_information_activity);
|
setContentView(R.layout.ringer_information_activity);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set up the action bar if required
|
* Set up the action bar if required
|
||||||
*/
|
*/
|
||||||
@@ -112,47 +112,7 @@ public class RingerInformationActivity extends FragmentActivity implements OnCon
|
|||||||
if(!isDefault)
|
if(!isDefault)
|
||||||
fragments.add(new LocationInfomationFragment(this.mInfo, this, this));
|
fragments.add(new LocationInfomationFragment(this.mInfo, this, this));
|
||||||
|
|
||||||
/*
|
fragments.add(new FeatureListFragment(this.mInfo, this));
|
||||||
* What page
|
|
||||||
* ONLY Dynamically add the required fragments that have already been added.
|
|
||||||
*
|
|
||||||
* TODO
|
|
||||||
* update interval
|
|
||||||
*/
|
|
||||||
ArrayList<Fragment> what = new ArrayList<Fragment>();
|
|
||||||
ArrayList<Integer> added = new ArrayList<Integer>();
|
|
||||||
|
|
||||||
if(this.mInfo.containsKey(RingerDatabase.KEY_RINGTONE_IS_SILENT) || this.mInfo.containsKey(RingerDatabase.KEY_RINGTONE_VOLUME)){
|
|
||||||
what.add(new RingtoneFragment(this.mInfo, this, AudioManager.STREAM_RING));
|
|
||||||
added.add(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this.mInfo.containsKey(RingerDatabase.KEY_NOTIFICATION_IS_SILENT) || this.mInfo.containsKey(RingerDatabase.KEY_NOTIFICATION_RINGTONE_VOLUME)){
|
|
||||||
what.add(new RingtoneFragment(this.mInfo, this, AudioManager.STREAM_NOTIFICATION));
|
|
||||||
added.add(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this.mInfo.containsKey(RingerDatabase.KEY_ALARM_VOLUME)){
|
|
||||||
what.add(new VolumeFragment(this.mInfo, this, this, AudioManager.STREAM_ALARM));
|
|
||||||
added.add(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this.mInfo.containsKey(RingerDatabase.KEY_MUSIC_VOLUME)){
|
|
||||||
what.add(new VolumeFragment(this.mInfo, this, this, AudioManager.STREAM_MUSIC));
|
|
||||||
added.add(3);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this.mInfo.containsKey(RingerDatabase.KEY_BT)){
|
|
||||||
what.add(new ToggleButtonFragment(this.getString(R.string.bluetooth), RingerDatabase.KEY_BT, this.mInfo, this));
|
|
||||||
added.add(4);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this.mInfo.containsKey(RingerDatabase.KEY_WIFI)){
|
|
||||||
what.add(new ToggleButtonFragment(this.getString(R.string.wifi), RingerDatabase.KEY_WIFI, this.mInfo, this));
|
|
||||||
added.add(5);
|
|
||||||
}
|
|
||||||
|
|
||||||
fragments.add(new FeatureListFragment(this.mInfo, this, what, added));
|
|
||||||
|
|
||||||
//Populate the pager
|
//Populate the pager
|
||||||
this.mPager = (ViewPager)findViewById(R.id.pager);
|
this.mPager = (ViewPager)findViewById(R.id.pager);
|
||||||
@@ -165,11 +125,6 @@ public class RingerInformationActivity extends FragmentActivity implements OnCon
|
|||||||
indicator.setViewPager(this.mPager);
|
indicator.setViewPager(this.mPager);
|
||||||
|
|
||||||
indicator.setOnPageChangeListener(this);
|
indicator.setOnPageChangeListener(this);
|
||||||
|
|
||||||
/*
|
|
||||||
* TODO
|
|
||||||
* button bar
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -182,6 +137,11 @@ public class RingerInformationActivity extends FragmentActivity implements OnCon
|
|||||||
return super.onCreateOptionsMenu(menu);
|
return super.onCreateOptionsMenu(menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the ringer info has changed
|
||||||
|
* (non-Javadoc)
|
||||||
|
* @see com.TwentyCodes.android.LocationRinger.OnContentChangedListener#onInfoContentChanged(android.content.ContentValues)
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void onInfoContentChanged(ContentValues values) {
|
public void onInfoContentChanged(ContentValues values) {
|
||||||
if(Debug.DEBUG){
|
if(Debug.DEBUG){
|
||||||
@@ -229,10 +189,13 @@ public class RingerInformationActivity extends FragmentActivity implements OnCon
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPageSelected(int arg0) {
|
public void onPageSelected(int arg0) {
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the ringer content has been changed
|
||||||
|
* (non-Javadoc)
|
||||||
|
* @see com.TwentyCodes.android.LocationRinger.OnContentChangedListener#onRingerContentChanged(android.content.ContentValues)
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void onRingerContentChanged(ContentValues values) {
|
public void onRingerContentChanged(ContentValues values) {
|
||||||
if(Debug.DEBUG){
|
if(Debug.DEBUG){
|
||||||
@@ -262,9 +225,26 @@ public class RingerInformationActivity extends FragmentActivity implements OnCon
|
|||||||
}).start();
|
}).start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the scrolling state of the view pager is changed
|
||||||
|
* (non-Javadoc)
|
||||||
|
* @see com.TwentyCodes.android.LocationRinger.EnableScrollingListener#setScrollEnabled(boolean)
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void setScrollEnabled(boolean enabled) {
|
public void setScrollEnabled(boolean enabled) {
|
||||||
this.mPager.setScrollEnabled(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)
|
||||||
|
if(this.mInfo.containsKey(key))
|
||||||
|
this.mInfo.remove(key);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -32,7 +32,7 @@ public abstract class BaseFragmentListFragment extends Fragment {
|
|||||||
private final int mLayout;
|
private final int mLayout;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new BaseFragmentListFragment
|
* Creates a new Populated BaseFragmentListFragment
|
||||||
* @author ricky barrette
|
* @author ricky barrette
|
||||||
*/
|
*/
|
||||||
public BaseFragmentListFragment(ArrayList<Fragment> fragments, int layout, int container) {
|
public BaseFragmentListFragment(ArrayList<Fragment> fragments, int layout, int container) {
|
||||||
@@ -42,6 +42,18 @@ public abstract class BaseFragmentListFragment extends Fragment {
|
|||||||
mContainer = container;
|
mContainer = container;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new Empty Base Fragment List
|
||||||
|
* @param layout
|
||||||
|
* @param container
|
||||||
|
* @author ricky barrette
|
||||||
|
*/
|
||||||
|
public BaseFragmentListFragment(int layout, int container) {
|
||||||
|
mLayout = layout;
|
||||||
|
mContainer = container;
|
||||||
|
mFragments = new ArrayList<Fragment>();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds the fragment to the list
|
* Adds the fragment to the list
|
||||||
* @param fragment
|
* @param fragment
|
||||||
@@ -54,6 +66,31 @@ public abstract class BaseFragmentListFragment extends Fragment {
|
|||||||
transaction.commit();
|
transaction.commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a collection ofs fragments to the list
|
||||||
|
* @param fragments
|
||||||
|
* @author ricky barrette
|
||||||
|
*/
|
||||||
|
public void addAll(final ArrayList<Fragment> fragments){
|
||||||
|
final FragmentTransaction transaction = this.getFragmentManager().beginTransaction();
|
||||||
|
for(Fragment f : fragments){
|
||||||
|
this.mFragments.add(f);
|
||||||
|
transaction.add(mContainer, f, f.getTag());
|
||||||
|
}
|
||||||
|
transaction.commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a collection ofs fragments to the list, but doesn't preform any transactions
|
||||||
|
* @param fragment
|
||||||
|
* @author ricky barrette
|
||||||
|
*/
|
||||||
|
protected void addAllInit(final ArrayList<Fragment> fragments){
|
||||||
|
for(Fragment f : fragments){
|
||||||
|
this.mFragments.add(f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads all the fragments
|
* Loads all the fragments
|
||||||
* @author ricky barrette
|
* @author ricky barrette
|
||||||
|
|||||||
@@ -22,38 +22,132 @@ import android.view.ViewGroup;
|
|||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import com.TwentyCodes.android.LocationRinger.FeatureRemovedListener;
|
||||||
import com.TwentyCodes.android.LocationRinger.OnContentChangedListener;
|
import com.TwentyCodes.android.LocationRinger.OnContentChangedListener;
|
||||||
import com.TwentyCodes.android.LocationRinger.R;
|
import com.TwentyCodes.android.LocationRinger.R;
|
||||||
import com.TwentyCodes.android.LocationRinger.db.RingerDatabase;
|
import com.TwentyCodes.android.LocationRinger.db.RingerDatabase;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This fragment will be used to display a list of features
|
* This fragment will be used to display a list of features
|
||||||
* TODO
|
|
||||||
* + create button bar that had a plus button and a hint + add/remove features
|
|
||||||
*
|
|
||||||
* @author ricky
|
* @author ricky
|
||||||
*/
|
*/
|
||||||
public class FeatureListFragment extends BaseFragmentListFragment implements OnClickListener, android.content.DialogInterface.OnClickListener {
|
public class FeatureListFragment extends BaseFragmentListFragment implements OnClickListener, android.content.DialogInterface.OnClickListener, FeatureRemovedListener {
|
||||||
|
|
||||||
private static final String TAG = "FeatureListFragment";
|
private static final int KEY_ADDED_RINGTONE = 0;
|
||||||
|
private static final int KEY_ADDED_NOTIFICATIONTONE = 1;
|
||||||
|
private static final int KEY_ADDED_ALARM_VOLUME = 2;
|
||||||
|
private static final int KEY_ADDED_MUSIC_VOLUME = 3;
|
||||||
|
private static final int KEY_ADDED_BT = 4;
|
||||||
|
private static final int KEY_ADDED_WIFI = 5;
|
||||||
private final ContentValues mInfo;
|
private final ContentValues mInfo;
|
||||||
private final OnContentChangedListener mListener;
|
private final OnContentChangedListener mListener;
|
||||||
private final ArrayList<Integer> mAdded;
|
private final ArrayList<Integer> mAdded;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new FeatureListFragment
|
* Creates a new populated FeatureListFragment
|
||||||
* @param info
|
* @param info
|
||||||
* @param listener
|
* @param listener
|
||||||
* @param fragments
|
* @param fragments
|
||||||
* @author ricky barrette
|
* @author ricky barrette
|
||||||
*/
|
*/
|
||||||
public FeatureListFragment(ContentValues info, OnContentChangedListener listener, ArrayList<Fragment> fragments, ArrayList<Integer> added) {
|
public FeatureListFragment(ContentValues info, OnContentChangedListener listener, ArrayList<Fragment> fragments, ArrayList<Integer> added) {
|
||||||
super(fragments, R.layout.fragment_list_contianer, R.id.fragment_list_contianer);
|
super(R.layout.fragment_list_contianer, R.id.fragment_list_contianer);
|
||||||
|
|
||||||
|
if ( info == null )
|
||||||
|
throw new NullPointerException();
|
||||||
|
if ( listener == null )
|
||||||
|
throw new NullPointerException();
|
||||||
|
if ( fragments == null )
|
||||||
|
throw new NullPointerException();
|
||||||
|
if ( added == null )
|
||||||
|
throw new NullPointerException();
|
||||||
|
|
||||||
mInfo = info;
|
mInfo = info;
|
||||||
mListener = listener;
|
mListener = listener;
|
||||||
mAdded = added;
|
mAdded = added;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new empty feature list fragment
|
||||||
|
* @param info
|
||||||
|
* @param listener
|
||||||
|
* @author ricky barrette
|
||||||
|
*/
|
||||||
|
public FeatureListFragment(ContentValues info, OnContentChangedListener listener){
|
||||||
|
this(info, listener, new ArrayList<Fragment>(), new ArrayList<Integer>());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes a feature fragment
|
||||||
|
* @param fragmentCode
|
||||||
|
* @return
|
||||||
|
* @author ricky barrette
|
||||||
|
*/
|
||||||
|
public Fragment initFeatureFragment(int fragmentCode){
|
||||||
|
Fragment f = null;
|
||||||
|
switch(fragmentCode){
|
||||||
|
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 KEY_ADDED_NOTIFICATIONTONE:
|
||||||
|
f = new RingtoneFragment(this.mInfo, this.mListener, this, AudioManager.STREAM_NOTIFICATION, KEY_ADDED_NOTIFICATIONTONE);
|
||||||
|
mAdded.add(KEY_ADDED_NOTIFICATIONTONE);
|
||||||
|
break;
|
||||||
|
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 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 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 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;
|
||||||
|
|
||||||
|
}
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes feature fragments based upon current records
|
||||||
|
* @author ricky barrette
|
||||||
|
*/
|
||||||
|
private ArrayList<Fragment> initList() {
|
||||||
|
ArrayList<Fragment> what = new ArrayList<Fragment>();
|
||||||
|
|
||||||
|
if(this.mInfo.containsKey(RingerDatabase.KEY_RINGTONE_IS_SILENT) || this.mInfo.containsKey(RingerDatabase.KEY_RINGTONE_VOLUME)){
|
||||||
|
what.add(initFeatureFragment(KEY_ADDED_RINGTONE));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this.mInfo.containsKey(RingerDatabase.KEY_NOTIFICATION_IS_SILENT) || this.mInfo.containsKey(RingerDatabase.KEY_NOTIFICATION_RINGTONE_VOLUME)){
|
||||||
|
what.add(initFeatureFragment(KEY_ADDED_NOTIFICATIONTONE));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this.mInfo.containsKey(RingerDatabase.KEY_ALARM_VOLUME)){
|
||||||
|
what.add(initFeatureFragment(KEY_ADDED_ALARM_VOLUME));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this.mInfo.containsKey(RingerDatabase.KEY_MUSIC_VOLUME)){
|
||||||
|
what.add(initFeatureFragment(KEY_ADDED_MUSIC_VOLUME));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this.mInfo.containsKey(RingerDatabase.KEY_BT)){
|
||||||
|
what.add(initFeatureFragment(KEY_ADDED_BT));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this.mInfo.containsKey(RingerDatabase.KEY_WIFI)){
|
||||||
|
what.add(initFeatureFragment(KEY_ADDED_WIFI));
|
||||||
|
}
|
||||||
|
return what;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when an item is picked from the add featue list
|
* Called when an item is picked from the add featue list
|
||||||
* (non-Javadoc)
|
* (non-Javadoc)
|
||||||
@@ -61,37 +155,7 @@ public class FeatureListFragment extends BaseFragmentListFragment implements OnC
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
Fragment f = null;
|
final Fragment f = initFeatureFragment(which);
|
||||||
switch(which){
|
|
||||||
case 0:
|
|
||||||
f= new RingtoneFragment(this.mInfo, this.mListener, AudioManager.STREAM_RING);
|
|
||||||
mAdded.add(0);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
f = new RingtoneFragment(this.mInfo, this.mListener, AudioManager.STREAM_NOTIFICATION);
|
|
||||||
mAdded.add(1);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
f = new VolumeFragment(this.mInfo, this.getActivity(), this.mListener, AudioManager.STREAM_ALARM);
|
|
||||||
mAdded.add(2);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
f = new VolumeFragment(this.mInfo, this.getActivity(), this.mListener, AudioManager.STREAM_MUSIC);
|
|
||||||
mAdded.add(3);
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
f = new ToggleButtonFragment(this.getString(R.string.bluetooth), RingerDatabase.KEY_BT, this.mInfo, this.mListener);
|
|
||||||
mAdded.add(4);
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
f = new ToggleButtonFragment(this.getString(R.string.wifi), RingerDatabase.KEY_WIFI, this.mInfo, this.mListener);
|
|
||||||
mAdded.add(5);
|
|
||||||
break;
|
|
||||||
// case 6:
|
|
||||||
// f =
|
|
||||||
// break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(f != null)
|
if(f != null)
|
||||||
add(f);
|
add(f);
|
||||||
}
|
}
|
||||||
@@ -150,6 +214,18 @@ public class FeatureListFragment extends BaseFragmentListFragment implements OnC
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Called when the activity is first created
|
||||||
|
* (non-Javadoc)
|
||||||
|
* @see android.support.v4.app.Fragment#onCreate(android.os.Bundle)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle arg0) {
|
||||||
|
addAllInit(initList());
|
||||||
|
super.onCreate(arg0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the view needs to be created
|
||||||
* (non-Javadoc)
|
* (non-Javadoc)
|
||||||
* @see com.TwentyCodes.android.LocationRinger.ui.fragments.BaseFragmentListFragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle)
|
* @see com.TwentyCodes.android.LocationRinger.ui.fragments.BaseFragmentListFragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle)
|
||||||
*/
|
*/
|
||||||
@@ -159,4 +235,43 @@ public class FeatureListFragment extends BaseFragmentListFragment implements OnC
|
|||||||
v.findViewById(R.id.add_feature_button).setOnClickListener(this);
|
v.findViewById(R.id.add_feature_button).setOnClickListener(this);
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when a fragment needs to be removed
|
||||||
|
* (non-Javadoc)
|
||||||
|
* @see com.TwentyCodes.android.LocationRinger.FeatureRemovedListener#onFeatureRemoved(android.support.v4.app.Fragment)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void onFeatureRemoved(Fragment f) {
|
||||||
|
this.remove(f);
|
||||||
|
|
||||||
|
if(f instanceof IdFragment){
|
||||||
|
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);
|
||||||
|
break;
|
||||||
|
case KEY_ADDED_NOTIFICATIONTONE:
|
||||||
|
this.mListener.onInfoContentRemoved(RingerDatabase.KEY_NOTIFICATION_RINGTONE_URI, RingerDatabase.KEY_NOTIFICATION_IS_SILENT, RingerDatabase.KEY_NOTIFICATION_RINGTONE_VOLUME);
|
||||||
|
break;
|
||||||
|
case KEY_ADDED_ALARM_VOLUME:
|
||||||
|
this.mListener.onInfoContentRemoved(RingerDatabase.KEY_ALARM_VOLUME);
|
||||||
|
break;
|
||||||
|
case KEY_ADDED_MUSIC_VOLUME:
|
||||||
|
this.mListener.onInfoContentRemoved(RingerDatabase.KEY_MUSIC_VOLUME);
|
||||||
|
break;
|
||||||
|
case KEY_ADDED_BT:
|
||||||
|
this.mListener.onInfoContentRemoved(RingerDatabase.KEY_BT);
|
||||||
|
break;
|
||||||
|
case KEY_ADDED_WIFI:
|
||||||
|
this.mListener.onInfoContentRemoved(RingerDatabase.KEY_WIFI);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
/**
|
||||||
|
* IdFragment.java
|
||||||
|
* @date May 26, 2012
|
||||||
|
* @author ricky barrette
|
||||||
|
* @author Twenty Codes, LLC
|
||||||
|
*/
|
||||||
|
package com.TwentyCodes.android.LocationRinger.ui.fragments;
|
||||||
|
|
||||||
|
import android.support.v4.app.Fragment;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is a simple extention of a fragment that will allow for storage of an id
|
||||||
|
* @author ricky barrette
|
||||||
|
*/
|
||||||
|
public class IdFragment extends Fragment {
|
||||||
|
|
||||||
|
private final int mId;
|
||||||
|
|
||||||
|
public IdFragment(int id){
|
||||||
|
super();
|
||||||
|
mId = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the id of this fragment
|
||||||
|
*/
|
||||||
|
public int getFragmentId() {
|
||||||
|
return mId;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -17,17 +17,18 @@ import android.media.Ringtone;
|
|||||||
import android.media.RingtoneManager;
|
import android.media.RingtoneManager;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.Fragment;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
|
import android.widget.ImageView;
|
||||||
import android.widget.SeekBar;
|
import android.widget.SeekBar;
|
||||||
import android.widget.SeekBar.OnSeekBarChangeListener;
|
import android.widget.SeekBar.OnSeekBarChangeListener;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import com.TwentyCodes.android.LocationRinger.FeatureRemovedListener;
|
||||||
import com.TwentyCodes.android.LocationRinger.OnContentChangedListener;
|
import com.TwentyCodes.android.LocationRinger.OnContentChangedListener;
|
||||||
import com.TwentyCodes.android.LocationRinger.R;
|
import com.TwentyCodes.android.LocationRinger.R;
|
||||||
import com.TwentyCodes.android.LocationRinger.db.RingerDatabase;
|
import com.TwentyCodes.android.LocationRinger.db.RingerDatabase;
|
||||||
@@ -37,26 +38,37 @@ import com.TwentyCodes.android.LocationRinger.debug.Debug;
|
|||||||
* This fragment will be for ringtone settings
|
* This fragment will be for ringtone settings
|
||||||
* @author ricky
|
* @author ricky
|
||||||
*/
|
*/
|
||||||
public class RingtoneFragment extends Fragment implements OnClickListener, OnSeekBarChangeListener {
|
public class RingtoneFragment extends IdFragment implements OnClickListener, OnSeekBarChangeListener {
|
||||||
|
|
||||||
private static final String TAG = "RingtoneFragment";
|
private static final String TAG = "RingtoneFragment";
|
||||||
private final int mStream;
|
private final int mStream;
|
||||||
private final int mType;
|
private final int mType;
|
||||||
private final OnContentChangedListener mListener;
|
private final OnContentChangedListener mChangedListener;
|
||||||
private final String mKeyEnabled;
|
private final String mKeyEnabled;
|
||||||
private final String mKeyUri;
|
private final String mKeyUri;
|
||||||
private final String mKeyVolume;
|
private final String mKeyVolume;
|
||||||
private final ContentValues mInfo;
|
private final ContentValues mInfo;
|
||||||
|
private final FeatureRemovedListener mRemovedListener;
|
||||||
private final int mLabel;
|
private final int mLabel;
|
||||||
private EditText mRingtone;
|
private EditText mRingtone;
|
||||||
private Uri mRingtoneURI;
|
private Uri mRingtoneURI;
|
||||||
private SeekBar mVolume;
|
private SeekBar mVolume;
|
||||||
|
private ImageView mIcon;
|
||||||
|
|
||||||
public RingtoneFragment(ContentValues info, OnContentChangedListener listener, int stream){
|
public RingtoneFragment(ContentValues info, OnContentChangedListener changedListener, FeatureRemovedListener removedListener, int stream, int id){
|
||||||
super();
|
super(id);
|
||||||
this.mListener = listener;
|
|
||||||
|
if ( info == null )
|
||||||
|
throw new NullPointerException();
|
||||||
|
if ( changedListener == null )
|
||||||
|
throw new NullPointerException();
|
||||||
|
if ( removedListener == null )
|
||||||
|
throw new NullPointerException();
|
||||||
|
|
||||||
|
this.mChangedListener = changedListener;
|
||||||
this.mStream = stream;
|
this.mStream = stream;
|
||||||
this.mInfo = info;
|
this.mInfo = info;
|
||||||
|
this.mRemovedListener = removedListener;
|
||||||
|
|
||||||
switch(stream){
|
switch(stream){
|
||||||
case AudioManager.STREAM_NOTIFICATION:
|
case AudioManager.STREAM_NOTIFICATION:
|
||||||
@@ -100,11 +112,11 @@ public class RingtoneFragment extends Fragment implements OnClickListener, OnSee
|
|||||||
* @author ricky barrette
|
* @author ricky barrette
|
||||||
*/
|
*/
|
||||||
private void notifyRingtoneChanged(Uri tone) {
|
private void notifyRingtoneChanged(Uri tone) {
|
||||||
if(this.mListener != null){
|
if(this.mChangedListener != null){
|
||||||
ContentValues info = new ContentValues();
|
ContentValues info = new ContentValues();
|
||||||
info.put(this.mKeyUri, tone != null ? tone.toString() : null);
|
info.put(this.mKeyUri, tone != null ? tone.toString() : null);
|
||||||
info.put(mKeyEnabled, tone == null);
|
info.put(mKeyEnabled, tone == null);
|
||||||
this.mListener.onInfoContentChanged(info);
|
this.mChangedListener.onInfoContentChanged(info);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -114,10 +126,11 @@ public class RingtoneFragment extends Fragment implements OnClickListener, OnSee
|
|||||||
* @author ricky barrette
|
* @author ricky barrette
|
||||||
*/
|
*/
|
||||||
private void notifyVolumeChanged(int progress) {
|
private void notifyVolumeChanged(int progress) {
|
||||||
if(this.mListener != null){
|
mIcon.setImageDrawable(this.getActivity().getResources().getDrawable(progress == 0 ? android.R.drawable.ic_lock_silent_mode : android.R.drawable.ic_lock_silent_mode_off));
|
||||||
|
if(this.mChangedListener != null){
|
||||||
final ContentValues info = new ContentValues();
|
final ContentValues info = new ContentValues();
|
||||||
info.put(this.mKeyVolume, progress);
|
info.put(this.mKeyVolume, progress);
|
||||||
this.mListener.onInfoContentChanged(info);
|
this.mChangedListener.onInfoContentChanged(info);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -133,6 +146,7 @@ public class RingtoneFragment extends Fragment implements OnClickListener, OnSee
|
|||||||
this.mRingtone.setText(R.string.silent);
|
this.mRingtone.setText(R.string.silent);
|
||||||
mVolume.setEnabled(false);
|
mVolume.setEnabled(false);
|
||||||
mVolume.setProgress(0);
|
mVolume.setProgress(0);
|
||||||
|
notifyVolumeChanged(0);
|
||||||
} else {
|
} else {
|
||||||
mVolume.setEnabled(true);
|
mVolume.setEnabled(true);
|
||||||
Ringtone ringtone = RingtoneManager.getRingtone(this.getActivity(), Uri.parse(tone.toString()));
|
Ringtone ringtone = RingtoneManager.getRingtone(this.getActivity(), Uri.parse(tone.toString()));
|
||||||
@@ -149,7 +163,16 @@ public class RingtoneFragment extends Fragment implements OnClickListener, OnSee
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
getRingtoneURI(this.mType, mRingtoneURI);
|
switch(v.getId()){
|
||||||
|
case R.id.ringtone:
|
||||||
|
getRingtoneURI(this.mType, mRingtoneURI);
|
||||||
|
break;
|
||||||
|
case R.id.close:
|
||||||
|
if(this.mRemovedListener != null)
|
||||||
|
this.mRemovedListener.onFeatureRemoved(this);
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -164,15 +187,30 @@ public class RingtoneFragment extends Fragment implements OnClickListener, OnSee
|
|||||||
/*
|
/*
|
||||||
* initialize the views
|
* initialize the views
|
||||||
*/
|
*/
|
||||||
final TextView label = (TextView) view.findViewById(R.id.label);
|
final TextView label = (TextView) view.findViewById(R.id.title);
|
||||||
label.setText(mLabel);
|
label.setText(mLabel);
|
||||||
|
|
||||||
|
mIcon = (ImageView) view.findViewById(R.id.icon);
|
||||||
|
mIcon.setImageDrawable(this.getActivity().getResources().getDrawable(android.R.drawable.ic_lock_silent_mode_off));
|
||||||
|
|
||||||
this.mRingtone = (EditText) view.findViewById(R.id.ringtone);
|
this.mRingtone = (EditText) view.findViewById(R.id.ringtone);
|
||||||
mVolume = (SeekBar) view.findViewById(R.id.ringtone_volume);
|
mVolume = (SeekBar) view.findViewById(R.id.ringtone_volume);
|
||||||
|
|
||||||
this.mRingtone.setOnClickListener(this);
|
this.mRingtone.setOnClickListener(this);
|
||||||
mVolume.setMax(audioManager.getStreamMaxVolume(mStream));
|
mVolume.setMax(audioManager.getStreamMaxVolume(mStream));
|
||||||
|
|
||||||
|
view.findViewById(R.id.close).setOnClickListener(this);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* volume
|
||||||
|
*/
|
||||||
|
if(this.mInfo.containsKey(this.mKeyVolume))
|
||||||
|
mVolume.setProgress(Integer.parseInt(this.mInfo.getAsString(this.mKeyVolume)));
|
||||||
|
else {
|
||||||
|
mVolume.setProgress(audioManager.getStreamVolume(mStream));
|
||||||
|
notifyVolumeChanged(audioManager.getStreamVolume(mStream));
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ringtone & uri
|
* ringtone & uri
|
||||||
*/
|
*/
|
||||||
@@ -196,15 +234,7 @@ public class RingtoneFragment extends Fragment implements OnClickListener, OnSee
|
|||||||
mVolume.setProgress(0);
|
mVolume.setProgress(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
mIcon.setImageDrawable(this.getActivity().getResources().getDrawable(mVolume.getProgress() == 0 ? android.R.drawable.ic_lock_silent_mode : android.R.drawable.ic_lock_silent_mode_off));
|
||||||
* volume
|
|
||||||
*/
|
|
||||||
if(this.mInfo.containsKey(this.mKeyVolume))
|
|
||||||
mVolume.setProgress(Integer.parseInt(this.mInfo.getAsString(this.mKeyVolume)));
|
|
||||||
else {
|
|
||||||
mVolume.setProgress(audioManager.getStreamVolume(mStream));
|
|
||||||
notifyVolumeChanged(audioManager.getStreamVolume(mStream));
|
|
||||||
}
|
|
||||||
|
|
||||||
mVolume.setOnSeekBarChangeListener(this);
|
mVolume.setOnSeekBarChangeListener(this);
|
||||||
return view;
|
return view;
|
||||||
|
|||||||
@@ -6,64 +6,107 @@
|
|||||||
*/
|
*/
|
||||||
package com.TwentyCodes.android.LocationRinger.ui.fragments;
|
package com.TwentyCodes.android.LocationRinger.ui.fragments;
|
||||||
|
|
||||||
import com.TwentyCodes.android.LocationRinger.R;
|
|
||||||
import com.TwentyCodes.android.LocationRinger.OnContentChangedListener;
|
|
||||||
import com.TwentyCodes.android.LocationRinger.db.RingerDatabase;
|
|
||||||
|
|
||||||
import android.content.ContentValues;
|
import android.content.ContentValues;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.Fragment;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.View.OnClickListener;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.CompoundButton;
|
import android.widget.CompoundButton;
|
||||||
import android.widget.CompoundButton.OnCheckedChangeListener;
|
import android.widget.CompoundButton.OnCheckedChangeListener;
|
||||||
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.ToggleButton;
|
import android.widget.ToggleButton;
|
||||||
|
|
||||||
|
import com.TwentyCodes.android.LocationRinger.FeatureRemovedListener;
|
||||||
|
import com.TwentyCodes.android.LocationRinger.OnContentChangedListener;
|
||||||
|
import com.TwentyCodes.android.LocationRinger.R;
|
||||||
|
import com.TwentyCodes.android.LocationRinger.db.RingerDatabase;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A simple fragment that displays a toggle button and a title label
|
* A simple fragment that displays a toggle button and a title label
|
||||||
* @author ricky
|
* @author ricky
|
||||||
*/
|
*/
|
||||||
public class ToggleButtonFragment extends Fragment implements OnCheckedChangeListener {
|
public class ToggleButtonFragment extends IdFragment implements OnCheckedChangeListener, OnClickListener {
|
||||||
|
|
||||||
private String mTitle;
|
private final String mTitle;
|
||||||
private String mKey;
|
private final String mKey;
|
||||||
private ContentValues mInfo;
|
private final ContentValues mInfo;
|
||||||
private OnContentChangedListener mListener;
|
private final OnContentChangedListener mChangedListener;
|
||||||
|
private final int mIcon;
|
||||||
|
private final FeatureRemovedListener mRemovedListener;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new ToggleButtonFtagment
|
* Creates a new ToggleButtonFtagment
|
||||||
* @author ricky barrette
|
* @author ricky barrette
|
||||||
*/
|
*/
|
||||||
public ToggleButtonFragment(String title, String key, ContentValues info, OnContentChangedListener listener) {
|
public ToggleButtonFragment(int icon, String title, String key, ContentValues info, OnContentChangedListener changedListener, FeatureRemovedListener removedListener, int id) {
|
||||||
super();
|
super(id);
|
||||||
|
|
||||||
|
if ( info == null )
|
||||||
|
throw new NullPointerException();
|
||||||
|
if (title == null )
|
||||||
|
throw new NullPointerException();
|
||||||
|
if ( key == null )
|
||||||
|
throw new NullPointerException();
|
||||||
|
if ( changedListener == null )
|
||||||
|
throw new NullPointerException();
|
||||||
|
if ( removedListener == null )
|
||||||
|
throw new NullPointerException();
|
||||||
|
|
||||||
this.mTitle = title;
|
this.mTitle = title;
|
||||||
this.mKey = key;
|
this.mKey = key;
|
||||||
this.mInfo = info;
|
this.mInfo = info;
|
||||||
this.mListener = listener;
|
this.mChangedListener = changedListener;
|
||||||
|
this.mIcon = icon;
|
||||||
|
this.mRemovedListener = removedListener;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the fragment's view needs to be created
|
||||||
|
* (non-Javadoc)
|
||||||
|
* @see android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle)
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle icicle) {
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle icicle) {
|
||||||
View view = inflater.inflate(R.layout.toggle_button_fragment, container, false);
|
final View view = inflater.inflate(R.layout.toggle_button_fragment, container, false);
|
||||||
TextView t = (TextView) view.findViewById(R.id.label);
|
final TextView t = (TextView) view.findViewById(R.id.title);
|
||||||
t.setText(this.mTitle);
|
t.setText(this.mTitle);
|
||||||
|
|
||||||
ToggleButton b = (ToggleButton) view.findViewById(R.id.toggle);
|
final ImageView icon = (ImageView) view.findViewById(R.id.icon);
|
||||||
|
icon.setImageDrawable(this.getActivity().getResources().getDrawable(mIcon));
|
||||||
|
|
||||||
|
view.findViewById(R.id.close).setOnClickListener(this);
|
||||||
|
|
||||||
|
final ToggleButton b = (ToggleButton) view.findViewById(R.id.toggle);
|
||||||
if(this.mInfo.containsKey(this.mKey))
|
if(this.mInfo.containsKey(this.mKey))
|
||||||
b.setChecked(RingerDatabase.parseBoolean(this.mInfo.getAsString(this.mKey)));
|
b.setChecked(RingerDatabase.parseBoolean(this.mInfo.getAsString(this.mKey)));
|
||||||
b.setOnCheckedChangeListener(this);
|
b.setOnCheckedChangeListener(this);
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the toggle button is clicked
|
||||||
|
* (non-Javadoc)
|
||||||
|
* @see android.widget.CompoundButton.OnCheckedChangeListener#onCheckedChanged(android.widget.CompoundButton, boolean)
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||||
if(this.mListener != null){
|
if(this.mChangedListener != null){
|
||||||
ContentValues info = new ContentValues();
|
ContentValues info = new ContentValues();
|
||||||
info.put(this.mKey, isChecked);
|
info.put(this.mKey, isChecked);
|
||||||
this.mListener.onInfoContentChanged(info);
|
this.mChangedListener.onInfoContentChanged(info);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the user clicks the remove button
|
||||||
|
* @param v
|
||||||
|
* @author ricky barrette
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
if(this.mRemovedListener != null)
|
||||||
|
this.mRemovedListener.onFeatureRemoved(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -12,17 +12,19 @@ import android.content.ContentValues;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.media.AudioManager;
|
import android.media.AudioManager;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.Fragment;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.View.OnClickListener;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.ImageView;
|
||||||
import android.widget.SeekBar;
|
import android.widget.SeekBar;
|
||||||
import android.widget.SeekBar.OnSeekBarChangeListener;
|
import android.widget.SeekBar.OnSeekBarChangeListener;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.TwentyCodes.android.LocationRinger.R;
|
import com.TwentyCodes.android.LocationRinger.FeatureRemovedListener;
|
||||||
import com.TwentyCodes.android.LocationRinger.OnContentChangedListener;
|
import com.TwentyCodes.android.LocationRinger.OnContentChangedListener;
|
||||||
|
import com.TwentyCodes.android.LocationRinger.R;
|
||||||
import com.TwentyCodes.android.LocationRinger.db.RingerDatabase;
|
import com.TwentyCodes.android.LocationRinger.db.RingerDatabase;
|
||||||
import com.TwentyCodes.android.LocationRinger.debug.Debug;
|
import com.TwentyCodes.android.LocationRinger.debug.Debug;
|
||||||
|
|
||||||
@@ -30,30 +32,43 @@ import com.TwentyCodes.android.LocationRinger.debug.Debug;
|
|||||||
* This fragment will represent the volume fragments
|
* This fragment will represent the volume fragments
|
||||||
* @author ricky
|
* @author ricky
|
||||||
*/
|
*/
|
||||||
public class VolumeFragment extends Fragment implements OnSeekBarChangeListener {
|
public class VolumeFragment extends IdFragment implements OnSeekBarChangeListener, OnClickListener {
|
||||||
|
|
||||||
private static final String TAG = "VolumeFragment";
|
private static final String TAG = "VolumeFragment";
|
||||||
private final AudioManager mAudioManager;
|
private final AudioManager mAudioManager;
|
||||||
private final int mStream;
|
private final int mStream;
|
||||||
private final OnContentChangedListener mListener;
|
private final OnContentChangedListener mChangedListener;
|
||||||
private final String mKey;
|
private final String mKey;
|
||||||
private final ContentValues mInfo;
|
private final ContentValues mInfo;
|
||||||
private final int mLabel;
|
private final int mLabel;
|
||||||
|
private final FeatureRemovedListener mRemovedListener;
|
||||||
|
private ImageView mIcon;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new Volume Fragment
|
* Creates a new Volume Fragment
|
||||||
* @param info
|
* @param info
|
||||||
* @param context
|
* @param context
|
||||||
* @param listener
|
* @param changedListener
|
||||||
* @param stream
|
* @param stream
|
||||||
* @author ricky barrette
|
* @author ricky barrette
|
||||||
*/
|
*/
|
||||||
public VolumeFragment(ContentValues info, Context context, OnContentChangedListener listener, int stream){
|
public VolumeFragment(ContentValues info, Context context, OnContentChangedListener changedListener, FeatureRemovedListener removedListener, int stream, int id){
|
||||||
super();
|
super(id);
|
||||||
|
|
||||||
|
if ( info == null )
|
||||||
|
throw new NullPointerException();
|
||||||
|
if ( context == null )
|
||||||
|
throw new NullPointerException();
|
||||||
|
if ( changedListener == null )
|
||||||
|
throw new NullPointerException();
|
||||||
|
if ( removedListener == null )
|
||||||
|
throw new NullPointerException();
|
||||||
|
|
||||||
this.mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
|
this.mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
|
||||||
this.mStream = stream;
|
this.mStream = stream;
|
||||||
this.mListener = listener;
|
this.mChangedListener = changedListener;
|
||||||
this.mInfo = info;
|
this.mInfo = info;
|
||||||
|
this.mRemovedListener = removedListener;
|
||||||
|
|
||||||
switch(this.mStream){
|
switch(this.mStream){
|
||||||
case AudioManager.STREAM_ALARM:
|
case AudioManager.STREAM_ALARM:
|
||||||
@@ -91,6 +106,11 @@ public class VolumeFragment extends Fragment implements OnSeekBarChangeListener
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the fragment's view needs to be created
|
||||||
|
* (non-Javadoc)
|
||||||
|
* @see android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle)
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
|
||||||
@@ -98,27 +118,34 @@ public class VolumeFragment extends Fragment implements OnSeekBarChangeListener
|
|||||||
for(Entry<String,Object> item : this.mInfo.valueSet())
|
for(Entry<String,Object> item : this.mInfo.valueSet())
|
||||||
Log.d(TAG, item.getKey() +" = "+ item.getValue());
|
Log.d(TAG, item.getKey() +" = "+ item.getValue());
|
||||||
|
|
||||||
View view = inflater.inflate(R.layout.volume_fragment, container, false);
|
final View view = inflater.inflate(R.layout.volume_fragment, container, false);
|
||||||
TextView label = (TextView) view.findViewById(R.id.volume_label);
|
final TextView label = (TextView) view.findViewById(R.id.title);
|
||||||
SeekBar volume = (SeekBar) view.findViewById(R.id.volume);
|
final SeekBar volume = (SeekBar) view.findViewById(R.id.volume);
|
||||||
volume.setMax(this.mAudioManager.getStreamMaxVolume(mStream));
|
volume.setMax(this.mAudioManager.getStreamMaxVolume(mStream));
|
||||||
volume.setProgress(this.mAudioManager.getStreamVolume(mStream));
|
volume.setProgress(this.mAudioManager.getStreamVolume(mStream));
|
||||||
volume.setOnSeekBarChangeListener(this);
|
volume.setOnSeekBarChangeListener(this);
|
||||||
|
|
||||||
label.setText(mLabel);
|
label.setText(mLabel);
|
||||||
|
|
||||||
|
mIcon = (ImageView) view.findViewById(R.id.icon);
|
||||||
|
|
||||||
|
view.findViewById(R.id.close).setOnClickListener(this);
|
||||||
|
|
||||||
if(this.mInfo.containsKey(this.mKey))
|
if(this.mInfo.containsKey(this.mKey))
|
||||||
volume.setProgress(Integer.parseInt(this.mInfo.getAsString(this.mKey)));
|
volume.setProgress(Integer.parseInt(this.mInfo.getAsString(this.mKey)));
|
||||||
else
|
else
|
||||||
notifyListener(this.mAudioManager.getStreamVolume(mStream));
|
notifyListener(this.mAudioManager.getStreamVolume(mStream));
|
||||||
|
|
||||||
|
mIcon.setImageDrawable(this.getActivity().getResources().getDrawable(volume.getProgress() == 0 ? android.R.drawable.ic_lock_silent_mode : android.R.drawable.ic_lock_silent_mode_off));
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
|
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
|
||||||
if(fromUser)
|
if(fromUser){
|
||||||
notifyListener(progress);
|
notifyListener(progress);
|
||||||
|
mIcon.setImageDrawable(this.getActivity().getResources().getDrawable(progress == 0 ? android.R.drawable.ic_lock_silent_mode : android.R.drawable.ic_lock_silent_mode_off));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -127,21 +154,29 @@ public class VolumeFragment extends Fragment implements OnSeekBarChangeListener
|
|||||||
* @author ricky barrette
|
* @author ricky barrette
|
||||||
*/
|
*/
|
||||||
private void notifyListener(final int progress) {
|
private void notifyListener(final int progress) {
|
||||||
if(this.mListener != null){
|
if(this.mChangedListener != null){
|
||||||
final ContentValues info = new ContentValues();
|
final ContentValues info = new ContentValues();
|
||||||
info.put(this.mKey, progress);
|
info.put(this.mKey, progress);
|
||||||
this.mListener.onInfoContentChanged(info);
|
this.mChangedListener.onInfoContentChanged(info);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStartTrackingTouch(SeekBar seekBar) {
|
public void onStartTrackingTouch(SeekBar seekBar) {
|
||||||
// TODO Auto-generated method stub
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStopTrackingTouch(SeekBar seekBar) {
|
public void onStopTrackingTouch(SeekBar seekBar) {
|
||||||
// TODO Auto-generated method stub
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the user clicks on the remove button
|
||||||
|
* (non-Javadoc)
|
||||||
|
* @see android.view.View.OnClickListener#onClick(android.view.View)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
if(this.mRemovedListener != null)
|
||||||
|
this.mRemovedListener.onFeatureRemoved(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user