diff --git a/.vscode/settings.json b/.vscode/settings.json index 794cfe05..df770654 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -11,5 +11,6 @@ "i18n-ally.keystyle": "nested", "cSpell.words": [ "Materialious" - ] + ], + "java.configuration.updateBuildConfiguration": "interactive" } \ No newline at end of file diff --git a/materialious/android/app/build.gradle b/materialious/android/app/build.gradle index 510caa83..1a5b7987 100644 --- a/materialious/android/app/build.gradle +++ b/materialious/android/app/build.gradle @@ -37,6 +37,7 @@ dependencies { implementation "androidx.core:core-splashscreen:$coreSplashScreenVersion" implementation project(':capacitor-android') testImplementation "junit:junit:$junitVersion" + implementation 'com.google.android.material:material:1.12.0' androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion" androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion" implementation project(':capacitor-cordova-android-plugins') diff --git a/materialious/android/app/src/main/java/us/materialio/app/ColorTheme.java b/materialious/android/app/src/main/java/us/materialio/app/ColorTheme.java new file mode 100644 index 00000000..abd91466 --- /dev/null +++ b/materialious/android/app/src/main/java/us/materialio/app/ColorTheme.java @@ -0,0 +1,47 @@ +package us.materialio.app; + +import android.content.Context; +import android.content.res.TypedArray; + +import com.getcapacitor.annotation.CapacitorPlugin; +import com.getcapacitor.PluginMethod; +import com.getcapacitor.PluginCall; +import com.getcapacitor.Plugin; +import com.getcapacitor.JSObject; +import com.google.android.material.color.DynamicColors; + +@CapacitorPlugin(name = "ColorTheme") +public class ColorTheme extends Plugin { + @PluginMethod() + public void getColorPalette(PluginCall call) { + JSObject colorPalette = new JSObject(); + + if (DynamicColors.isDynamicColorAvailable()) { + Context dynamicColorContext = DynamicColors.wrapContextIfAvailable(getContext(), com.google.android.material.R.style.ThemeOverlay_Material3_DynamicColors_DayNight); + + int[] attrsToResolve = { + com.google.android.material.R.attr.colorPrimary, + com.google.android.material.R.attr.colorOnPrimary, + com.google.android.material.R.attr.colorSecondary, + com.google.android.material.R.attr.colorAccent + }; + + try { + TypedArray ta = dynamicColorContext.obtainStyledAttributes(attrsToResolve); + + colorPalette.put("primary", ta.getColor(0,0)); + colorPalette.put("onPrimary", ta.getColor(1,0)); + colorPalette.put("secondary", ta.getColor(2,0)); + colorPalette.put("accent", ta.getColor(3,0)); + + ta.recycle(); + + call.resolve(colorPalette); + } catch (Exception e) { + call.reject("Unable to fetch dynamic color"); + } + } else { + call.reject("Dynamic color not available"); + } + } +} diff --git a/materialious/android/app/src/main/java/us/materialio/app/MainActivity.java b/materialious/android/app/src/main/java/us/materialio/app/MainActivity.java index 9171d44e..feee75e4 100644 --- a/materialious/android/app/src/main/java/us/materialio/app/MainActivity.java +++ b/materialious/android/app/src/main/java/us/materialio/app/MainActivity.java @@ -1,5 +1,13 @@ package us.materialio.app; +import android.os.Bundle; + import com.getcapacitor.BridgeActivity; -public class MainActivity extends BridgeActivity {} +public class MainActivity extends BridgeActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + registerPlugin(ColorTheme.class); + super.onCreate(savedInstanceState); + } +} diff --git a/materialious/android/app/src/main/res/values/styles.xml b/materialious/android/app/src/main/res/values/styles.xml index be874e54..e07ee615 100644 --- a/materialious/android/app/src/main/res/values/styles.xml +++ b/materialious/android/app/src/main/res/values/styles.xml @@ -2,11 +2,7 @@ -