mirror of https://github.com/tasks/tasks
Remove CalendarReminderActivity
parent
4c61353411
commit
2bfc46f32b
@ -1,99 +0,0 @@
|
|||||||
package com.todoroo.astrid.gcal;
|
|
||||||
|
|
||||||
import static com.google.common.collect.Iterables.any;
|
|
||||||
|
|
||||||
import android.content.BroadcastReceiver;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.net.Uri;
|
|
||||||
import com.todoroo.andlib.utility.DateUtilities;
|
|
||||||
import dagger.hilt.android.AndroidEntryPoint;
|
|
||||||
import java.util.List;
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import org.tasks.BuildConfig;
|
|
||||||
import org.tasks.R;
|
|
||||||
import org.tasks.calendars.AndroidCalendarEvent;
|
|
||||||
import org.tasks.calendars.AndroidCalendarEventAttendee;
|
|
||||||
import org.tasks.calendars.CalendarEventProvider;
|
|
||||||
import org.tasks.gtasks.GoogleAccountManager;
|
|
||||||
import org.tasks.preferences.Preferences;
|
|
||||||
import org.tasks.scheduling.CalendarNotificationIntentService;
|
|
||||||
import timber.log.Timber;
|
|
||||||
|
|
||||||
@AndroidEntryPoint
|
|
||||||
public class CalendarAlarmReceiver extends BroadcastReceiver {
|
|
||||||
|
|
||||||
public static final int REQUEST_CODE_CAL_REMINDER = 100;
|
|
||||||
public static final String BROADCAST_CALENDAR_REMINDER =
|
|
||||||
BuildConfig.APPLICATION_ID + ".CALENDAR_EVENT";
|
|
||||||
|
|
||||||
@Inject Preferences preferences;
|
|
||||||
@Inject CalendarEventProvider calendarEventProvider;
|
|
||||||
@Inject GoogleAccountManager accountManager;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onReceive(Context context, Intent intent) {
|
|
||||||
if (!preferences.getBoolean(R.string.p_calendar_reminders, true)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
Uri data = intent.getData();
|
|
||||||
if (data == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
String uriString = data.toString();
|
|
||||||
int pathIndex = uriString.indexOf("://");
|
|
||||||
if (pathIndex > 0) {
|
|
||||||
pathIndex += 3;
|
|
||||||
} else {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
long eventId = Long.parseLong(uriString.substring(pathIndex));
|
|
||||||
if (eventId > 0) {
|
|
||||||
boolean fromPostpone =
|
|
||||||
CalendarNotificationIntentService.URI_PREFIX_POSTPONE.equals(data.getScheme());
|
|
||||||
showCalReminder(context, eventId, fromPostpone);
|
|
||||||
}
|
|
||||||
} catch (IllegalArgumentException e) {
|
|
||||||
// Some cursor read failed, or badly formed uri
|
|
||||||
Timber.e(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void showCalReminder(Context context, final long eventId, final boolean fromPostpone) {
|
|
||||||
final AndroidCalendarEvent event = calendarEventProvider.getEvent(eventId);
|
|
||||||
if (event == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean shouldShowReminder;
|
|
||||||
if (fromPostpone) {
|
|
||||||
long timeAfter = DateUtilities.now() - event.getEnd();
|
|
||||||
shouldShowReminder = (timeAfter > DateUtilities.ONE_MINUTE * 2);
|
|
||||||
} else {
|
|
||||||
long timeUntil = event.getStart() - DateUtilities.now();
|
|
||||||
shouldShowReminder = (timeUntil > 0 && timeUntil < DateUtilities.ONE_MINUTE * 20);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (shouldShowReminder && isMeeting(event)) {
|
|
||||||
Intent intent = new Intent(context, CalendarReminderActivity.class);
|
|
||||||
intent.putExtra(CalendarReminderActivity.TOKEN_EVENT_ID, eventId);
|
|
||||||
intent.putExtra(CalendarReminderActivity.TOKEN_EVENT_NAME, event.getTitle());
|
|
||||||
intent.putExtra(CalendarReminderActivity.TOKEN_EVENT_END_TIME, event.getEnd());
|
|
||||||
intent.putExtra(CalendarReminderActivity.TOKEN_FROM_POSTPONE, fromPostpone);
|
|
||||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
|
|
||||||
context.startActivity(intent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isMeeting(AndroidCalendarEvent event) {
|
|
||||||
List<AndroidCalendarEventAttendee> attendees = event.getAttendees();
|
|
||||||
if (attendees.size() < 2) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
final List<String> myAccounts = accountManager.getAccounts();
|
|
||||||
return any(attendees, attendee -> myAccounts.contains(attendee.getEmail()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,172 +0,0 @@
|
|||||||
package com.todoroo.astrid.gcal;
|
|
||||||
|
|
||||||
import android.app.PendingIntent;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.net.Uri;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.View.OnClickListener;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import com.todoroo.andlib.utility.DateUtilities;
|
|
||||||
import com.todoroo.astrid.activity.MainActivity;
|
|
||||||
|
|
||||||
import org.tasks.R;
|
|
||||||
import org.tasks.dialogs.DialogBuilder;
|
|
||||||
import org.tasks.injection.ThemedInjectingAppCompatActivity;
|
|
||||||
import org.tasks.preferences.MainPreferences;
|
|
||||||
import org.tasks.preferences.Preferences;
|
|
||||||
import org.tasks.scheduling.AlarmManager;
|
|
||||||
import org.tasks.scheduling.CalendarNotificationIntentService;
|
|
||||||
import org.tasks.themes.ThemeAccent;
|
|
||||||
|
|
||||||
import javax.inject.Inject;
|
|
||||||
|
|
||||||
import dagger.hilt.android.AndroidEntryPoint;
|
|
||||||
|
|
||||||
@AndroidEntryPoint
|
|
||||||
public class CalendarReminderActivity extends ThemedInjectingAppCompatActivity {
|
|
||||||
|
|
||||||
public static final String TOKEN_EVENT_ID = "eventId";
|
|
||||||
public static final String TOKEN_EVENT_NAME = "eventName";
|
|
||||||
public static final String TOKEN_EVENT_END_TIME = "eventEndTime";
|
|
||||||
|
|
||||||
public static final String TOKEN_FROM_POSTPONE = "fromPostpone";
|
|
||||||
|
|
||||||
private static final String PREF_IGNORE_PRESSES = "calEventsIgnored";
|
|
||||||
|
|
||||||
// Prompt user to ignore all missed calls after this many ignore presses
|
|
||||||
private static final int IGNORE_PROMPT_COUNT = 3;
|
|
||||||
private final OnClickListener dismissListener = v -> finish();
|
|
||||||
@Inject Preferences preferences;
|
|
||||||
@Inject DialogBuilder dialogBuilder;
|
|
||||||
private final OnClickListener ignoreListener =
|
|
||||||
new OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(final View v) {
|
|
||||||
// Check for number of ignore presses
|
|
||||||
int ignorePresses = preferences.getInt(PREF_IGNORE_PRESSES, 0);
|
|
||||||
ignorePresses++;
|
|
||||||
if (ignorePresses == IGNORE_PROMPT_COUNT) {
|
|
||||||
dialogBuilder
|
|
||||||
.newDialog()
|
|
||||||
.setMessage(R.string.CRA_ignore_body)
|
|
||||||
.setPositiveButton(
|
|
||||||
R.string.CRA_ignore_all,
|
|
||||||
(dialog, which) -> {
|
|
||||||
preferences.setBoolean(R.string.p_calendar_reminders, false);
|
|
||||||
dismissListener.onClick(v);
|
|
||||||
})
|
|
||||||
.setNegativeButton(
|
|
||||||
R.string.CRA_ignore_this, (dialog, which) -> dismissListener.onClick(v))
|
|
||||||
.show();
|
|
||||||
} else {
|
|
||||||
dismissListener.onClick(v);
|
|
||||||
}
|
|
||||||
preferences.setInt(PREF_IGNORE_PRESSES, ignorePresses);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@Inject AlarmManager alarmManager;
|
|
||||||
@Inject ThemeAccent themeAccent;
|
|
||||||
private String eventName;
|
|
||||||
private long endTime;
|
|
||||||
private long eventId;
|
|
||||||
private boolean fromPostpone;
|
|
||||||
private TextView ignoreButton;
|
|
||||||
private TextView createListButton;
|
|
||||||
private TextView postponeButton;
|
|
||||||
private View dismissButton;
|
|
||||||
private View ignoreSettingsButton;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
|
|
||||||
setContentView(R.layout.calendar_reminder_activity);
|
|
||||||
|
|
||||||
Intent intent = getIntent();
|
|
||||||
fromPostpone = intent.getBooleanExtra(TOKEN_FROM_POSTPONE, false);
|
|
||||||
eventId = intent.getLongExtra(TOKEN_EVENT_ID, -1);
|
|
||||||
eventName = intent.getStringExtra(TOKEN_EVENT_NAME);
|
|
||||||
endTime =
|
|
||||||
intent.getLongExtra(TOKEN_EVENT_END_TIME, DateUtilities.now() + DateUtilities.ONE_HOUR);
|
|
||||||
|
|
||||||
createListButton = findViewById(R.id.create_list);
|
|
||||||
postponeButton = findViewById(R.id.postpone);
|
|
||||||
ignoreButton = findViewById(R.id.ignore);
|
|
||||||
ignoreSettingsButton = findViewById(R.id.ignore_settings);
|
|
||||||
dismissButton = findViewById(R.id.dismiss);
|
|
||||||
|
|
||||||
setupUi();
|
|
||||||
|
|
||||||
addListeners();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setupUi() {
|
|
||||||
((TextView) findViewById(R.id.reminder_title)).setText(getString(R.string.CRA_title));
|
|
||||||
|
|
||||||
TextView dialogView = findViewById(R.id.reminder_message);
|
|
||||||
String speechText;
|
|
||||||
if (fromPostpone) {
|
|
||||||
speechText = getString(R.string.CRA_speech_bubble_end, eventName);
|
|
||||||
} else {
|
|
||||||
speechText = getString(R.string.CRA_speech_bubble_start, eventName);
|
|
||||||
}
|
|
||||||
|
|
||||||
dialogView.setText(speechText);
|
|
||||||
|
|
||||||
createListButton.setBackgroundColor(themeAccent.getAccentColor());
|
|
||||||
|
|
||||||
if (fromPostpone) {
|
|
||||||
postponeButton.setVisibility(View.GONE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addListeners() {
|
|
||||||
ignoreButton.setOnClickListener(ignoreListener);
|
|
||||||
dismissButton.setOnClickListener(dismissListener);
|
|
||||||
|
|
||||||
ignoreSettingsButton.setOnClickListener(
|
|
||||||
v -> {
|
|
||||||
Intent editPreferences =
|
|
||||||
new Intent(CalendarReminderActivity.this, MainPreferences.class);
|
|
||||||
startActivity(editPreferences);
|
|
||||||
dismissListener.onClick(v);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!fromPostpone) {
|
|
||||||
postponeButton.setOnClickListener(v -> postpone());
|
|
||||||
}
|
|
||||||
|
|
||||||
createListButton.setOnClickListener(
|
|
||||||
v -> createNewList(getString(R.string.CRA_default_list_name, eventName)));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void createNewList(final String name) {
|
|
||||||
Intent intent = new Intent(CalendarReminderActivity.this, MainActivity.class);
|
|
||||||
intent.putExtra(MainActivity.TOKEN_CREATE_NEW_LIST_NAME, name);
|
|
||||||
startActivity(intent);
|
|
||||||
dismissButton.performClick(); // finish with animation
|
|
||||||
}
|
|
||||||
|
|
||||||
private void postpone() {
|
|
||||||
Intent eventAlarm = new Intent(this, CalendarAlarmReceiver.class);
|
|
||||||
eventAlarm.setAction(CalendarAlarmReceiver.BROADCAST_CALENDAR_REMINDER);
|
|
||||||
eventAlarm.setData(
|
|
||||||
Uri.parse(CalendarNotificationIntentService.URI_PREFIX_POSTPONE + "://" + eventId));
|
|
||||||
|
|
||||||
PendingIntent pendingIntent =
|
|
||||||
PendingIntent.getBroadcast(
|
|
||||||
this,
|
|
||||||
CalendarAlarmReceiver.REQUEST_CODE_CAL_REMINDER,
|
|
||||||
eventAlarm,
|
|
||||||
PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT
|
|
||||||
);
|
|
||||||
|
|
||||||
alarmManager.cancel(pendingIntent);
|
|
||||||
|
|
||||||
long alarmTime = endTime + DateUtilities.ONE_MINUTE * 5;
|
|
||||||
alarmManager.wakeup(alarmTime, pendingIntent);
|
|
||||||
dismissButton.performClick();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,28 +0,0 @@
|
|||||||
package org.tasks.calendars;
|
|
||||||
|
|
||||||
public class AndroidCalendarEventAttendee {
|
|
||||||
|
|
||||||
private final String name;
|
|
||||||
private final String email;
|
|
||||||
|
|
||||||
public AndroidCalendarEventAttendee(String name, String email) {
|
|
||||||
this.name = name;
|
|
||||||
this.email = email;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getEmail() {
|
|
||||||
return email;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "AndroidCalendarEventAttendee{"
|
|
||||||
+ "name='"
|
|
||||||
+ name
|
|
||||||
+ '\''
|
|
||||||
+ ", email='"
|
|
||||||
+ email
|
|
||||||
+ '\''
|
|
||||||
+ '}';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,58 +0,0 @@
|
|||||||
package org.tasks.calendars;
|
|
||||||
|
|
||||||
import android.content.ContentResolver;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.database.Cursor;
|
|
||||||
import android.provider.CalendarContract;
|
|
||||||
import dagger.hilt.android.qualifiers.ApplicationContext;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import org.tasks.preferences.PermissionChecker;
|
|
||||||
import timber.log.Timber;
|
|
||||||
|
|
||||||
class CalendarEventAttendeeProvider {
|
|
||||||
|
|
||||||
private static final String[] COLUMNS = {
|
|
||||||
CalendarContract.Attendees.ATTENDEE_NAME, CalendarContract.Attendees.ATTENDEE_EMAIL,
|
|
||||||
};
|
|
||||||
|
|
||||||
private final PermissionChecker permissionChecker;
|
|
||||||
private final ContentResolver contentResolver;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
public CalendarEventAttendeeProvider(
|
|
||||||
@ApplicationContext Context context, PermissionChecker permissionChecker) {
|
|
||||||
this.permissionChecker = permissionChecker;
|
|
||||||
contentResolver = context.getContentResolver();
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<AndroidCalendarEventAttendee> getAttendees(long id) {
|
|
||||||
if (!permissionChecker.canAccessCalendars()) {
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
|
|
||||||
List<AndroidCalendarEventAttendee> attendees = new ArrayList<>();
|
|
||||||
try (Cursor cursor =
|
|
||||||
contentResolver.query(
|
|
||||||
CalendarContract.Attendees.CONTENT_URI,
|
|
||||||
COLUMNS,
|
|
||||||
CalendarContract.Attendees.EVENT_ID + " = ? ",
|
|
||||||
new String[] {Long.toString(id)},
|
|
||||||
null)) {
|
|
||||||
if (cursor != null && cursor.getCount() > 0) {
|
|
||||||
int emailIndex = cursor.getColumnIndexOrThrow(CalendarContract.Attendees.ATTENDEE_EMAIL);
|
|
||||||
int nameIndex = cursor.getColumnIndexOrThrow(CalendarContract.Attendees.ATTENDEE_NAME);
|
|
||||||
while (cursor.moveToNext()) {
|
|
||||||
attendees.add(
|
|
||||||
new AndroidCalendarEventAttendee(
|
|
||||||
cursor.getString(nameIndex), cursor.getString(emailIndex)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
Timber.e(e);
|
|
||||||
}
|
|
||||||
return attendees;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,69 +0,0 @@
|
|||||||
package org.tasks.scheduling
|
|
||||||
|
|
||||||
import android.app.PendingIntent
|
|
||||||
import android.content.BroadcastReceiver
|
|
||||||
import android.content.Context
|
|
||||||
import android.content.Intent
|
|
||||||
import android.net.Uri
|
|
||||||
import com.todoroo.andlib.utility.DateUtilities
|
|
||||||
import com.todoroo.astrid.gcal.CalendarAlarmReceiver
|
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
|
||||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
|
||||||
import org.tasks.R
|
|
||||||
import org.tasks.calendars.CalendarEventProvider
|
|
||||||
import org.tasks.preferences.Preferences
|
|
||||||
import timber.log.Timber
|
|
||||||
import java.util.concurrent.TimeUnit
|
|
||||||
import javax.inject.Inject
|
|
||||||
|
|
||||||
@AndroidEntryPoint
|
|
||||||
class CalendarNotificationIntentService : RecurringIntervalIntentService() {
|
|
||||||
@Inject lateinit var preferences: Preferences
|
|
||||||
@Inject lateinit var calendarEventProvider: CalendarEventProvider
|
|
||||||
@Inject @ApplicationContext lateinit var context: Context
|
|
||||||
|
|
||||||
override val broadcastClass = Broadcast::class.java
|
|
||||||
|
|
||||||
override suspend fun run() {
|
|
||||||
val now = DateUtilities.now()
|
|
||||||
val end = now + TimeUnit.DAYS.toMillis(1)
|
|
||||||
for (event in calendarEventProvider.getEventsBetween(now, end)) {
|
|
||||||
val eventAlarm = Intent(context, CalendarAlarmReceiver::class.java)
|
|
||||||
eventAlarm.action = CalendarAlarmReceiver.BROADCAST_CALENDAR_REMINDER
|
|
||||||
eventAlarm.data = Uri.parse(URI_PREFIX + "://" + event.id)
|
|
||||||
val pendingIntent = PendingIntent.getBroadcast(
|
|
||||||
context,
|
|
||||||
CalendarAlarmReceiver.REQUEST_CODE_CAL_REMINDER,
|
|
||||||
eventAlarm,
|
|
||||||
PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
|
|
||||||
)
|
|
||||||
val reminderTime = event.start - FIFTEEN_MINUTES
|
|
||||||
alarmManager.wakeup(reminderTime, pendingIntent)
|
|
||||||
Timber.d("Scheduled reminder for %s at %s", event, reminderTime)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun intervalMillis() =
|
|
||||||
if (preferences.getBoolean(R.string.p_calendar_reminders, false))
|
|
||||||
TimeUnit.HOURS.toMillis(12)
|
|
||||||
else 0
|
|
||||||
|
|
||||||
class Broadcast : BroadcastReceiver() {
|
|
||||||
override fun onReceive(context: Context, intent: Intent) {
|
|
||||||
enqueueWork(context)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
const val URI_PREFIX_POSTPONE = "cal-postpone"
|
|
||||||
private val FIFTEEN_MINUTES = TimeUnit.MINUTES.toMillis(15)
|
|
||||||
private const val URI_PREFIX = "cal-reminder"
|
|
||||||
fun enqueueWork(context: Context?) {
|
|
||||||
enqueueWork(
|
|
||||||
context!!,
|
|
||||||
CalendarNotificationIntentService::class.java,
|
|
||||||
JOB_ID_CALENDAR_NOTIFICATION,
|
|
||||||
Intent(context, CalendarNotificationIntentService::class.java))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,137 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!--
|
|
||||||
** Copyright (c) 2012 Todoroo Inc
|
|
||||||
**
|
|
||||||
** See the file "LICENSE" for the full license governing this code.
|
|
||||||
-->
|
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
android:layout_marginStart="10dip"
|
|
||||||
android:layout_marginEnd="10dip"
|
|
||||||
android:background="@drawable/reminder_dialog_background"
|
|
||||||
android:orientation="vertical">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="5dip"
|
|
||||||
android:layout_marginBottom="15dip"
|
|
||||||
android:layout_marginStart="10dip"
|
|
||||||
android:layout_marginEnd="5dip"
|
|
||||||
android:orientation="horizontal">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/reminder_title"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:layout_marginTop="1dip"
|
|
||||||
android:text="@string/CRA_title"
|
|
||||||
android:textColor="@android:color/white"
|
|
||||||
android:textSize="24sp"/>
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/dismiss"
|
|
||||||
android:layout_width="25dip"
|
|
||||||
android:layout_height="25dip"
|
|
||||||
android:scaleType="fitCenter"
|
|
||||||
android:src="@drawable/ic_outline_clear_24px"
|
|
||||||
app:tint="@android:color/white"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<FrameLayout
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="wrap_content">
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginBottom="10dip"
|
|
||||||
android:layout_marginStart="2dip"
|
|
||||||
android:layout_marginEnd="5dip"
|
|
||||||
android:gravity="bottom"
|
|
||||||
android:orientation="horizontal">
|
|
||||||
<ImageView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginBottom="5dip"
|
|
||||||
android:scaleType="fitCenter"
|
|
||||||
android:src="@mipmap/ic_launcher_blue"/>
|
|
||||||
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginBottom="5dip"
|
|
||||||
android:layout_marginEnd="5dip"
|
|
||||||
android:background="@drawable/speech_bubble_reminder"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:minHeight="60dip">
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/reminder_message"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:textColor="#000000"
|
|
||||||
android:textSize="16sp"/>
|
|
||||||
</LinearLayout>
|
|
||||||
</LinearLayout>
|
|
||||||
</FrameLayout>
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/create_list"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="35dip"
|
|
||||||
android:layout_marginBottom="10dip"
|
|
||||||
android:layout_marginStart="10dip"
|
|
||||||
android:layout_marginEnd="10dip"
|
|
||||||
android:gravity="center"
|
|
||||||
android:text="@string/new_tag"
|
|
||||||
android:textColor="@android:color/white"
|
|
||||||
android:textSize="24sp"/>
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/postpone"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="35dip"
|
|
||||||
android:layout_marginBottom="10dip"
|
|
||||||
android:layout_marginStart="10dip"
|
|
||||||
android:layout_marginEnd="10dip"
|
|
||||||
android:background="#707070"
|
|
||||||
android:gravity="center"
|
|
||||||
android:text="@string/CRA_postpone"
|
|
||||||
android:textColor="@android:color/white"
|
|
||||||
android:textSize="24sp"/>
|
|
||||||
|
|
||||||
<RelativeLayout
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginBottom="10dip"
|
|
||||||
android:layout_marginStart="10dip"
|
|
||||||
android:layout_marginEnd="10dip">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/ignore"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="35dip"
|
|
||||||
android:background="#707070"
|
|
||||||
android:gravity="center"
|
|
||||||
android:text="@string/CRA_ignore"
|
|
||||||
android:textColor="@android:color/white"
|
|
||||||
android:textSize="24sp"/>
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/ignore_settings"
|
|
||||||
android:layout_width="35dip"
|
|
||||||
android:layout_height="35dip"
|
|
||||||
android:layout_alignParentEnd="true"
|
|
||||||
android:padding="4dip"
|
|
||||||
android:background="@android:color/transparent"
|
|
||||||
android:scaleType="fitCenter"
|
|
||||||
android:src="@drawable/ic_outline_settings_24px"
|
|
||||||
app:tint="@android:color/white"/>
|
|
||||||
</RelativeLayout>
|
|
||||||
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!--
|
|
||||||
** Copyright (c) 2012 Todoroo Inc
|
|
||||||
**
|
|
||||||
** See the file "LICENSE" for the full license governing this code.
|
|
||||||
-->
|
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:gravity="center"
|
|
||||||
android:orientation="vertical">
|
|
||||||
|
|
||||||
<include layout="@layout/astrid_calendar_reminder_view"/>
|
|
||||||
</LinearLayout>
|
|
||||||
Loading…
Reference in New Issue