145 lines
5.0 KiB
Java
145 lines
5.0 KiB
Java
|
/*
|
||
|
* Copyright (C) 2016 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.incallui.incall.impl;
|
||
|
|
||
|
import android.os.Bundle;
|
||
|
import android.support.annotation.ColorInt;
|
||
|
import android.support.annotation.Nullable;
|
||
|
import android.support.v4.app.Fragment;
|
||
|
import android.util.ArraySet;
|
||
|
import android.view.LayoutInflater;
|
||
|
import android.view.View;
|
||
|
import android.view.ViewGroup;
|
||
|
import com.android.dialer.common.Assert;
|
||
|
import com.android.dialer.common.FragmentUtils;
|
||
|
import com.android.incallui.incall.protocol.InCallButtonIds;
|
||
|
import java.util.List;
|
||
|
import java.util.Set;
|
||
|
|
||
|
/** Fragment for the in call buttons (mute, speaker, ect.). */
|
||
|
public class InCallButtonGridFragment extends Fragment {
|
||
|
|
||
|
private static final int BUTTON_COUNT = 6;
|
||
|
private static final int BUTTONS_PER_ROW = 3;
|
||
|
|
||
|
private CheckableLabeledButton[] buttons = new CheckableLabeledButton[BUTTON_COUNT];
|
||
|
private OnButtonGridCreatedListener buttonGridListener;
|
||
|
|
||
|
public static Fragment newInstance() {
|
||
|
return new InCallButtonGridFragment();
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void onCreate(@Nullable Bundle bundle) {
|
||
|
super.onCreate(bundle);
|
||
|
buttonGridListener = FragmentUtils.getParent(this, OnButtonGridCreatedListener.class);
|
||
|
Assert.isNotNull(buttonGridListener);
|
||
|
}
|
||
|
|
||
|
@Nullable
|
||
|
@Override
|
||
|
public View onCreateView(
|
||
|
LayoutInflater inflater, @Nullable ViewGroup parent, @Nullable Bundle bundle) {
|
||
|
View view = inflater.inflate(R.layout.incall_button_grid, parent, false);
|
||
|
|
||
|
buttons[0] = ((CheckableLabeledButton) view.findViewById(R.id.incall_first_button));
|
||
|
buttons[1] = ((CheckableLabeledButton) view.findViewById(R.id.incall_second_button));
|
||
|
buttons[2] = ((CheckableLabeledButton) view.findViewById(R.id.incall_third_button));
|
||
|
buttons[3] = ((CheckableLabeledButton) view.findViewById(R.id.incall_fourth_button));
|
||
|
buttons[4] = ((CheckableLabeledButton) view.findViewById(R.id.incall_fifth_button));
|
||
|
buttons[5] = ((CheckableLabeledButton) view.findViewById(R.id.incall_sixth_button));
|
||
|
|
||
|
return view;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void onViewCreated(View view, @Nullable Bundle bundle) {
|
||
|
super.onViewCreated(view, bundle);
|
||
|
buttonGridListener.onButtonGridCreated(this);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void onDestroyView() {
|
||
|
super.onDestroyView();
|
||
|
buttonGridListener.onButtonGridDestroyed();
|
||
|
}
|
||
|
|
||
|
public void onInCallScreenDialpadVisibilityChange(boolean isShowing) {
|
||
|
for (CheckableLabeledButton button : buttons) {
|
||
|
button.setImportantForAccessibility(
|
||
|
isShowing
|
||
|
? View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
|
||
|
: View.IMPORTANT_FOR_ACCESSIBILITY_AUTO);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public int updateButtonStates(
|
||
|
List<ButtonController> buttonControllers,
|
||
|
@Nullable ButtonChooser buttonChooser,
|
||
|
int voiceNetworkType,
|
||
|
int phoneType) {
|
||
|
Set<Integer> allowedButtons = new ArraySet<>();
|
||
|
Set<Integer> disabledButtons = new ArraySet<>();
|
||
|
for (ButtonController controller : buttonControllers) {
|
||
|
if (controller.isAllowed()) {
|
||
|
allowedButtons.add(controller.getInCallButtonId());
|
||
|
if (!controller.isEnabled()) {
|
||
|
disabledButtons.add(controller.getInCallButtonId());
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
for (ButtonController controller : buttonControllers) {
|
||
|
controller.setButton(null);
|
||
|
}
|
||
|
|
||
|
if (buttonChooser == null) {
|
||
|
buttonChooser =
|
||
|
ButtonChooserFactory.newButtonChooser(voiceNetworkType, false /* isWiFi */, phoneType);
|
||
|
}
|
||
|
|
||
|
int numVisibleButtons = getResources().getInteger(R.integer.incall_num_rows) * BUTTONS_PER_ROW;
|
||
|
List<Integer> buttonsToPlace =
|
||
|
buttonChooser.getButtonPlacement(numVisibleButtons, allowedButtons, disabledButtons);
|
||
|
|
||
|
for (int i = 0; i < BUTTON_COUNT; ++i) {
|
||
|
if (i >= buttonsToPlace.size()) {
|
||
|
buttons[i].setVisibility(View.INVISIBLE);
|
||
|
continue;
|
||
|
}
|
||
|
@InCallButtonIds int button = buttonsToPlace.get(i);
|
||
|
buttonGridListener.getButtonController(button).setButton(buttons[i]);
|
||
|
}
|
||
|
|
||
|
return numVisibleButtons;
|
||
|
}
|
||
|
|
||
|
public void updateButtonColor(@ColorInt int color) {
|
||
|
for (CheckableLabeledButton button : buttons) {
|
||
|
button.setCheckedColor(color);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/** Interface to let the listener know the status of the button grid. */
|
||
|
public interface OnButtonGridCreatedListener {
|
||
|
void onButtonGridCreated(InCallButtonGridFragment inCallButtonGridFragment);
|
||
|
void onButtonGridDestroyed();
|
||
|
|
||
|
ButtonController getButtonController(@InCallButtonIds int id);
|
||
|
}
|
||
|
}
|