Add peset widgets

This commit is contained in:
Trevor Slocum 2019-09-20 00:06:15 -07:00
parent 06c315638b
commit a89cd79fdf
25 changed files with 281 additions and 54 deletions

View File

@ -53,7 +53,7 @@
<!-- Widgets -->
<!--
<receiver
android:name=".MeditationProvider1"
android:name=".WidgetStreakProvider1"
android:label="@string/widget1x1" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
@ -61,7 +61,7 @@
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_1" />
android:resource="@xml/widget_streak_1" />
</receiver>-->
<activity
android:name="sh.ftp.rocketninelabs.meditationassistant.MediNETActivity"
@ -136,28 +136,62 @@
</intent-filter>
</receiver>
<receiver
android:name=".MeditationProvider2"
android:label="@string/widget2x1">
android:name=".WidgetPresetProvider1"
android:label="@string/widgetpreset1x1">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_2" />
android:resource="@xml/widget_preset_1" />
</receiver>
<receiver
android:name=".MeditationProvider3"
android:label="@string/widget3x1">
android:name=".WidgetPresetProvider2"
android:label="@string/widgetpreset2x1">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_3" />
android:resource="@xml/widget_preset_2" />
</receiver>
<service android:name="sh.ftp.rocketninelabs.meditationassistant.WidgetService"></service>
<receiver
android:name=".WidgetPresetProvider3"
android:label="@string/widgetpreset3x1">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_preset_3" />
</receiver>
<receiver
android:name=".WidgetStreakProvider2"
android:label="@string/widgetstreak2x1">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_streak_2" />
</receiver>
<receiver
android:name=".WidgetStreakProvider3"
android:label="@string/widgetstreak3x1">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_streak_3" />
</receiver>
<service android:name="sh.ftp.rocketninelabs.meditationassistant.WidgetPresetService"></service>
<service android:name="sh.ftp.rocketninelabs.meditationassistant.WidgetStreakService"></service>
</application>
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"

View File

@ -1147,7 +1147,7 @@ public class MeditationAssistant extends Application {
updateWidgets();
/* Update all widgets */
Intent update_widgets = new Intent(getApplicationContext(), MeditationProvider.class);
Intent update_widgets = new Intent(getApplicationContext(), WidgetStreakProvider.class);
update_widgets.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
sendBroadcast(update_widgets);
}
@ -2198,7 +2198,7 @@ public class MeditationAssistant extends Application {
AppWidgetManager man = AppWidgetManager
.getInstance(getApplicationContext());
/*int[] ids = man.getAppWidgetIds(new ComponentName(
getApplicationContext(), MeditationProvider.class));*/
getApplicationContext(), WidgetStreakProvider.class));*/
Intent updateIntent = new Intent();
updateIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
getApplicationContext().sendBroadcast(updateIntent);

View File

@ -1,5 +0,0 @@
package sh.ftp.rocketninelabs.meditationassistant;
public class MeditationProvider1 extends MeditationProvider {
}

View File

@ -1,5 +0,0 @@
package sh.ftp.rocketninelabs.meditationassistant;
public class MeditationProvider2 extends MeditationProvider {
}

View File

@ -1,5 +0,0 @@
package sh.ftp.rocketninelabs.meditationassistant;
public class MeditationProvider3 extends MeditationProvider {
}

View File

@ -85,15 +85,15 @@ public class SettingsActivity extends PreferenceActivity {
return true;
} else if (preference instanceof ColorPickerPreference) {
Intent intent2 = new Intent(getApplicationContext(), MeditationProvider2.class);
Intent intent2 = new Intent(getApplicationContext(), WidgetStreakProvider2.class);
intent2.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
int[] ids2 = AppWidgetManager.getInstance(getApplication()).getAppWidgetIds(new ComponentName(getApplication(), MeditationProvider2.class));
int[] ids2 = AppWidgetManager.getInstance(getApplication()).getAppWidgetIds(new ComponentName(getApplication(), WidgetStreakProvider2.class));
intent2.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids2);
sendBroadcast(intent2);
Intent intent3 = new Intent(getApplicationContext(), MeditationProvider3.class);
Intent intent3 = new Intent(getApplicationContext(), WidgetStreakProvider3.class);
intent3.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
int[] ids3 = AppWidgetManager.getInstance(getApplication()).getAppWidgetIds(new ComponentName(getApplication(), MeditationProvider3.class));
int[] ids3 = AppWidgetManager.getInstance(getApplication()).getAppWidgetIds(new ComponentName(getApplication(), WidgetStreakProvider3.class));
intent3.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids3);
sendBroadcast(intent3);

