aboutsummaryrefslogtreecommitdiff
path: root/app/src
diff options
context:
space:
mode:
authorAlex Ning <chineseperson5@gmail.com>2021-07-02 15:16:18 +0000
committerAlex Ning <chineseperson5@gmail.com>2021-07-02 15:16:18 +0000
commite3578c59dd7cb65c3d78a1bd219d05577472a0b6 (patch)
treea7bb0b3a04035d210fd6f38c80feafc39288b41c /app/src
parent992cf0dda12f16f19baec2f7ec6197da314a9096 (diff)
downloadinfinity-for-reddit-e3578c59dd7cb65c3d78a1bd219d05577472a0b6.tar
infinity-for-reddit-e3578c59dd7cb65c3d78a1bd219d05577472a0b6.tar.gz
infinity-for-reddit-e3578c59dd7cb65c3d78a1bd219d05577472a0b6.tar.bz2
infinity-for-reddit-e3578c59dd7cb65c3d78a1bd219d05577472a0b6.tar.lz
infinity-for-reddit-e3578c59dd7cb65c3d78a1bd219d05577472a0b6.tar.xz
infinity-for-reddit-e3578c59dd7cb65c3d78a1bd219d05577472a0b6.tar.zst
infinity-for-reddit-e3578c59dd7cb65c3d78a1bd219d05577472a0b6.zip
Save light, dark and amoled Material You themes to database. Add 'Apply Material You' option. Test MotionLayout.
Diffstat (limited to 'app/src')
-rw-r--r--app/src/main/AndroidManifest.xml3
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/activities/MotionTestActivity.java41
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/broadcastreceivers/WallpaperChangeReceiver.java15
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/customviews/ClickableMotionLayout.java39
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/services/MaterialYouService.java5
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/settings/ThemePreferenceFragment.java32
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/utils/MaterialYouUtils.java104
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/utils/SharedPreferencesUtils.java1
-rw-r--r--app/src/main/res/layout/activity_motion_test.xml17
-rw-r--r--app/src/main/res/values/strings.xml3
-rw-r--r--app/src/main/res/xml/activity_motion_test_scene.xml45
-rw-r--r--app/src/main/res/xml/item_post_with_preview_scene.xml26
-rw-r--r--app/src/main/res/xml/theme_preferences.xml17
13 files changed, 302 insertions, 46 deletions
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5e6fbdc6..a4275813 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -32,6 +32,8 @@
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true"
tools:replace="android:label">
+ <activity android:name=".activities.MotionTestActivity"
+ android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".activities.LockScreenActivity"
android:theme="@style/AppTheme.NoActionBar" />
@@ -430,7 +432,6 @@
android:name=".services.SubmitPostService"
android:enabled="true"
android:exported="false" />
-
<service
android:name=".services.MaterialYouService"
android:exported="false" />
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/MotionTestActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/MotionTestActivity.java
new file mode 100644
index 00000000..ba8d0681
--- /dev/null
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/MotionTestActivity.java
@@ -0,0 +1,41 @@
+package ml.docilealligator.infinityforreddit.activities;
+
+import android.os.Bundle;
+import android.util.Log;
+
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.constraintlayout.motion.widget.MotionLayout;
+
+import ml.docilealligator.infinityforreddit.R;
+
+public class MotionTestActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_motion_test);
+
+ MotionLayout motionLayout = findViewById(R.id.motion_layout);
+ motionLayout.addTransitionListener(new MotionLayout.TransitionListener() {
+ @Override
+ public void onTransitionStarted(MotionLayout motionLayout, int i, int i1) {
+ Log.i("asdfasdf", "start " + (i == R.id.start) + " " + (i1 == R.id.end));
+ }
+
+ @Override
+ public void onTransitionChange(MotionLayout motionLayout, int i, int i1, float v) {
+ Log.i("asdfasdf", "start " + (i == R.id.start) + " " + (i1 == R.id.end) + " " + v);
+ }
+
+ @Override
+ public void onTransitionCompleted(MotionLayout motionLayout, int i) {
+ Log.i("asdfasdf", "complete " + (i == R.id.start));
+ }
+
+ @Override
+ public void onTransitionTrigger(MotionLayout motionLayout, int i, boolean b, float v) {
+ Log.i("asdfasdf", "trigger " + (i == R.id.start) + " " + v + " " + b);
+ }
+ });
+ }
+} \ No newline at end of file
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/broadcastreceivers/WallpaperChangeReceiver.java b/app/src/main/java/ml/docilealligator/infinityforreddit/broadcastreceivers/WallpaperChangeReceiver.java
index 8028cdfc..ae9392f7 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/broadcastreceivers/WallpaperChangeReceiver.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/broadcastreceivers/WallpaperChangeReceiver.java
@@ -3,13 +3,24 @@ package ml.docilealligator.infinityforreddit.broadcastreceivers;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
+import android.content.SharedPreferences;
+
+import javax.inject.Inject;
+import javax.inject.Named;
import ml.docilealligator.infinityforreddit.services.MaterialYouService;
+import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
public class WallpaperChangeReceiver extends BroadcastReceiver {
+ @Inject
+ @Named("default")
+ SharedPreferences mSharedPreferences;
+
@Override
public void onReceive(Context context, Intent intent) {
- Intent materialYouIntent = new Intent(context, MaterialYouService.class);
- context.startService(materialYouIntent);
+ if (mSharedPreferences.getBoolean(SharedPreferencesUtils.ENABLE_MATERIAL_YOU, false)) {
+ Intent materialYouIntent = new Intent(context, MaterialYouService.class);
+ context.startService(materialYouIntent);
+ }
}
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/customviews/ClickableMotionLayout.java b/app/src/main/java/ml/docilealligator/infinityforreddit/customviews/ClickableMotionLayout.java
new file mode 100644
index 00000000..8c0f47ff
--- /dev/null
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/customviews/ClickableMotionLayout.java
@@ -0,0 +1,39 @@
+package ml.docilealligator.infinityforreddit.customviews;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.ViewConfiguration;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.constraintlayout.motion.widget.MotionLayout;
+
+public class ClickableMotionLayout extends MotionLayout {
+ private long mStartTime = 0;
+
+ public ClickableMotionLayout(@NonNull Context context) {
+ super(context);
+ }
+
+ public ClickableMotionLayout(@NonNull Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public ClickableMotionLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ @Override
+ public boolean onInterceptTouchEvent(MotionEvent event) {
+ if ( event.getAction() == MotionEvent.ACTION_DOWN ) {
+ mStartTime = event.getEventTime();
+ } else if ( event.getAction() == MotionEvent.ACTION_UP ) {
+ if ( event.getEventTime() - mStartTime <= ViewConfiguration.getTapTimeout() ) {
+ return false;
+ }
+ }
+
+ return super.onInterceptTouchEvent(event);
+ }
+}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/services/MaterialYouService.java b/app/src/main/java/ml/docilealligator/infinityforreddit/services/MaterialYouService.java
index ec4448ff..221b980b 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/services/MaterialYouService.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/services/MaterialYouService.java
@@ -40,7 +40,8 @@ public class MaterialYouService extends IntentService {
@Override
protected void onHandleIntent(Intent intent) {
((Infinity) getApplication()).getAppComponent().inject(this);
- MaterialYouUtils.changeTheme(this, executor, new Handler(), customThemeWrapper,
- lightThemeSharedPreferences, darkThemeSharedPreferences, amoledThemeSharedPreferences);
+ MaterialYouUtils.changeTheme(this, executor, new Handler(), redditDataRoomDatabase,
+ customThemeWrapper, lightThemeSharedPreferences, darkThemeSharedPreferences,
+ amoledThemeSharedPreferences);
}
} \ No newline at end of file
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/settings/ThemePreferenceFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/settings/ThemePreferenceFragment.java
index c4d03d48..2e94f166 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/settings/ThemePreferenceFragment.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/settings/ThemePreferenceFragment.java
@@ -50,6 +50,9 @@ public class ThemePreferenceFragment extends PreferenceFragmentCompat {
private AppCompatActivity activity;
@Inject
+ @Named("default")
+ SharedPreferences sharedPreferences;
+ @Inject
@Named("light_theme")
SharedPreferences lightThemeSharedPreferences;
@Inject
@@ -79,6 +82,7 @@ public class ThemePreferenceFragment extends PreferenceFragmentCompat {
Preference customizeAmoledThemePreference = findPreference(SharedPreferencesUtils.CUSTOMIZE_AMOLED_THEME);
Preference selectAndCustomizeThemePreference = findPreference(SharedPreferencesUtils.MANAGE_THEMES);
SwitchPreference enableMaterialYouSwitchPreference = findPreference(SharedPreferencesUtils.ENABLE_MATERIAL_YOU);
+ Preference applyMaterialYouPreference = findPreference(SharedPreferencesUtils.APPLY_MATERIAL_YOU);
boolean systemDefault = Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q;
if (themePreference != null && amoledDarkSwitch != null) {
@@ -169,15 +173,33 @@ public class ThemePreferenceFragment extends PreferenceFragmentCompat {
});
}
- if (enableMaterialYouSwitchPreference != null) {
- Handler handler = new Handler();
+ if (enableMaterialYouSwitchPreference != null && applyMaterialYouPreference != null) {
+ applyMaterialYouPreference.setVisible(
+ sharedPreferences.getBoolean(SharedPreferencesUtils.ENABLE_MATERIAL_YOU, false));
+
enableMaterialYouSwitchPreference.setOnPreferenceChangeListener((preference, newValue) -> {
- if (true) {
- MaterialYouUtils.changeTheme(activity, executor, new Handler(), customThemeWrapper,
- lightThemeSharedPreferences, darkThemeSharedPreferences, amoledThemeSharedPreferences);
+ if ((Boolean) newValue) {
+ MaterialYouUtils.changeTheme(activity, executor, new Handler(),
+ redditDataRoomDatabase, customThemeWrapper,
+ lightThemeSharedPreferences, darkThemeSharedPreferences,
+ amoledThemeSharedPreferences);
+ applyMaterialYouPreference.setVisible(true);
+ } else {
+ applyMaterialYouPreference.setVisible(false);
}
return true;
});
+
+ applyMaterialYouPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ MaterialYouUtils.changeTheme(activity, executor, new Handler(),
+ redditDataRoomDatabase, customThemeWrapper,
+ lightThemeSharedPreferences, darkThemeSharedPreferences,
+ amoledThemeSharedPreferences);
+ return true;
+ }
+ });
}
customThemeViewModel = new ViewModelProvider(this,
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/utils/MaterialYouUtils.java b/app/src/main/java/ml/docilealligator/infinityforreddit/utils/MaterialYouUtils.java
index e74d7e53..37e92aa1 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/utils/MaterialYouUtils.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/utils/MaterialYouUtils.java
@@ -14,11 +14,33 @@ import org.greenrobot.eventbus.EventBus;
import java.util.concurrent.Executor;
+import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
+import ml.docilealligator.infinityforreddit.customtheme.CustomTheme;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.events.RecreateActivityEvent;
public class MaterialYouUtils {
+ public interface CheckThemeNameListener {
+ void themeNotExists();
+ void themeExists();
+ }
+
+ public static void checkThemeName(Executor executor, Handler handler,
+ RedditDataRoomDatabase redditDataRoomDatabase,
+ CheckThemeNameListener checkThemeNameListener) {
+ executor.execute(() -> {
+ if (redditDataRoomDatabase.customThemeDao().getCustomTheme("Material You") != null
+ || redditDataRoomDatabase.customThemeDao().getCustomTheme("Material You Dark") != null
+ || redditDataRoomDatabase.customThemeDao().getCustomTheme("Material You Amoled") != null) {
+ handler.post(checkThemeNameListener::themeExists);
+ } else {
+ handler.post(checkThemeNameListener::themeNotExists);
+ }
+ });
+ }
+
public static void changeTheme(Context context, Executor executor, Handler handler,
+ RedditDataRoomDatabase redditDataRoomDatabase,
CustomThemeWrapper customThemeWrapper,
SharedPreferences lightThemeSharedPreferences,
SharedPreferences darkThemeSharedPreferences,
@@ -29,6 +51,10 @@ public class MaterialYouUtils {
WallpaperColors wallpaperColors = wallpaperManager.getWallpaperColors(WallpaperManager.FLAG_SYSTEM);
if (wallpaperColors != null) {
+ CustomTheme lightTheme = CustomThemeWrapper.getIndigo(context);
+ CustomTheme darkTheme = CustomThemeWrapper.getIndigoDark(context);
+ CustomTheme amoledTheme = CustomThemeWrapper.getIndigoAmoled(context);
+
int colorPrimaryInt = shiftColorTo255(wallpaperColors.getPrimaryColor().toArgb(), 0.4);
int colorPrimaryDarkInt = shiftColorTo0(colorPrimaryInt, 0.3);
int backgroundColor = shiftColorTo255(colorPrimaryInt, 0.6);
@@ -39,39 +65,51 @@ public class MaterialYouUtils {
int colorPrimaryAppropriateTextColor = getAppropriateTextColor(colorPrimaryInt);
int backgroundColorAppropriateTextColor = getAppropriateTextColor(backgroundColor);
- lightThemeSharedPreferences.edit().putInt(CustomThemeSharedPreferencesUtils.COLOR_PRIMARY, colorPrimaryInt)
- .putInt(CustomThemeSharedPreferencesUtils.COLOR_PRIMARY_DARK, colorPrimaryDarkInt)
- .putInt(CustomThemeSharedPreferencesUtils.COLOR_ACCENT, colorAccentInt)
- .putInt(CustomThemeSharedPreferencesUtils.COLOR_PRIMARY_LIGHT_THEME, colorPrimaryInt)
- .putInt(CustomThemeSharedPreferencesUtils.BACKGROUND_COLOR, backgroundColor)
- .putInt(CustomThemeSharedPreferencesUtils.CARD_VIEW_BACKGROUND_COLOR, cardViewBackgroundColor)
- .putInt(CustomThemeSharedPreferencesUtils.COMMENT_BACKGROUND_COLOR, cardViewBackgroundColor)
- .putInt(CustomThemeSharedPreferencesUtils.AWARDED_COMMENT_BACKGROUND_COLOR, cardViewBackgroundColor)
- .putInt(CustomThemeSharedPreferencesUtils.BOTTOM_APP_BAR_BACKGROUND_COLOR, colorPrimaryInt)
- .putInt(CustomThemeSharedPreferencesUtils.NAV_BAR_COLOR, colorPrimaryInt)
- .putInt(CustomThemeSharedPreferencesUtils.PRIMARY_TEXT_COLOR, backgroundColorAppropriateTextColor)
- .putInt(CustomThemeSharedPreferencesUtils.BOTTOM_APP_BAR_ICON_COLOR, colorPrimaryAppropriateTextColor)
- .putInt(CustomThemeSharedPreferencesUtils.PRIMARY_ICON_COLOR, backgroundColorAppropriateTextColor)
- .putInt(CustomThemeSharedPreferencesUtils.FAB_ICON_COLOR, colorPrimaryAppropriateTextColor)
- .putInt(CustomThemeSharedPreferencesUtils.TOOLBAR_PRIMARY_TEXT_AND_ICON_COLOR, colorPrimaryAppropriateTextColor)
- .putInt(CustomThemeSharedPreferencesUtils.TOOLBAR_SECONDARY_TEXT_COLOR, colorPrimaryAppropriateTextColor)
- .putInt(CustomThemeSharedPreferencesUtils.TAB_LAYOUT_WITH_COLLAPSED_COLLAPSING_TOOLBAR_TAB_INDICATOR, colorPrimaryAppropriateTextColor)
- .putInt(CustomThemeSharedPreferencesUtils.TAB_LAYOUT_WITH_COLLAPSED_COLLAPSING_TOOLBAR_TEXT_COLOR, colorPrimaryAppropriateTextColor)
- .putInt(CustomThemeSharedPreferencesUtils.TAB_LAYOUT_WITH_COLLAPSED_COLLAPSING_TOOLBAR_TAB_BACKGROUND, colorPrimaryInt)
- .putInt(CustomThemeSharedPreferencesUtils.TAB_LAYOUT_WITH_EXPANDED_COLLAPSING_TOOLBAR_TAB_BACKGROUND, colorPrimaryInt)
- .putInt(CustomThemeSharedPreferencesUtils.TAB_LAYOUT_WITH_EXPANDED_COLLAPSING_TOOLBAR_TAB_INDICATOR, colorPrimaryAppropriateTextColor)
- .putInt(CustomThemeSharedPreferencesUtils.TAB_LAYOUT_WITH_EXPANDED_COLLAPSING_TOOLBAR_TEXT_COLOR, colorPrimaryAppropriateTextColor)
- .putInt(CustomThemeSharedPreferencesUtils.CIRCULAR_PROGRESS_BAR_BACKGROUND, colorPrimaryInt)
- .putBoolean(CustomThemeSharedPreferencesUtils.LIGHT_STATUS_BAR, getAppropriateTextColor(colorPrimaryInt) == Color.toArgb(Color.BLACK))
- .apply();
- darkThemeSharedPreferences.edit()
- .putInt(CustomThemeSharedPreferencesUtils.COLOR_ACCENT, colorPrimaryInt)
- .putInt(CustomThemeSharedPreferencesUtils.COLOR_PRIMARY_LIGHT_THEME, colorPrimaryInt)
- .apply();
- amoledThemeSharedPreferences.edit()
- .putInt(CustomThemeSharedPreferencesUtils.COLOR_ACCENT, colorPrimaryInt)
- .putInt(CustomThemeSharedPreferencesUtils.COLOR_PRIMARY_LIGHT_THEME, colorPrimaryInt)
- .apply();
+ lightTheme.colorPrimary = colorPrimaryInt;
+ lightTheme.colorPrimaryDark = colorPrimaryDarkInt;
+ lightTheme.colorAccent = colorAccentInt;
+ lightTheme.colorPrimaryLightTheme = colorPrimaryInt;
+ lightTheme.backgroundColor = backgroundColor;
+ lightTheme.cardViewBackgroundColor = cardViewBackgroundColor;
+ lightTheme.commentBackgroundColor = cardViewBackgroundColor;
+ lightTheme.awardedCommentBackgroundColor = cardViewBackgroundColor;
+ lightTheme.bottomAppBarBackgroundColor = colorPrimaryInt;
+ lightTheme.navBarColor = colorPrimaryInt;
+ lightTheme.primaryTextColor = backgroundColorAppropriateTextColor;
+ lightTheme.bottomAppBarIconColor = colorPrimaryAppropriateTextColor;
+ lightTheme.primaryIconColor = backgroundColorAppropriateTextColor;
+ lightTheme.fabIconColor = colorPrimaryAppropriateTextColor;
+ lightTheme.toolbarPrimaryTextAndIconColor = colorPrimaryAppropriateTextColor;
+ lightTheme.toolbarSecondaryTextColor = colorPrimaryAppropriateTextColor;
+ lightTheme.tabLayoutWithCollapsedCollapsingToolbarTabIndicator = colorPrimaryAppropriateTextColor;
+ lightTheme.tabLayoutWithCollapsedCollapsingToolbarTextColor = colorPrimaryAppropriateTextColor;
+ lightTheme.tabLayoutWithCollapsedCollapsingToolbarTabBackground = colorPrimaryInt;
+ lightTheme.tabLayoutWithExpandedCollapsingToolbarTabBackground = colorPrimaryInt;
+ lightTheme.tabLayoutWithExpandedCollapsingToolbarTabIndicator = colorPrimaryAppropriateTextColor;
+ lightTheme.tabLayoutWithExpandedCollapsingToolbarTextColor = colorPrimaryAppropriateTextColor;
+ lightTheme.circularProgressBarBackground = colorPrimaryInt;
+ lightTheme.isLightStatusBar = getAppropriateTextColor(colorPrimaryInt) == Color.toArgb(Color.BLACK);
+ lightTheme.name = "Material You";
+
+ darkTheme.colorAccent = colorPrimaryInt;
+ darkTheme.colorPrimaryLightTheme = colorPrimaryInt;
+ darkTheme.name = "Material You Dark";
+
+ amoledTheme.colorAccent = colorPrimaryInt;
+ amoledTheme.colorPrimaryLightTheme = colorPrimaryInt;
+ amoledTheme.name = "Material You Amoled";
+
+ redditDataRoomDatabase.customThemeDao().unsetLightTheme();
+ redditDataRoomDatabase.customThemeDao().unsetDarkTheme();
+ redditDataRoomDatabase.customThemeDao().unsetAmoledTheme();
+
+ redditDataRoomDatabase.customThemeDao().insert(lightTheme);
+ redditDataRoomDatabase.customThemeDao().insert(darkTheme);
+ redditDataRoomDatabase.customThemeDao().insert(amoledTheme);
+
+ CustomThemeSharedPreferencesUtils.insertThemeToSharedPreferences(lightTheme, lightThemeSharedPreferences);
+ CustomThemeSharedPreferencesUtils.insertThemeToSharedPreferences(darkTheme, darkThemeSharedPreferences);
+ CustomThemeSharedPreferencesUtils.insertThemeToSharedPreferences(amoledTheme, amoledThemeSharedPreferences);
handler.post(() -> EventBus.getDefault().post(new RecreateActivityEvent()));
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/utils/SharedPreferencesUtils.java b/app/src/main/java/ml/docilealligator/infinityforreddit/utils/SharedPreferencesUtils.java
index 5eecceb1..82343e4f 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/utils/SharedPreferencesUtils.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/utils/SharedPreferencesUtils.java
@@ -181,6 +181,7 @@ public class SharedPreferencesUtils {
public static final String DISABLE_NSFW_FOREVER = "disable_nsfw_forever";
public static final String SHOW_ONLY_ONE_COMMENT_LEVEL_INDICATOR = "show_only_one_comment_level_indicator";
public static final String ENABLE_MATERIAL_YOU = "enable_material_you";
+ public static final String APPLY_MATERIAL_YOU = "apply_material_you";
public static final String DEFAULT_PREFERENCES_FILE = "ml.docilealligator.infinityforreddit_preferences";
public static final String MAIN_PAGE_TABS_SHARED_PREFERENCES_FILE = "ml.docilealligator.infinityforreddit.main_page_tabs";
diff --git a/app/src/main/res/layout/activity_motion_test.xml b/app/src/main/res/layout/activity_motion_test.xml
new file mode 100644
index 00000000..c65afba9
--- /dev/null
+++ b/app/src/main/res/layout/activity_motion_test.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ml.docilealligator.infinityforreddit.customviews.ClickableMotionLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:id="@+id/motion_layout"
+ tools:context=".activities.MotionTestActivity"
+ app:layoutDescription="@xml/activity_motion_test_scene">
+
+ <View
+ android:id="@+id/button"
+ android:background="@color/colorAccent"
+ android:layout_width="64dp"
+ android:layout_height="64dp" />
+
+</ml.docilealligator.infinityforreddit.customviews.ClickableMotionLayout> \ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ac7f028e..f657e724 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -458,8 +458,11 @@
<string name="settings_customize_amoled_theme_title">Amoled Theme</string>
<string name="settings_manage_themes_title">Manage Themes</string>
<string name="settings_category_material_you_title">Material You</string>
+ <string name="settings_enable_material_you_warning_summary">Make sure you don\'t have themes named\n\"Material You\",\n\"Material You Dark\" or\n\"Material You Amoled\".\nOtherwise, rename them before enabling Material You.</string>
<string name="settings_enable_material_you_title">Enable Material You</string>
<string name="settings_enable_material_you_summary">Personalize Infinity based on Your Wallpaper</string>
+ <string name="settings_apply_material_you_title">Apply Material You</string>
+ <string name="settings_apply_material_you_summary">In case Infinity did not change the theme</string>
<string name="settings_custom_theme_cannot_apply_to_settings_page_summary">Custom themes cannot be applied to settings page (except toolbar, status bar and navigation bar).</string>
<string name="settings_advanced_master_title">Advanced</string>
<string name="settings_delete_all_subreddits_data_in_database_title">Delete All Subreddits in Database</string>
diff --git a/app/src/main/res/xml/activity_motion_test_scene.xml b/app/src/main/res/xml/activity_motion_test_scene.xml
new file mode 100644
index 00000000..d271b2e1
--- /dev/null
+++ b/app/src/main/res/xml/activity_motion_test_scene.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:motion="http://schemas.android.com/apk/res-auto">
+
+ <Transition
+ android:id="@+id/transition_to_end"
+ motion:constraintSetStart="@+id/start"
+ motion:constraintSetEnd="@+id/end"
+ motion:autoTransition="animateToStart"
+ motion:duration="100">
+ <OnSwipe
+ motion:touchAnchorId="@+id/button"
+ motion:touchAnchorSide="right"
+ motion:onTouchUp="autoCompleteToEnd"
+ motion:dragDirection="dragRight" />
+ </Transition>
+
+ <Transition
+ android:id="@+id/transition_to_start"
+ motion:constraintSetStart="@+id/end"
+ motion:constraintSetEnd="@+id/start"
+ motion:autoTransition="animateToEnd">
+ </Transition>
+
+ <ConstraintSet android:id="@+id/start">
+ <Constraint
+ android:id="@+id/button"
+ android:layout_width="64dp"
+ android:layout_height="64dp"
+ motion:layout_constraintBottom_toBottomOf="parent"
+ motion:layout_constraintStart_toStartOf="parent"
+ motion:layout_constraintTop_toTopOf="parent" />
+ </ConstraintSet>
+
+ <ConstraintSet android:id="@+id/end">
+ <Constraint
+ android:id="@+id/button"
+ android:layout_width="64dp"
+ android:layout_height="64dp"
+ motion:layout_constraintBottom_toBottomOf="parent"
+ motion:layout_constraintStart_toEndOf="parent"
+ motion:layout_constraintTop_toTopOf="parent"/>
+ </ConstraintSet>
+
+</MotionScene>
diff --git a/app/src/main/res/xml/item_post_with_preview_scene.xml b/app/src/main/res/xml/item_post_with_preview_scene.xml
new file mode 100644
index 00000000..dc28317a
--- /dev/null
+++ b/app/src/main/res/xml/item_post_with_preview_scene.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto">
+
+ <ConstraintSet android:id="@+id/start">
+ <Constraint android:id="@+id/material_card_view_item_post_with_preview" />
+ </ConstraintSet>
+
+ <ConstraintSet android:id="@+id/end">
+ <Constraint android:id="@id/material_card_view_item_post_with_preview"
+ android:layout_width="0dp"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintWidth_percent="0.7" />
+ </ConstraintSet>
+
+ <Transition
+ app:constraintSetEnd="@id/end"
+ app:constraintSetStart="@+id/start">
+
+ <OnSwipe
+ app:dragDirection="dragRight"
+ app:touchAnchorId="@id/material_card_view_item_post_with_preview"
+ app:touchAnchorSide="right" />
+
+ </Transition>
+</MotionScene>
diff --git a/app/src/main/res/xml/theme_preferences.xml b/app/src/main/res/xml/theme_preferences.xml
index 3f726ec0..6bac18e4 100644
--- a/app/src/main/res/xml/theme_preferences.xml
+++ b/app/src/main/res/xml/theme_preferences.xml
@@ -12,6 +12,7 @@
<SwitchPreference
app:defaultValue="false"
app:key="amoled_dark"
+ app:icon="@drawable/ic_amoled_theme_preference_24dp"
app:title="@string/settings_amoled_dark_title" />
<PreferenceCategory
@@ -40,9 +41,19 @@
app:icon="@drawable/ic_edit_24dp"
app:title="@string/settings_manage_themes_title" />
+ <Preference
+ app:icon="@drawable/ic_info_preference_24dp"
+ app:summary="@string/settings_custom_theme_cannot_apply_to_settings_page_summary"
+ app:enabled="false" />
+
<PreferenceCategory
app:title="@string/settings_category_material_you_title" />
+ <Preference
+ app:icon="@drawable/ic_info_preference_24dp"
+ app:summary="@string/settings_enable_material_you_warning_summary"
+ app:enabled="false" />
+
<SwitchPreference
app:defaultValue="false"
app:key="enable_material_you"
@@ -50,8 +61,8 @@
app:summary="@string/settings_enable_material_you_summary" />
<Preference
- app:icon="@drawable/ic_info_preference_24dp"
- app:summary="@string/settings_custom_theme_cannot_apply_to_settings_page_summary"
- app:enabled="false" />
+ app:key="apply_material_you"
+ app:title="@string/settings_apply_material_you_title"
+ app:summary="@string/settings_apply_material_you_summary" />
</PreferenceScreen> \ No newline at end of file