aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/org/kelar/inputmethod/compat/ViewOutlineProviderCompatUtilsLXX.java
blob: 8049d7d049b05b8a502353b3ce146c412619ad6b (about) (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/*
 * Copyright (C) 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.kelar.inputmethod.compat;

import android.annotation.TargetApi;
import android.graphics.Outline;
import android.inputmethodservice.InputMethodService;
import android.os.Build;
import android.view.View;
import android.view.ViewOutlineProvider;

import org.kelar.inputmethod.compat.ViewOutlineProviderCompatUtils.InsetsUpdater;

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
class ViewOutlineProviderCompatUtilsLXX {
    private ViewOutlineProviderCompatUtilsLXX() {
        // This utility class is not publicly instantiable.
    }

    static InsetsUpdater setInsetsOutlineProvider(final View view) {
        final InsetsOutlineProvider provider = new InsetsOutlineProvider(view);
        view.setOutlineProvider(provider);
        return provider;
    }

    private static class InsetsOutlineProvider extends ViewOutlineProvider
            implements InsetsUpdater {
        private final View mView;
        private static final int NO_DATA = -1;
        private int mLastVisibleTopInsets = NO_DATA;

        public InsetsOutlineProvider(final View view) {
            mView = view;
            view.setOutlineProvider(this);
        }

        @Override
        public void setInsets(final InputMethodService.Insets insets) {
            final int visibleTopInsets = insets.visibleTopInsets;
            if (mLastVisibleTopInsets != visibleTopInsets) {
                mLastVisibleTopInsets = visibleTopInsets;
                mView.invalidateOutline();
            }
        }

        @Override
        public void getOutline(final View view, final Outline outline) {
            if (mLastVisibleTopInsets == NO_DATA) {
                // Call default implementation.
                ViewOutlineProvider.BACKGROUND.getOutline(view, outline);
                return;
            }
            // TODO: Revisit this when floating/resize keyboard is supported.
            outline.setRect(
                    view.getLeft(), mLastVisibleTopInsets, view.getRight(), view.getBottom());
        }
    }
}