blob: 58944c6ad571e20894ceb672f67a5c484bec65aa [file] [log] [blame]
/*
* Copyright (C) 2017 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 com.android.systemui.statusbar.policy;
import android.graphics.Color;
import android.graphics.Rect;
import android.view.View;
import android.widget.ImageView;
import com.android.systemui.statusbar.phone.LightBarTransitionsController;
public interface DarkIconDispatcher {
void setIconsDarkArea(Rect r);
LightBarTransitionsController getTransitionsController();
void addDarkReceiver(DarkReceiver receiver);
void addDarkReceiver(ImageView imageView);
// Must have been previously been added through one of the addDarkReceive methods above.
void removeDarkReceiver(DarkReceiver object);
void removeDarkReceiver(ImageView object);
// Used to reapply darkness on an object, must have previously been added through
// addDarkReceiver.
void applyDark(ImageView object);
int DEFAULT_ICON_TINT = Color.WHITE;
Rect sTmpRect = new Rect();
int[] sTmpInt2 = new int[2];
/**
* @return the tint to apply to {@param view} depending on the desired tint {@param color} and
* the screen {@param tintArea} in which to apply that tint
*/
static int getTint(Rect tintArea, View view, int color) {
if (isInArea(tintArea, view)) {
return color;
} else {
return DEFAULT_ICON_TINT;
}
}
/**
* @return the dark intensity to apply to {@param view} depending on the desired dark
* {@param intensity} and the screen {@param tintArea} in which to apply that intensity
*/
static float getDarkIntensity(Rect tintArea, View view, float intensity) {
if (isInArea(tintArea, view)) {
return intensity;
} else {
return 0f;
}
}
/**
* @return true if more than half of the {@param view} area are in {@param area}, false
* otherwise
*/
static boolean isInArea(Rect area, View view) {
if (area.isEmpty()) {
return true;
}
sTmpRect.set(area);
view.getLocationOnScreen(sTmpInt2);
int left = sTmpInt2[0];
int intersectStart = Math.max(left, area.left);
int intersectEnd = Math.min(left + view.getWidth(), area.right);
int intersectAmount = Math.max(0, intersectEnd - intersectStart);
boolean coversFullStatusBar = area.top <= 0;
boolean majorityOfWidth = 2 * intersectAmount > view.getWidth();
return majorityOfWidth && coversFullStatusBar;
}
interface DarkReceiver {
void onDarkChanged(Rect area, float darkIntensity, int tint);
}
}