View File

@ -7,7 +7,7 @@ import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class MeditationProvider extends AppWidgetProvider {
public class WidgetPresetProvider extends AppWidgetProvider {
private int[] mergeInts(int[] arg1, int[] arg2) {
int[] result = new int[arg1.length + arg2.length];
@ -28,9 +28,10 @@ public class MeditationProvider extends AppWidgetProvider {
if (intent != null && intent.getAction() != null && intent.getAction().equals(AppWidgetManager.ACTION_APPWIDGET_UPDATE)) {
AppWidgetManager gm = AppWidgetManager.getInstance(context);
int[] ids = gm.getAppWidgetIds(new ComponentName(context, MeditationProvider.class));
ids = mergeInts(ids, gm.getAppWidgetIds(new ComponentName(context, MeditationProvider2.class)));
ids = mergeInts(ids, gm.getAppWidgetIds(new ComponentName(context, MeditationProvider3.class)));
int[] ids = gm.getAppWidgetIds(new ComponentName(context, WidgetPresetProvider.class));
ids = mergeInts(ids, gm.getAppWidgetIds(new ComponentName(context, WidgetPresetProvider1.class)));
ids = mergeInts(ids, gm.getAppWidgetIds(new ComponentName(context, WidgetPresetProvider2.class)));
ids = mergeInts(ids, gm.getAppWidgetIds(new ComponentName(context, WidgetPresetProvider3.class)));
onUpdate(context, gm, ids);
}
@ -38,7 +39,7 @@ public class MeditationProvider extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
Intent intent = new Intent(context, WidgetService.class);
Intent intent = new Intent(context, WidgetPresetService.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
context.startService(intent);

View File

@ -0,0 +1,5 @@
package sh.ftp.rocketninelabs.meditationassistant;
public class WidgetPresetProvider1 extends WidgetPresetProvider {
}

View File

@ -0,0 +1,5 @@
package sh.ftp.rocketninelabs.meditationassistant;
public class WidgetPresetProvider2 extends WidgetPresetProvider {
}

View File

@ -0,0 +1,5 @@
package sh.ftp.rocketninelabs.meditationassistant;
public class WidgetPresetProvider3 extends WidgetPresetProvider {
}

View File

@ -0,0 +1,60 @@
package sh.ftp.rocketninelabs.meditationassistant;
import android.app.PendingIntent;
import android.app.Service;
import android.appwidget.AppWidgetManager;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
import android.widget.RemoteViews;
public class WidgetPresetService extends Service {
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this
.getApplicationContext());
Log.d("MeditationAssistant", "Widget onStartCommand(): " + String.valueOf(intent));
if (intent == null) {
Log.d("MeditationAssistant", "Widget intent was null, exiting...");
return START_STICKY;
}
int[] allWidgetIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);
if (allWidgetIds != null && allWidgetIds.length > 0) {
for (int widgetId : allWidgetIds) {
RemoteViews updateViews = new RemoteViews(this.getPackageName(),
R.layout.widget_preset);
Log.d("MA", "Update view class " + updateViews.getClass());
MeditationAssistant ma = (MeditationAssistant) this
.getApplication();
updateViews.setTextColor(R.id.txtWidgetPresetText, ma.getPrefs().getInt("pref_widgetcolor", -16777216));
String label = ma.getPrefs().getString("pref_preset_1_label", "");
if (label.equals("")) {
label = "Preset";
}
// TODO: How to identify different preset widgets?
updateViews.setTextViewText(R.id.txtWidgetPresetText, label);
Intent clickintent = new Intent(getApplicationContext(), MainActivity.class);
clickintent.setAction("widgetclick");
PendingIntent pendingIntent = PendingIntent.getActivity(
getApplicationContext(), 0, clickintent, 0);
updateViews.setOnClickPendingIntent(R.id.layWidget, pendingIntent);
updateViews.setOnClickPendingIntent(R.id.txtWidgetPresetText, pendingIntent);
appWidgetManager.updateAppWidget(widgetId, updateViews);
}
}
return START_STICKY;
}
}

View File

@ -0,0 +1,48 @@
package sh.ftp.rocketninelabs.meditationassistant;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class WidgetStreakProvider extends AppWidgetProvider {
private int[] mergeInts(int[] arg1, int[] arg2) {
int[] result = new int[arg1.length + arg2.length];
System.arraycopy(arg1, 0, result, 0, arg1.length);
System.arraycopy(arg2, 0, result, arg1.length, arg2.length);
return result;
}
@Override
public void onEnabled(Context context) {
Log.d("MeditationAssistant", "Widget onEnabled");
super.onEnabled(context);
}
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if (intent != null && intent.getAction() != null && intent.getAction().equals(AppWidgetManager.ACTION_APPWIDGET_UPDATE)) {
AppWidgetManager gm = AppWidgetManager.getInstance(context);
int[] ids = gm.getAppWidgetIds(new ComponentName(context, WidgetStreakProvider.class));
ids = mergeInts(ids, gm.getAppWidgetIds(new ComponentName(context, WidgetStreakProvider1.class)));
ids = mergeInts(ids, gm.getAppWidgetIds(new ComponentName(context, WidgetStreakProvider2.class)));
ids = mergeInts(ids, gm.getAppWidgetIds(new ComponentName(context, WidgetStreakProvider3.class)));
onUpdate(context, gm, ids);
}
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
Intent intent = new Intent(context, WidgetStreakService.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
context.startService(intent);
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
}

View File

@ -0,0 +1,5 @@
package sh.ftp.rocketninelabs.meditationassistant;
public class WidgetStreakProvider1 extends WidgetStreakProvider {
}

View File

@ -0,0 +1,5 @@
package sh.ftp.rocketninelabs.meditationassistant;
public class WidgetStreakProvider2 extends WidgetStreakProvider {
}

View File

@ -0,0 +1,5 @@
package sh.ftp.rocketninelabs.meditationassistant;
public class WidgetStreakProvider3 extends WidgetStreakProvider {
}

View File

@ -8,7 +8,7 @@ import android.os.IBinder;
import android.util.Log;
import android.widget.RemoteViews;
public class WidgetService extends Service {
public class WidgetStreakService extends Service {
public IBinder onBind(Intent intent) {
return null;
}
@ -28,28 +28,29 @@ public class WidgetService extends Service {
if (allWidgetIds != null && allWidgetIds.length > 0) {
for (int widgetId : allWidgetIds) {
RemoteViews updateViews = new RemoteViews(this.getPackageName(),
R.layout.widget_layout);
getApplication();
R.layout.widget_streak);
Log.d("MA", "Update view class " + updateViews.getClass());
MeditationAssistant ma = (MeditationAssistant) this
.getApplication();
updateViews.setTextColor(R.id.txtWidgetDays, ma.getPrefs().getInt("pref_widgetcolor", -16777216));
updateViews.setTextColor(R.id.txtWidgetText, ma.getPrefs().getInt("pref_widgetcolor", -16777216));
updateViews.setTextColor(R.id.txtWidgetStreakDays, ma.getPrefs().getInt("pref_widgetcolor", -16777216));
updateViews.setTextColor(R.id.txtWidgetStreakText, ma.getPrefs().getInt("pref_widgetcolor", -16777216));
if (ma.getMeditationStreak().get(0) > 0) {
updateViews.setTextViewText(R.id.txtWidgetDays,
updateViews.setTextViewText(R.id.txtWidgetStreakDays,
String.valueOf(ma.getMeditationStreak().get(0)));
updateViews.setTextViewText(
R.id.txtWidgetText,
R.id.txtWidgetStreakText,
getResources().getQuantityString(
R.plurals.daysOfMeditationWithoutCount,
ma.getMeditationStreak().get(0).intValue())
);
} else {
updateViews.setTextViewText(R.id.txtWidgetDays,
updateViews.setTextViewText(R.id.txtWidgetStreakDays,
getString(R.string.ignore_om));
updateViews.setTextViewText(R.id.txtWidgetText,
updateViews.setTextViewText(R.id.txtWidgetStreakText,
getString(R.string.meditateToday));
}
@ -58,8 +59,8 @@ public class WidgetService extends Service {
PendingIntent pendingIntent = PendingIntent.getActivity(
getApplicationContext(), 0, clickintent, 0);
updateViews.setOnClickPendingIntent(R.id.layWidget, pendingIntent);
updateViews.setOnClickPendingIntent(R.id.txtWidgetDays, pendingIntent);
updateViews.setOnClickPendingIntent(R.id.txtWidgetText, pendingIntent);
updateViews.setOnClickPendingIntent(R.id.txtWidgetStreakDays, pendingIntent);
updateViews.setOnClickPendingIntent(R.id.txtWidgetStreakText, pendingIntent);
appWidgetManager.updateAppWidget(widgetId, updateViews);
}

View File

@ -0,0 +1,26 @@
<FrameLayout
android:id="@+id/layWidget"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:padding="@dimen/widget_margin">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<TextView
android:id="@+id/txtWidgetPresetText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:clickable="true"
android:gravity="right"
android:text=""
android:textAppearance="?android:attr/textAppearanceMedium"
android:textSize="18sp"/>
</LinearLayout>
</FrameLayout>

View File

@ -12,7 +12,7 @@
android:orientation="horizontal">
<TextView
android:id="@+id/txtWidgetDays"
android:id="@+id/txtWidgetStreakDays"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
@ -23,7 +23,7 @@
android:textSize="37sp"/>
<TextView
android:id="@+id/txtWidgetText"
android:id="@+id/txtWidgetStreakText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"

View File

@ -280,9 +280,12 @@
\nThis dialog will not appear again.</string>
<string name="translateMeditationAssistantText">Are you interested in assisting with translating Meditation Assistant?</string>
<!-- Widgets -->
<string name="widget1x1" tools:ignore="UnusedResources">Meditation Assistant 1x1</string>
<string name="widget2x1" tools:ignore="UnusedResources">Meditation Assistant 2x1</string>
<string name="widget3x1" tools:ignore="UnusedResources">Meditation Assistant 3x1</string>
<string name="widgetpreset1x1" tools:ignore="UnusedResources">Preset 1x1</string>
<string name="widgetpreset2x1" tools:ignore="UnusedResources">Preset 2x1</string>
<string name="widgetpreset3x1" tools:ignore="UnusedResources">Preset 3x1</string>
<string name="widgetstreak1x1" tools:ignore="UnusedResources">Streak 1x1</string>
<string name="widgetstreak2x1" tools:ignore="UnusedResources">Streak 2x1</string>
<string name="widgetstreak3x1" tools:ignore="UnusedResources">Streak 3x1</string>
<!-- Meta -->
<string name="appStoreListingShort">Feature packed meditation session timer and recorder</string>
<string name="appStoreListingFull">- Automatic device mode while meditating.

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:initialLayout="@layout/widget_preset"
android:minHeight="40dp"
android:minWidth="40dp"
android:resizeMode="horizontal"
android:theme="@style/MeditationDarkTheme"
android:updatePeriodMillis="43200000"
android:widgetCategory="keyguard|home_screen"
tools:ignore="UnusedAttribute">
</appwidget-provider>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:initialLayout="@layout/widget_preset"
android:minHeight="40dp"
android:minWidth="110dp"
android:resizeMode="horizontal"
android:theme="@style/MeditationDarkTheme"
android:updatePeriodMillis="43200000"
android:widgetCategory="keyguard|home_screen"
tools:ignore="UnusedAttribute">
</appwidget-provider>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:initialLayout="@layout/widget_preset"
android:minHeight="40dp"
android:minWidth="180dp"
android:resizeMode="horizontal"
android:theme="@style/MeditationDarkTheme"
android:updatePeriodMillis="43200000"
android:widgetCategory="keyguard|home_screen"
tools:ignore="UnusedAttribute">
</appwidget-provider>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:initialLayout="@layout/widget_layout"
android:initialLayout="@layout/widget_streak"
android:minHeight="40dp"
android:minWidth="40dp"
android:resizeMode="horizontal"

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:initialLayout="@layout/widget_layout"
android:initialLayout="@layout/widget_streak"
android:minHeight="40dp"
android:minWidth="110dp"
android:resizeMode="horizontal"

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:initialLayout="@layout/widget_layout"
android:initialLayout="@layout/widget_streak"
android:minHeight="40dp"
android:minWidth="180dp"
android:resizeMode="horizontal"