Timer control set pulled out now power pack window

pull/14/head
Tim Su 14 years ago
parent 1f01bfda17
commit e66e252f62

@ -0,0 +1,82 @@
package com.todoroo.astrid.timers;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import com.timsu.astrid.R;
import com.todoroo.andlib.data.Property.IntegerProperty;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.astrid.activity.TaskEditActivity.TaskEditControlSet;
import com.todoroo.astrid.model.Task;
import com.todoroo.astrid.ui.TimeDurationControlSet;
import com.todoroo.astrid.ui.TimeDurationControlSet.TimeDurationType;
/**
* Control Set for managing repeats
*
* @author Tim Su <tim@todoroo.com>
*
*/
public class TimerControlSet implements TaskEditControlSet {
private final Activity activity;
TaskEditControlSet estimated, elapsed;
public TimerControlSet(final Activity activity, ViewGroup parent) {
DependencyInjectionService.getInstance().inject(this);
this.activity = activity;
LayoutInflater.from(activity).inflate(R.layout.gcal_control, parent, true);
estimated = new TimeDurationTaskEditControlSet(Task.ESTIMATED_SECONDS,
R.id.estimatedDuration, 0, R.string.DLG_hour_minutes,
TimeDurationType.HOURS_MINUTES);
elapsed = new TimeDurationTaskEditControlSet(Task.ELAPSED_SECONDS, R.id.elapsedDuration,
0, R.string.DLG_hour_minutes,
TimeDurationType.HOURS_MINUTES);
}
@Override
public void readFromTask(Task task) {
estimated.readFromTask(task);
elapsed.readFromTask(task);
}
@Override
public void writeToModel(Task task) {
estimated.writeToModel(task);
elapsed.writeToModel(task);
}
// --- TimeDurationTaskEditControlSet
/**
* Control set for mapping a Property to a TimeDurationControlSet
* @author Tim Su <tim@todoroo.com>
*
*/
public class TimeDurationTaskEditControlSet implements TaskEditControlSet {
private final TimeDurationControlSet controlSet;
private final IntegerProperty property;
public TimeDurationTaskEditControlSet(IntegerProperty property, int timeButtonId,
int prefixResource, int titleResource, TimeDurationType type) {
this.property = property;
this.controlSet = new TimeDurationControlSet(activity,
timeButtonId, prefixResource, titleResource, type);
}
@Override
public void readFromTask(Task task) {
controlSet.setTimeDuration(task.getValue(property));
}
@Override
public void writeToModel(Task task) {
task.setValue(property, controlSet.getTimeDurationInSeconds());
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

@ -246,28 +246,6 @@
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<!-- estimated time -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/TEA_estimatedDuration_label"
style="@style/TextAppearance.GEN_EditLabel" />
<Button
android:id="@+id/estimatedDuration"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<!-- elapsed time -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/TEA_elapsedDuration_label"
style="@style/TextAppearance.GEN_EditLabel" />
<Button
android:id="@+id/elapsedDuration"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<!-- add-ons -->
<LinearLayout android:id="@+id/tab_addons_addons"

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- See the file "LICENSE" for the full license governing this code. -->
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<!-- estimated time -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/TEA_estimatedDuration_label"
style="@style/TextAppearance.GEN_EditLabel" />
<Button
android:id="@+id/estimatedDuration"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<!-- elapsed time -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/TEA_elapsedDuration_label"
style="@style/TextAppearance.GEN_EditLabel" />
<Button
android:id="@+id/elapsedDuration"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</merge>

@ -126,11 +126,16 @@
<!-- Title for dialog selecting a time (hours and minutes) -->
<string name="DLG_hour_minutes">Time (hours : minutes)</string>
<!-- Dialog when Astrid needs to be updated -->
<!-- Dialog for Astrid having a critical update -->
<string name="DLG_please_update">Astrid should to be updated to the latest
version in the Android market! Please do that before continuing, or wait a
few seconds.</string>
<!-- Dialog for Astrid Power Pack -->
<string name="DLG_power_pack">Support Astrid and get more productive with
the Astrid Power Pack backup, widgets, no ads, and calendar integration.
Power up today!</string>
<!-- Button for going to Market -->
<string name="DLG_to_market">Go To Market</string>

@ -27,22 +27,24 @@ import java.util.List;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.TabActivity;
import android.app.DatePickerDialog.OnDateSetListener;
import android.app.TabActivity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.DialogInterface.OnCancelListener;
import android.content.res.Resources;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
@ -57,11 +59,9 @@ import android.widget.TabHost;
import android.widget.TimePicker;
import android.widget.Toast;
import android.widget.ToggleButton;
import android.widget.AdapterView.OnItemSelectedListener;
import com.flurry.android.FlurryAgent;
import com.timsu.astrid.R;
import com.todoroo.andlib.data.Property.IntegerProperty;
import com.todoroo.andlib.data.Property.StringProperty;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService;
@ -77,10 +77,9 @@ import com.todoroo.astrid.service.AddonService;
import com.todoroo.astrid.service.StartupService;
import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.tags.TagsControlSet;
import com.todoroo.astrid.timers.TimerControlSet;
import com.todoroo.astrid.ui.DeadlineTimePickerDialog;
import com.todoroo.astrid.ui.TimeDurationControlSet;
import com.todoroo.astrid.ui.DeadlineTimePickerDialog.OnDeadlineTimeSetListener;
import com.todoroo.astrid.ui.TimeDurationControlSet.TimeDurationType;
import com.todoroo.astrid.utility.Constants;
/**
@ -215,16 +214,17 @@ public final class TaskEditActivity extends TabActivity {
LinearLayout addonsAddons = (LinearLayout) findViewById(R.id.tab_addons_addons);
if(AddonService.isPowerPack()) {
controls.add(new GCalControlSet(this, addonsAddons));
controls.add(new TimeDurationTaskEditControlSet(Task.ESTIMATED_SECONDS,
R.id.estimatedDuration, 0, R.string.DLG_hour_minutes,
TimeDurationType.HOURS_MINUTES));
controls.add(new TimeDurationTaskEditControlSet(Task.ELAPSED_SECONDS, R.id.elapsedDuration,
0, R.string.DLG_hour_minutes,
TimeDurationType.HOURS_MINUTES));
controls.add(new TimerControlSet(this, addonsAddons));
} else {
Button button = new Button(this);
addonsAddons.addView(button);
button.setText(AddonService.POWER_PACK_LABEL);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
AddonService.displayPowerPackHelp(TaskEditActivity.this);
}
});
}
// read data
@ -583,35 +583,6 @@ public final class TaskEditActivity extends TabActivity {
}
}
// --- TimeDurationTaskEditControlSet
/**
* Control set for mapping a Property to a TimeDurationControlSet
* @author Tim Su <tim@todoroo.com>
*
*/
public class TimeDurationTaskEditControlSet implements TaskEditControlSet {
private final TimeDurationControlSet controlSet;
private final IntegerProperty property;
public TimeDurationTaskEditControlSet(IntegerProperty property, int timeButtonId,
int prefixResource, int titleResource, TimeDurationType type) {
this.property = property;
this.controlSet = new TimeDurationControlSet(TaskEditActivity.this,
timeButtonId, prefixResource, titleResource, type);
}
@Override
public void readFromTask(Task task) {
controlSet.setTimeDuration(task.getValue(property));
}
@Override
public void writeToModel(Task task) {
task.setValue(property, controlSet.getTimeDurationInSeconds());
}
}
// --- ImportanceControlSet
/**

@ -3,9 +3,6 @@ package com.todoroo.astrid.activity;
import java.util.Date;
import java.util.List;
import java.util.Map.Entry;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.atomic.AtomicInteger;
import android.app.AlertDialog;
import android.app.ListActivity;
@ -18,7 +15,6 @@ import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
@ -68,6 +64,7 @@ import com.todoroo.astrid.model.Task;
import com.todoroo.astrid.reminders.Notifications;
import com.todoroo.astrid.reminders.ReminderService;
import com.todoroo.astrid.reminders.ReminderService.AlarmScheduler;
import com.todoroo.astrid.service.AddonService;
import com.todoroo.astrid.service.MetadataService;
import com.todoroo.astrid.service.StartupService;
import com.todoroo.astrid.service.TaskService;
@ -161,7 +158,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener {
if(database == null)
return;
checkForUpgrades();
AddonService.checkForUpgrades(this);
database.openForWriting();
setUpUiComponents();
@ -177,54 +174,6 @@ public class TaskListActivity extends ListActivity implements OnScrollListener {
}).start();
}
private void checkForUpgrades() {
final AtomicInteger countdown = new AtomicInteger(10);
if(DateUtilities.now() > Constants.UPGRADE.getTime()) {
DialogInterface.OnClickListener okListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse("market://search?q=pname:" + //$NON-NLS-1$
getPackageName())));
finish();
}
};
final AlertDialog dialog = new AlertDialog.Builder(this)
.setTitle(R.string.DLG_information_title)
.setMessage(R.string.DLG_please_update)
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(R.string.DLG_to_market, okListener)
.setNegativeButton(countdown.toString(), null)
.setCancelable(false)
.show();
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(false);
final Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
final int number = countdown.addAndGet(-1);
if(number == 0)
timer.cancel();
runOnUiThread(new Runnable() {
public void run() {
if(number == 0) {
dialog.setCancelable(true);
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setText(
android.R.string.ok);
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(true);
} else {
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setText(
Integer.toString(number));
}
}
});
}
}, 0L, 1000L);
}
}
/**
* Create options menu (displayed when user presses menu key)

@ -1,9 +1,25 @@
package com.todoroo.astrid.service;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.atomic.AtomicInteger;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.timsu.astrid.R;
import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.utility.Constants;
import com.todoroo.astrid.utility.Preferences;
/**
@ -21,8 +37,11 @@ public class AddonService {
/** Astrid Power Pack package */
private static final String POWER_PACK_PACKAGE = "com.todoroo.astrid.ppack";
/** Astrid Power Pack label */
public static final String POWER_PACK_LABEL = "Astrid Power Pack";
/** cached is power pack value */
private static Boolean isPowerPack = true;
private static Boolean isPowerPack = null;
/** Checks whether power pack should be enabled */
public static boolean isPowerPack() {
@ -35,9 +54,10 @@ public class AddonService {
else {
try {
Context context = ContextManager.getContext();
context.getPackageManager().getApplicationInfo(
ApplicationInfo applicationInfo = context.getPackageManager().getApplicationInfo(
POWER_PACK_PACKAGE, 0);
isPowerPack = true;
if(applicationInfo.uid == context.getApplicationInfo().uid)
isPowerPack = true;
} catch (PackageManager.NameNotFoundException e) {
// not found
}
@ -45,6 +65,93 @@ public class AddonService {
return isPowerPack;
}
/** Displays power pack help */
public static void displayPowerPackHelp(Activity activity) {
LinearLayout layout = new LinearLayout(activity);
layout.setOrientation(LinearLayout.HORIZONTAL);
ImageView imageView = new ImageView(activity);
imageView.setImageResource(R.drawable.icon_pp);
layout.addView(imageView);
TextView textView = new TextView(activity);
textView.setText(R.string.DLG_power_pack);
textView.setTextSize(16);
layout.addView(textView);
new AlertDialog.Builder(activity)
.setTitle(POWER_PACK_LABEL)
.setView(layout)
.setIcon(android.R.drawable.ic_dialog_info)
.setPositiveButton(R.string.DLG_to_market, new MarketClickListener(activity,
POWER_PACK_PACKAGE))
.show();
}
/**
* Takes users to the market
*
* @author Tim Su <tim@todoroo.com>
*
*/
public static class MarketClickListener implements DialogInterface.OnClickListener {
private final Context context;
private final String packageName;
public MarketClickListener(Context activity, String packageName) {
this.context = activity;
this.packageName = packageName;
}
@Override
public void onClick(DialogInterface arg0, int arg1) {
context.startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse("market://search?q=pname:" + //$NON-NLS-1$
packageName)));
if(context instanceof Activity)
((Activity)context).finish();
}
};
public static void checkForUpgrades(final Activity activity) {
final AtomicInteger countdown = new AtomicInteger(10);
if(DateUtilities.now() > Constants.UPGRADE.getTime()) {
final AlertDialog dialog = new AlertDialog.Builder(activity)
.setTitle(R.string.DLG_information_title)
.setMessage(R.string.DLG_please_update)
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(R.string.DLG_to_market,
new MarketClickListener(activity, activity.getPackageName()))
.setNegativeButton(countdown.toString(), null)
.setCancelable(false)
.show();
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(false);
final Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
final int number = countdown.addAndGet(-1);
if(number == 0)
timer.cancel();
activity.runOnUiThread(new Runnable() {
public void run() {
if(number == 0) {
dialog.setCancelable(true);
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setText(
android.R.string.ok);
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(true);
} else {
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setText(
Integer.toString(number));
}
}
});
}
}, 0L, 1000L);
}
}
/**
* Record that a version was an OEM install
*/

Loading…
Cancel
Save