Merge "Add min theme version support in WizardManagerHelper.getThemeRes"
This commit is contained in:
commit
befc29a1fe
|
@ -23,6 +23,7 @@ import android.os.Build.VERSION;
|
||||||
import android.os.Build.VERSION_CODES;
|
import android.os.Build.VERSION_CODES;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
import androidx.annotation.StyleRes;
|
import androidx.annotation.StyleRes;
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
|
|
||||||
|
@ -279,7 +280,25 @@ public class WizardManagerHelper {
|
||||||
*/
|
*/
|
||||||
public static @StyleRes int getThemeRes(Intent intent, @StyleRes int defaultTheme) {
|
public static @StyleRes int getThemeRes(Intent intent, @StyleRes int defaultTheme) {
|
||||||
final String theme = intent.getStringExtra(EXTRA_THEME);
|
final String theme = intent.getStringExtra(EXTRA_THEME);
|
||||||
return getThemeRes(theme, defaultTheme);
|
return getThemeRes(theme, defaultTheme, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the theme style resource defined by this library for the theme specified in the given
|
||||||
|
* intent. For example, for THEME_GLIF_LIGHT, the theme @style/SuwThemeGlif.Light is returned.
|
||||||
|
*
|
||||||
|
* @param intent The intent passed by setup wizard, or one with the theme propagated along using
|
||||||
|
* {@link #copyWizardManagerExtras(Intent, Intent)}.
|
||||||
|
* @return The style corresponding to the theme in the given intent, or {@code defaultTheme} if
|
||||||
|
* the given theme is not recognized. Return the {@code defaultTheme} if the specified
|
||||||
|
* theme is older than the oldest supported one.
|
||||||
|
*
|
||||||
|
* @see #getThemeRes(String, int)
|
||||||
|
*/
|
||||||
|
public static @StyleRes int getThemeRes(Intent intent, @StyleRes int defaultTheme,
|
||||||
|
@Nullable String oldestSupportedTheme) {
|
||||||
|
final String theme = intent.getStringExtra(EXTRA_THEME);
|
||||||
|
return getThemeRes(theme, defaultTheme, oldestSupportedTheme);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -302,28 +321,91 @@ public class WizardManagerHelper {
|
||||||
* given theme is not recognized.
|
* given theme is not recognized.
|
||||||
*/
|
*/
|
||||||
public static @StyleRes int getThemeRes(String theme, @StyleRes int defaultTheme) {
|
public static @StyleRes int getThemeRes(String theme, @StyleRes int defaultTheme) {
|
||||||
|
return getThemeRes(theme, defaultTheme, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the theme style resource defined by this library for the given theme name. For example,
|
||||||
|
* for THEME_GLIF_LIGHT, the theme @style/SuwThemeGlif.Light is returned.
|
||||||
|
*
|
||||||
|
* <p>If you require extra theme attributes but want to ensure forward compatibility with new
|
||||||
|
* themes added here, consider overriding {@link android.app.Activity#onApplyThemeResource} in
|
||||||
|
* your activity and call {@link Theme#applyStyle(int, boolean)} using your theme overlay.
|
||||||
|
*
|
||||||
|
* <pre>{@code
|
||||||
|
* protected void onApplyThemeResource(Theme theme, int resid, boolean first) {
|
||||||
|
* super.onApplyThemeResource(theme, resid, first);
|
||||||
|
* theme.applyStyle(R.style.MyThemeOverlay, true);
|
||||||
|
* }
|
||||||
|
* }</pre>
|
||||||
|
*
|
||||||
|
* @param theme The string representation of the theme.
|
||||||
|
* @return The style corresponding to the given {@code theme}, or {@code defaultTheme} if the
|
||||||
|
* given theme is not recognized.
|
||||||
|
*/
|
||||||
|
public static @StyleRes int getThemeRes(String theme, @StyleRes int defaultTheme,
|
||||||
|
@Nullable String oldestSupportedTheme) {
|
||||||
|
int returnedTheme = defaultTheme;
|
||||||
if (theme != null) {
|
if (theme != null) {
|
||||||
switch (theme) {
|
switch (theme) {
|
||||||
case THEME_GLIF_V3_LIGHT:
|
case THEME_GLIF_V3_LIGHT:
|
||||||
return R.style.SuwThemeGlifV3_Light;
|
returnedTheme = R.style.SuwThemeGlifV3_Light;
|
||||||
|
break;
|
||||||
case THEME_GLIF_V3:
|
case THEME_GLIF_V3:
|
||||||
return R.style.SuwThemeGlifV3;
|
returnedTheme = R.style.SuwThemeGlifV3;
|
||||||
|
break;
|
||||||
case THEME_GLIF_V2_LIGHT:
|
case THEME_GLIF_V2_LIGHT:
|
||||||
return R.style.SuwThemeGlifV2_Light;
|
returnedTheme = R.style.SuwThemeGlifV2_Light;
|
||||||
|
break;
|
||||||
case THEME_GLIF_V2:
|
case THEME_GLIF_V2:
|
||||||
return R.style.SuwThemeGlifV2;
|
returnedTheme = R.style.SuwThemeGlifV2;
|
||||||
|
break;
|
||||||
case THEME_GLIF_LIGHT:
|
case THEME_GLIF_LIGHT:
|
||||||
return R.style.SuwThemeGlif_Light;
|
returnedTheme = R.style.SuwThemeGlif_Light;
|
||||||
|
break;
|
||||||
case THEME_GLIF:
|
case THEME_GLIF:
|
||||||
return R.style.SuwThemeGlif;
|
returnedTheme = R.style.SuwThemeGlif;
|
||||||
|
break;
|
||||||
case THEME_MATERIAL_LIGHT:
|
case THEME_MATERIAL_LIGHT:
|
||||||
return R.style.SuwThemeMaterial_Light;
|
returnedTheme = R.style.SuwThemeMaterial_Light;
|
||||||
|
break;
|
||||||
case THEME_MATERIAL:
|
case THEME_MATERIAL:
|
||||||
return R.style.SuwThemeMaterial;
|
returnedTheme = R.style.SuwThemeMaterial;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// fall through
|
||||||
|
}
|
||||||
|
|
||||||
|
// b/79540471 Return the default theme if the specified theme
|
||||||
|
// is older than the oldest supported one.
|
||||||
|
if (oldestSupportedTheme != null
|
||||||
|
&& (getThemeVersion(theme) < getThemeVersion(oldestSupportedTheme))) {
|
||||||
|
returnedTheme = defaultTheme;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnedTheme;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int getThemeVersion(String theme) {
|
||||||
|
if (theme != null) {
|
||||||
|
switch (theme) {
|
||||||
|
case THEME_GLIF_V3_LIGHT:
|
||||||
|
case THEME_GLIF_V3:
|
||||||
|
return 4;
|
||||||
|
case THEME_GLIF_V2_LIGHT:
|
||||||
|
case THEME_GLIF_V2:
|
||||||
|
return 3;
|
||||||
|
case THEME_GLIF_LIGHT:
|
||||||
|
case THEME_GLIF:
|
||||||
|
return 2;
|
||||||
|
case THEME_MATERIAL_LIGHT:
|
||||||
|
case THEME_MATERIAL:
|
||||||
|
return 1;
|
||||||
default:
|
default:
|
||||||
// fall through
|
// fall through
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return defaultTheme;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -161,6 +161,22 @@ public class WizardManagerHelperTest {
|
||||||
unexpectedStringThemes.isEmpty());
|
unexpectedStringThemes.isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getThemeRes_whenOldestSupportedThemeTakeEffect_shouldReturnDefault() {
|
||||||
|
Intent intent = new Intent();
|
||||||
|
intent.putExtra(WizardManagerHelper.EXTRA_THEME, "material");
|
||||||
|
assertEquals(0,
|
||||||
|
WizardManagerHelper.getThemeRes(intent, 0, WizardManagerHelper.THEME_GLIF_V2));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getThemeRes_whenOldestSupportedThemeNotTakeEffect_shouldReturnCurrent() {
|
||||||
|
Intent intent = new Intent();
|
||||||
|
intent.putExtra(WizardManagerHelper.EXTRA_THEME, "glif_v3");
|
||||||
|
assertEquals(R.style.SuwThemeGlifV3,
|
||||||
|
WizardManagerHelper.getThemeRes(intent, 0, WizardManagerHelper.THEME_GLIF_V2));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testIsLightThemeDefault() {
|
public void testIsLightThemeDefault() {
|
||||||
final Intent intent = new Intent();
|
final Intent intent = new Intent();
|
||||||
|
|
Loading…
Reference in a new issue