Any Help with this issue is very much appreciated.
I can set multiple alarms with user choosen sounds and would like to give the user the same option of saving different images to ImageView when an alarm is triggered. MainActivity follows.
The following is the relevant code the the Alarm Class and full code for the Picker Activity is about three quarters the way when scrolling down:
Main.Java
public class AlarmDetailsActivity extends Activity {
private AlarmDBHelper dbHelper = new AlarmDBHelper(this);
private AlarmModel alarmDetails;
private TimePicker timePicker;
private EditText edtName;
private CustomSwitch chkWeekly;
private CustomSwitch chkSunday;
private CustomSwitch chkMonday;
private CustomSwitch chkTuesday;
private CustomSwitch chkWednesday;
private CustomSwitch chkThursday;
private CustomSwitch chkFriday;
private CustomSwitch chkSaturday;
private TextView txtToneSelection;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_ACTION_BAR);
setContentView(R.layout.activity_details);
getActionBar().setTitle("Create New Alarm");
getActionBar().setDisplayHomeAsUpEnabled(true);
timePicker = (TimePicker) findViewById(R.id.alarm_details_time_picker);
edtName = (EditText) findViewById(R.id.alarm_details_name);
chkWeekly = (CustomSwitch)
findViewById(R.id.alarm_details_repeat_weekly);
chkSunday = (CustomSwitch)
findViewById(R.id.alarm_details_repeat_sunday);
chkMonday = (CustomSwitch)
findViewById(R.id.alarm_details_repeat_monday);
chkTuesday = (CustomSwitch)
findViewById(R.id.alarm_details_repeat_tuesday);
chkWednesday = (CustomSwitch)
findViewById(R.id.alarm_details_repeat_wednesday);
chkThursday = (CustomSwitch)
findViewById(R.id.alarm_details_repeat_thursday);
chkFriday = (CustomSwitch)
findViewById(R.id.alarm_details_repeat_friday);
chkSaturday = (CustomSwitch)
findViewById(R.id.alarm_details_repeat_saturday);
txtToneSelection = (TextView)
findViewById(R.id.alarm_label_tone_selection);
long id = getIntent().getExtras().getLong("id");
if (id == -1) {
alarmDetails = new AlarmModel();
} else {
alarmDetails = dbHelper.getAlarm(id);
timePicker.setCurrentMinute(alarmDetails.timeMinute);
timePicker.setCurrentHour(alarmDetails.timeHour);
edtName.setText(alarmDetails.name);
chkWeekly.setChecked(alarmDetails.repeatWeekly);
chkSunday.setChecked(alarmDetails.getRepeatingDay
(AlarmModel.SUNDAY));
chkMonday.setChecked(alarmDetails.getRepeatingDay
(AlarmModel.MONDAY));
chkTuesday.setChecked(alarmDetails.getRepeatingDay
(AlarmModel.TUESDAY));
chkWednesday.setChecked(alarmDetails.getRepeatingDay
(AlarmModel.WEDNESDAY));
chkThursday.setChecked(alarmDetails.getRepeatingDay
(AlarmModel.THURSDAY));
chkFriday.setChecked(alarmDetails.getRepeatingDay
(AlarmModel.FRDIAY));
chkSaturday.setChecked(alarmDetails.getRepeatingDay
(AlarmModel.SATURDAY));
txtToneSelection.setText(RingtoneManager.getRingtone(this,
alarmDetails.alarmTone).getTitle(this));
}
final LinearLayout ringToneContainer = (LinearLayout)
findViewById(R.id.alarm_ringtone_container);
ringToneContainer.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
startActivityForResult(intent , 1);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent
data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case 1: {
alarmDetails.alarmTone =
data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
txtToneSelection.setText(RingtoneManager.getRingtone(this,
alarmDetails.alarmTone).getTitle(this));
break;
}
default: {
break;
}
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.alarm_details, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home: {
finish();
break;
}
case R.id.action_save_alarm_details: {
updateModelFromLayout();
AlarmManagerHelper.cancelAlarms(this);
if (alarmDetails.id < 0) {
dbHelper.createAlarm(alarmDetails);
} else {
dbHelper.updateAlarm(alarmDetails);
}
AlarmManagerHelper.setAlarms(this);
setResult(RESULT_OK);
finish();
}
}
return super.onOptionsItemSelected(item);
}
private void updateModelFromLayout() {
alarmDetails.timeMinute = timePicker.getCurrentMinute().intValue();
alarmDetails.timeHour = timePicker.getCurrentHour().intValue();
alarmDetails.name = edtName.getText().toString();
alarmDetails.repeatWeekly = chkWeekly.isChecked();
alarmDetails.setRepeatingDay(AlarmModel.SUNDAY, chkSunday.isChecked());
alarmDetails.setRepeatingDay(AlarmModel.MONDAY, chkMonday.isChecked());
alarmDetails.setRepeatingDay(AlarmModel.TUESDAY, chkTuesday.isChecked());
alarmDetails.setRepeatingDay(AlarmModel.WEDNESDAY,
chkWednesday.isChecked());
alarmDetails.setRepeatingDay(AlarmModel.THURSDAY,
chkThursday.isChecked());
alarmDetails.setRepeatingDay(AlarmModel.FRDIAY, chkFriday.isChecked());
alarmDetails.setRepeatingDay(AlarmModel.SATURDAY,
chkSaturday.isChecked());
alarmDetails.isEnabled = true;
}
}
Main XML
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:isScrollContainer="true" >
<!--
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".AlarmDetailsActivity" >
-->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
tools:context=".AlarmDetailsActivity" >
<TimePicker
android:id="@+id/alarm_details_time_picker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<EditText
android:id="@+id/alarm_details_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/alarm_details_time_picker"
android:layout_marginBottom="@dimen/activity_vertical_margin"
android:layout_marginTop="@dimen/activity_vertical_margin"
android:ems="10"
android:hint="@string/details_alarm_name" />
<View
android:id="@+id/divider2"
style="@style/Divider"
android:layout_alignParentLeft="true"
android:layout_below="@+id/alarm_details_name" />
<com.trigg.alarmclock.CustomSwitch
android:id="@+id/alarm_details_repeat_weekly"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/divider2"
android:checked="true"
android:text="@string/details_repeat_weekly" />
<View
android:id="@+id/divider1"
style="@style/Divider"
android:layout_alignParentLeft="true"
android:layout_below="@+id/alarm_details_repeat_weekly" />
com.trigg.alarmclock.CustomSwitch
android:id="@+id/alarm_details_repeat_sunday"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/divider1"
android:checked="true"
android:text="@string/details_sunday" />
<com.trigg.alarmclock.CustomSwitch
android:id="@+id/alarm_details_repeat_monday"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignRight="@+id/alarm_details_repeat_sunday"
android:layout_below="@+id/alarm_details_repeat_sunday"
android:checked="true"
android:text="@string/details_monday" />
<com.trigg.alarmclock.CustomSwitch
android:id="@+id/alarm_details_repeat_tuesday"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignRight="@+id/alarm_details_repeat_monday"
android:layout_below="@+id/alarm_details_repeat_monday"
android:checked="true"
android:text="@string/details_tuesday" />
com.trigg.alarmclock.CustomSwitch
android:id="@+id/alarm_details_repeat_wednesday"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignRight="@+id/alarm_details_repeat_tuesday"
android:layout_below="@+id/alarm_details_repeat_tuesday"
android:checked="true"
android:text="@string/details_wednesday" />
<com.trigg.alarmclock.CustomSwitch
android:id="@+id/alarm_details_repeat_thursday"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignRight="@+id/alarm_details_repeat_wednesday"
android:layout_below="@+id/alarm_details_repeat_wednesday"
android:checked="true"
android:text="@string/details_thursday" />
<com.trigg.alarmclock.CustomSwitch
android:id="@+id/alarm_details_repeat_friday"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignRight="@+id/alarm_details_repeat_thursday"
android:layout_below="@+id/alarm_details_repeat_thursday"
android:checked="true"
android:text="@string/details_friday" />
<com.trigg.alarmclock.CustomSwitch
android:id="@+id/alarm_details_repeat_saturday"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignRight="@+id/alarm_details_repeat_friday"
android:layout_below="@+id/alarm_details_repeat_friday"
android:checked="true"
android:text="@string/details_saturday" />
<View
android:id="@+id/divider4"
style="@style/Divider"
android:layout_alignParentLeft="true"
android:layout_below="@+id/alarm_details_repeat_saturday" />
<LinearLayout
android:id="@+id/alarm_ringtone_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/divider4"
android:background="@drawable/view_touch_selector"
android:orientation="vertical" >
<TextView
android:id="@+id/alarm_label_tone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/activity_vertical_margin"
android:text="@string/details_alarm_tone"
android:textSize="18sp" />
<TextView
android:id="@+id/alarm_label_tone_selection"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/activity_vertical_margin"
android:text="@string/details_alarm_tone_default"
android:textSize="14sp" />
</LinearLayout>
<View
android:id="@+id/divider3"
style="@style/Divider"
android:layout_alignParentLeft="true"
android:layout_below="@+id/alarm_ringtone_container" />
</RelativeLayout>
</ScrollView>
My problem and question is here with the ImagePicker activity and
the setting of the image to ImageView.I can pick and set it to the
ImageView,but have no clue on how to make it stay when the activity
is closed or destroyed. I need the same functionality for each
alarm as they will have different images in ImageView. I was
thinking maybe use Preferences to keep track or use item position as
way to keep track instead of file name.
The following is what I have for the image picker activity:
Main.Java
public class MainActivity extends Activity {
private Uri mImageCaptureUri;
private ImageView mImageView;
private static final int PICK_FROM_CAMERA = 1;
private static final int PICK_FROM_FILE = 2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final String [] items = new String [] {"From Camera", "From SD
Card"};
ArrayAdapter<String> adapter = new ArrayAdapter<String> (this,
android.R.layout.select_dialog_item,items);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Select Image");
builder.setAdapter( adapter, new DialogInterface.OnClickListener() {
public void onClick( DialogInterface dialog, int item ) {
if (item == 0) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File file = new File(Environment.getExternalStorageDirectory(),
"tmp_avatar_" + String.valueOf(System.currentTimeMillis()) + ".jpg");
mImageCaptureUri = Uri.fromFile(file);
try {
intent.putExtra (android.provider.MediaStore.EXTRA_OUTPUT,
mImageCaptureUri);
intent.putExtra("return-data", true);
startActivityForResult(intent, PICK_FROM_CAMERA);
} catch (Exception e) {
e.printStackTrace();
}
dialog.cancel();
} else {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Complete action
using"), PICK_FROM_FILE);
}
}
} );
final AlertDialog dialog = builder.create();
mImageView = (ImageView) findViewById(R.id.test);
((Button) findViewById(R.id.btn_choose)).setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.show();
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent
data) {
if (resultCode != RESULT_OK) return;
Bitmap bitmap = null;
String path = "";
if (requestCode == PICK_FROM_FILE) {
mImageCaptureUri = data.getData();
path = getRealPathFromURI(mImageCaptureUri); //from Gallery
if (path == null)
path = mImageCaptureUri.getPath(); //from File Manager
if (path != null)
bitmap = BitmapFactory.decodeFile(path);
} else {
path = mImageCaptureUri.getPath();
bitmap = BitmapFactory.decodeFile(path);
}
mImageView.setImageBitmap(bitmap);
mImageView.setSelected(true);
}
public String getRealPathFromURI(Uri contentUri) {
String [] proj = {MediaStore.Images.Media.DATA};
Cursor cursor = managedQuery( contentUri, proj, null, null,null);
if (cursor == null) return null;
int column_index =
cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
}
Maim.XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Android Image Choose Example"/>
<Button
android:id="@+id/btn_choose"
android:text="Choose Image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"/>
<ImageView
android:id="@+id/test"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"/>
</LinearLayout>
Any help will be most appreciated, thank you for time and interest.
Mike
Thanks for all that had interest in this question. After much research trial and error, my logic proved to be correct. Project focus has changed at this point to a new aspect of the application. Mike