Skip to content

Commit

Permalink
3.009
Browse files Browse the repository at this point in the history
  • Loading branch information
WangDaYeeeeee committed Apr 10, 2021
1 parent ace5316 commit 6915c11
Show file tree
Hide file tree
Showing 35 changed files with 162,921 additions and 162,639 deletions.
4 changes: 2 additions & 2 deletions app/build.gradle
Expand Up @@ -10,8 +10,8 @@ android {
applicationId "wangdaye.com.geometricweather"
minSdkVersion 19
targetSdkVersion 30
versionCode 30008
versionName "3.008"
versionCode 30009
versionName "3.009"
multiDexEnabled true
ndk {
abiFilters 'armeabi', 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
Expand Down
Expand Up @@ -14,7 +14,7 @@
import wangdaye.com.geometricweather.GeometricWeather;
import wangdaye.com.geometricweather.R;
import wangdaye.com.geometricweather.common.snackbar.SnackbarContainer;
import wangdaye.com.geometricweather.common.ui.widgets.insets.FitHorizontalSystemBarRootLayout;
import wangdaye.com.geometricweather.common.basic.insets.FitHorizontalSystemBarRootLayout;
import wangdaye.com.geometricweather.common.utils.DisplayUtils;
import wangdaye.com.geometricweather.common.utils.LanguageUtils;
import wangdaye.com.geometricweather.settings.SettingsOptionManager;
Expand Down Expand Up @@ -55,14 +55,15 @@ private void possiblyResizeChildOfContent() {
if (usableHeightNow != mUsableHeightPrevious) {

int screenHeight = mRoot.getRootView().getHeight();
boolean keyboardExpanded = false;
boolean keyboardExpanded;

if (screenHeight - usableHeightNow > screenHeight / 5) {
// keyboard probably just became visible.
keyboardExpanded = true;
mRootParams.height = usableHeightNow;
} else {
// keyboard probably just became hidden.
keyboardExpanded = false;
mRootParams.height = screenHeight;
}
mUsableHeightPrevious = usableHeightNow;
Expand Down
Expand Up @@ -11,12 +11,21 @@ public class FitBothSideBarHelper {

private final View mTarget;

private static final ThreadLocal<Rect> sRootInsetsCache;
private Rect mWindowInsets;

private @FitBothSideBarView.FitSide int mFitSide;
private boolean mFitTopSideEnabled;
private boolean mFitBottomSideEnabled;

static {
sRootInsetsCache = new ThreadLocal<>();
}

public interface InsetsConsumer {
void consume();
}

public FitBothSideBarHelper(View target) {
this(target, FitBothSideBarView.SIDE_TOP | FitBothSideBarView.SIDE_BOTTOM);
}
Expand All @@ -28,50 +37,68 @@ public FitBothSideBarHelper(View target, int fitSide) {
public FitBothSideBarHelper(View target, int fitSide,
boolean fitTopSideEnabled, boolean fitBottomSideEnabled) {
mTarget = target;

mWindowInsets = new Rect(0, 0, 0, 0);

mFitSide = fitSide;
mFitTopSideEnabled = fitTopSideEnabled;
mFitBottomSideEnabled = fitBottomSideEnabled;
}

public static void setRootInsetsCache(Rect rootInsets) {
sRootInsetsCache.set(rootInsets);
}

@RequiresApi(api = Build.VERSION_CODES.KITKAT_WATCH)
public WindowInsets onApplyWindowInsets(WindowInsets insets) {
return onApplyWindowInsets(insets, mTarget::requestLayout);
}

@RequiresApi(api = Build.VERSION_CODES.KITKAT_WATCH)
public WindowInsets onApplyWindowInsets(WindowInsets insets, InsetsConsumer consumer) {
mWindowInsets = new Rect(
insets.getSystemWindowInsetLeft(),
insets.getSystemWindowInsetTop(),
insets.getSystemWindowInsetRight(),
insets.getSystemWindowInsetBottom()
);
mTarget.requestLayout();
consumer.consume();
return insets;
}

public boolean fitSystemWindows(Rect r) {
return fitSystemWindows(r, mTarget::requestLayout);
}

public boolean fitSystemWindows(Rect r, InsetsConsumer consumer) {
mWindowInsets = r;
mTarget.requestLayout();
consumer.consume();
return false;
}

public Rect getWindowInsets() {
if (sRootInsetsCache.get() != null) {
return sRootInsetsCache.get();
}
return mWindowInsets;
}

public int left() {
return mWindowInsets.left;
return getWindowInsets().left;
}

public int top() {
return ((mFitSide & FitBothSideBarView.SIDE_TOP) != 0 && mFitTopSideEnabled)
? mWindowInsets.top : 0;
? getWindowInsets().top : 0;
}

public int right() {
return mWindowInsets.right;
return getWindowInsets().right;
}

public int bottom() {
return ((mFitSide & FitBothSideBarView.SIDE_BOTTOM) != 0 && mFitBottomSideEnabled)
? mWindowInsets.bottom : 0;
? getWindowInsets().bottom : 0;
}

public void addFitSide(@FitBothSideBarView.FitSide int side) {
Expand Down
@@ -1,4 +1,4 @@
package wangdaye.com.geometricweather.common.ui.widgets.insets;
package wangdaye.com.geometricweather.common.basic.insets;

import android.content.Context;
import android.graphics.Canvas;
Expand All @@ -12,6 +12,7 @@

import androidx.annotation.ColorInt;
import androidx.annotation.RequiresApi;
import androidx.core.view.ViewCompat;

import wangdaye.com.geometricweather.common.utils.DisplayUtils;

Expand Down Expand Up @@ -49,23 +50,22 @@ public FitHorizontalSystemBarRootLayout(Context context, AttributeSet attrs, int
@RequiresApi(api = Build.VERSION_CODES.KITKAT_WATCH)
@Override
public WindowInsets onApplyWindowInsets(WindowInsets insets) {
fitSystemBar(new Rect(
Rect r = new Rect(
insets.getSystemWindowInsetLeft(),
insets.getSystemWindowInsetTop(),
insets.getSystemWindowInsetRight(),
insets.getSystemWindowInsetBottom()
));
return insets.replaceSystemWindowInsets(0, insets.getSystemWindowInsetTop(), 0,
mFitKeyboardExpanded ? 0 : insets.getSystemWindowInsetBottom());
);
FitBothSideBarHelper.setRootInsetsCache(
new Rect(0, r.top, 0, mFitKeyboardExpanded ? 0 : r.bottom));
fitSystemBar(r);
return insets;
}

@Override
protected boolean fitSystemWindows(Rect insets) {
if (mFitKeyboardExpanded) {
insets.bottom = 0;
}
insets.left = 0;
insets.right = 0;
FitBothSideBarHelper.setRootInsetsCache(
new Rect(0, insets.top, 0, mFitKeyboardExpanded ? 0 : insets.bottom));
super.fitSystemWindows(insets);
fitSystemBar(insets);
return false;
Expand Down Expand Up @@ -104,6 +104,7 @@ public void setRootColor(@ColorInt int rootColor) {

public void setFitKeyboardExpanded(boolean fit) {
mFitKeyboardExpanded = fit;
ViewCompat.requestApplyInsets(this);
requestLayout();
}
}
Expand Up @@ -7,6 +7,7 @@
import android.content.res.ColorStateList;
import android.content.res.TypedArray;
import android.graphics.Rect;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.text.TextUtils;
Expand All @@ -16,6 +17,7 @@
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.view.WindowInsets;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.TextView;
Expand All @@ -24,6 +26,7 @@
import androidx.annotation.IntDef;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.annotation.StringRes;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.core.view.ViewCompat;
Expand Down Expand Up @@ -404,7 +407,6 @@ private boolean isBeingDragged() {

public static class SnackbarLayout extends ViewGroup {

private View mParent;
private final Rect mWindowInsets;

private TextView mMessageView;
Expand All @@ -431,7 +433,6 @@ public SnackbarLayout(Context context) {
public SnackbarLayout(Context context, AttributeSet attrs) {
super(context, attrs);

mParent = null;
mWindowInsets = new Rect();

TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SnackbarLayout);
Expand All @@ -444,24 +445,23 @@ public SnackbarLayout(Context context, AttributeSet attrs) {

ViewCompat.setAccessibilityLiveRegion(this,
ViewCompat.ACCESSIBILITY_LIVE_REGION_POLITE);
}

ViewCompat.setOnApplyWindowInsetsListener(this, (v, insets) -> {
fitSystemWindows(
new Rect(
insets.getSystemWindowInsetLeft(),
insets.getSystemWindowInsetTop(),
insets.getSystemWindowInsetRight(),
insets.getSystemWindowInsetBottom()
)
);
return insets;
});
@RequiresApi(api = Build.VERSION_CODES.KITKAT_WATCH)
@Override
public WindowInsets onApplyWindowInsets(WindowInsets insets) {
mWindowInsets.set(
insets.getSystemWindowInsetLeft(), insets.getSystemWindowInsetTop(),
insets.getSystemWindowInsetRight(), insets.getSystemWindowInsetBottom()
);
Utils.consumeInsets(this, mWindowInsets);
return insets;
}

@Override
protected boolean fitSystemWindows(Rect insets) {
mWindowInsets.set(insets.left, insets.top, insets.right, insets.bottom);
requestLayout();
mWindowInsets.set(insets);
Utils.consumeInsets(this, mWindowInsets);
return false;
}

Expand Down
Expand Up @@ -2,11 +2,14 @@

import android.animation.Animator;
import android.animation.AnimatorSet;
import android.graphics.Rect;
import android.view.View;
import android.view.animation.Interpolator;

import androidx.interpolator.view.animation.FastOutSlowInInterpolator;

import wangdaye.com.geometricweather.common.basic.insets.FitBothSideBarHelper;
import wangdaye.com.geometricweather.common.basic.insets.FitBothSideBarView;
import wangdaye.com.geometricweather.common.utils.DisplayUtils;

class Utils extends android.view.animation.AnimationUtils {
Expand All @@ -27,4 +30,13 @@ static Animator getEnterAnimator(View view, boolean cardStyle) {
set.playTogether(animators[0], animators[1], animators[2]);
return set;
}

static void consumeInsets(View view, Rect insets) {
FitBothSideBarHelper fitInsetsHelper = new FitBothSideBarHelper(
view, FitBothSideBarView.SIDE_BOTTOM);
fitInsetsHelper.fitSystemWindows(insets, () -> {
insets.set(fitInsetsHelper.getWindowInsets());
view.requestLayout();
});
}
}
Expand Up @@ -13,7 +13,13 @@

import com.google.android.material.appbar.AppBarLayout;

public class FitSystemBarAppBarLayout extends AppBarLayout {
import wangdaye.com.geometricweather.common.basic.insets.FitBothSideBarHelper;
import wangdaye.com.geometricweather.common.basic.insets.FitBothSideBarView;

public class FitSystemBarAppBarLayout extends AppBarLayout
implements FitBothSideBarView {

private final FitBothSideBarHelper mHelper;

public FitSystemBarAppBarLayout(@NonNull Context context) {
this(context, null);
Expand All @@ -26,27 +32,47 @@ public FitSystemBarAppBarLayout(@NonNull Context context, @Nullable AttributeSet
public FitSystemBarAppBarLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
ViewCompat.setOnApplyWindowInsetsListener(this, null);

mHelper = new FitBothSideBarHelper(this, SIDE_TOP);
}

@RequiresApi(api = Build.VERSION_CODES.KITKAT_WATCH)
@Override
public WindowInsets onApplyWindowInsets(WindowInsets insets) {
fitSystemBar(new Rect(
insets.getSystemWindowInsetLeft(),
insets.getSystemWindowInsetTop(),
insets.getSystemWindowInsetRight(),
insets.getSystemWindowInsetBottom()
));
return insets;
return mHelper.onApplyWindowInsets(insets, this::fitSystemBar);
}

@Override
protected boolean fitSystemWindows(Rect insets) {
fitSystemBar(insets);
return false;
return mHelper.fitSystemWindows(insets, this::fitSystemBar);
}

private void fitSystemBar() {
setPadding(0, mHelper.top(), 0, 0);
}

@Override
public void addFitSide(@FitSide int side) {
// do nothing.
}

@Override
public void removeFitSide(@FitSide int side) {
// do nothing.
}

@Override
public void setFitSystemBarEnabled(boolean top, boolean bottom) {
mHelper.setFitSystemBarEnabled(top, bottom);
}

private void fitSystemBar(Rect insets) {
setPadding(0, insets.top, 0, 0);
@Override
public int getTopWindowInset() {
return mHelper.top();
}

@Override
public int getBottomWindowInset() {
return 0;
}
}

0 comments on commit 6915c11

Please sign in to comment.