Merge "Clean up ConditionalCards"
This commit is contained in:
@@ -1,62 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2018 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.settings.homepage.contextualcards.conditional;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.graphics.drawable.Drawable;
|
|
||||||
|
|
||||||
import com.android.internal.logging.nano.MetricsProto;
|
|
||||||
import com.android.settings.R;
|
|
||||||
|
|
||||||
public class AirplaneModeConditionCard implements ConditionalCard {
|
|
||||||
|
|
||||||
private final Context mAppContext;
|
|
||||||
|
|
||||||
public AirplaneModeConditionCard(Context appContext) {
|
|
||||||
mAppContext = appContext;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public long getId() {
|
|
||||||
return AirplaneModeConditionController.ID;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getActionText() {
|
|
||||||
return mAppContext.getText(R.string.condition_turn_off);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMetricsConstant() {
|
|
||||||
return MetricsProto.MetricsEvent.SETTINGS_CONDITION_AIRPLANE_MODE;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Drawable getIcon() {
|
|
||||||
return mAppContext.getDrawable(R.drawable.ic_airplanemode_active);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getTitle() {
|
|
||||||
return mAppContext.getText(R.string.condition_airplane_title);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getSummary() {
|
|
||||||
return mAppContext.getText(R.string.condition_airplane_summary);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -23,6 +23,9 @@ import android.content.IntentFilter;
|
|||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
|
||||||
|
import com.android.internal.logging.nano.MetricsProto;
|
||||||
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.homepage.contextualcards.ContextualCard;
|
||||||
import com.android.settingslib.WirelessUtils;
|
import com.android.settingslib.WirelessUtils;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@@ -65,6 +68,20 @@ public class AirplaneModeConditionController implements ConditionalCardControlle
|
|||||||
ConnectivityManager.from(mAppContext).setAirplaneMode(false);
|
ConnectivityManager.from(mAppContext).setAirplaneMode(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ContextualCard buildContextualCard() {
|
||||||
|
return new ConditionalContextualCard.Builder()
|
||||||
|
.setConditionId(ID)
|
||||||
|
.setMetricsConstant(MetricsProto.MetricsEvent.SETTINGS_CONDITION_AIRPLANE_MODE)
|
||||||
|
.setActionText(mAppContext.getText(R.string.condition_turn_off))
|
||||||
|
.setName(mAppContext.getPackageName() + "/"
|
||||||
|
+ mAppContext.getText(R.string.condition_airplane_title))
|
||||||
|
.setTitleText(mAppContext.getText(R.string.condition_airplane_title).toString())
|
||||||
|
.setSummaryText(mAppContext.getText(R.string.condition_airplane_summary).toString())
|
||||||
|
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_airplanemode_active))
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startMonitoringStateChange() {
|
public void startMonitoringStateChange() {
|
||||||
mAppContext.registerReceiver(mReceiver, AIRPLANE_MODE_FILTER);
|
mAppContext.registerReceiver(mReceiver, AIRPLANE_MODE_FILTER);
|
||||||
|
@@ -1,62 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2018 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.settings.homepage.contextualcards.conditional;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.graphics.drawable.Drawable;
|
|
||||||
|
|
||||||
import com.android.internal.logging.nano.MetricsProto;
|
|
||||||
import com.android.settings.R;
|
|
||||||
|
|
||||||
public class BackgroundDataConditionCard implements ConditionalCard {
|
|
||||||
|
|
||||||
private final Context mAppContext;
|
|
||||||
|
|
||||||
public BackgroundDataConditionCard(Context appContext) {
|
|
||||||
mAppContext = appContext;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public long getId() {
|
|
||||||
return BackgroundDataConditionController.ID;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getActionText() {
|
|
||||||
return mAppContext.getText(R.string.condition_turn_off);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMetricsConstant() {
|
|
||||||
return MetricsProto.MetricsEvent.SETTINGS_CONDITION_BACKGROUND_DATA;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Drawable getIcon() {
|
|
||||||
return mAppContext.getDrawable(R.drawable.ic_data_saver);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getTitle() {
|
|
||||||
return mAppContext.getText(R.string.condition_bg_data_title);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getSummary() {
|
|
||||||
return mAppContext.getText(R.string.condition_bg_data_summary);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -20,7 +20,10 @@ import android.content.Context;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.net.NetworkPolicyManager;
|
import android.net.NetworkPolicyManager;
|
||||||
|
|
||||||
|
import com.android.internal.logging.nano.MetricsProto;
|
||||||
|
import com.android.settings.R;
|
||||||
import com.android.settings.Settings;
|
import com.android.settings.Settings;
|
||||||
|
import com.android.settings.homepage.contextualcards.ContextualCard;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
@@ -59,6 +62,20 @@ public class BackgroundDataConditionController implements ConditionalCardControl
|
|||||||
mConditionManager.onConditionChanged();
|
mConditionManager.onConditionChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ContextualCard buildContextualCard() {
|
||||||
|
return new ConditionalContextualCard.Builder()
|
||||||
|
.setConditionId(ID)
|
||||||
|
.setMetricsConstant(MetricsProto.MetricsEvent.SETTINGS_CONDITION_BACKGROUND_DATA)
|
||||||
|
.setActionText(mAppContext.getText(R.string.condition_turn_off))
|
||||||
|
.setName(mAppContext.getPackageName() + "/"
|
||||||
|
+ mAppContext.getText(R.string.condition_bg_data_title))
|
||||||
|
.setTitleText(mAppContext.getText(R.string.condition_bg_data_title).toString())
|
||||||
|
.setSummaryText(mAppContext.getText(R.string.condition_bg_data_summary).toString())
|
||||||
|
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_data_saver))
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startMonitoringStateChange() {
|
public void startMonitoringStateChange() {
|
||||||
|
|
||||||
|
@@ -1,62 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2018 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.settings.homepage.contextualcards.conditional;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.graphics.drawable.Drawable;
|
|
||||||
|
|
||||||
import com.android.internal.logging.nano.MetricsProto;
|
|
||||||
import com.android.settings.R;
|
|
||||||
|
|
||||||
public class BatterySaverConditionCard implements ConditionalCard {
|
|
||||||
|
|
||||||
private final Context mAppContext;
|
|
||||||
|
|
||||||
public BatterySaverConditionCard(Context appContext) {
|
|
||||||
mAppContext = appContext;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public long getId() {
|
|
||||||
return BatterySaverConditionController.ID;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getActionText() {
|
|
||||||
return mAppContext.getText(R.string.condition_turn_off);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMetricsConstant() {
|
|
||||||
return MetricsProto.MetricsEvent.SETTINGS_CONDITION_BATTERY_SAVER;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Drawable getIcon() {
|
|
||||||
return mAppContext.getDrawable(R.drawable.ic_battery_saver_accent_24dp);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getTitle() {
|
|
||||||
return mAppContext.getText(R.string.condition_battery_title);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getSummary() {
|
|
||||||
return mAppContext.getText(R.string.condition_battery_summary);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -24,6 +24,7 @@ import com.android.settings.R;
|
|||||||
import com.android.settings.core.SubSettingLauncher;
|
import com.android.settings.core.SubSettingLauncher;
|
||||||
import com.android.settings.fuelgauge.BatterySaverReceiver;
|
import com.android.settings.fuelgauge.BatterySaverReceiver;
|
||||||
import com.android.settings.fuelgauge.batterysaver.BatterySaverSettings;
|
import com.android.settings.fuelgauge.batterysaver.BatterySaverSettings;
|
||||||
|
import com.android.settings.homepage.contextualcards.ContextualCard;
|
||||||
import com.android.settingslib.fuelgauge.BatterySaverUtils;
|
import com.android.settingslib.fuelgauge.BatterySaverUtils;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@@ -70,6 +71,20 @@ public class BatterySaverConditionController implements ConditionalCardControlle
|
|||||||
/*needFirstTimeWarning*/ false);
|
/*needFirstTimeWarning*/ false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ContextualCard buildContextualCard() {
|
||||||
|
return new ConditionalContextualCard.Builder()
|
||||||
|
.setConditionId(ID)
|
||||||
|
.setMetricsConstant(MetricsProto.MetricsEvent.SETTINGS_CONDITION_BATTERY_SAVER)
|
||||||
|
.setActionText(mAppContext.getText(R.string.condition_turn_off))
|
||||||
|
.setName(mAppContext.getPackageName() + "/"
|
||||||
|
+ mAppContext.getText(R.string.condition_battery_title))
|
||||||
|
.setTitleText(mAppContext.getText(R.string.condition_battery_title).toString())
|
||||||
|
.setSummaryText(mAppContext.getText(R.string.condition_battery_summary).toString())
|
||||||
|
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_battery_saver_accent_24dp))
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startMonitoringStateChange() {
|
public void startMonitoringStateChange() {
|
||||||
mReceiver.setListening(true);
|
mReceiver.setListening(true);
|
||||||
|
@@ -1,62 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2018 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.settings.homepage.contextualcards.conditional;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.graphics.drawable.Drawable;
|
|
||||||
|
|
||||||
import com.android.internal.logging.nano.MetricsProto;
|
|
||||||
import com.android.settings.R;
|
|
||||||
|
|
||||||
public class CellularDataConditionCard implements ConditionalCard {
|
|
||||||
|
|
||||||
private final Context mAppContext;
|
|
||||||
|
|
||||||
public CellularDataConditionCard(Context appContext) {
|
|
||||||
mAppContext = appContext;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public long getId() {
|
|
||||||
return CellularDataConditionController.ID;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getActionText() {
|
|
||||||
return mAppContext.getText(R.string.condition_turn_on);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMetricsConstant() {
|
|
||||||
return MetricsProto.MetricsEvent.SETTINGS_CONDITION_CELLULAR_DATA;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Drawable getIcon() {
|
|
||||||
return mAppContext.getDrawable(R.drawable.ic_cellular_off);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getTitle() {
|
|
||||||
return mAppContext.getText(R.string.condition_cellular_title);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getSummary() {
|
|
||||||
return mAppContext.getText(R.string.condition_cellular_summary);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -23,8 +23,11 @@ import android.content.IntentFilter;
|
|||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
|
|
||||||
|
import com.android.internal.logging.nano.MetricsProto;
|
||||||
import com.android.internal.telephony.TelephonyIntents;
|
import com.android.internal.telephony.TelephonyIntents;
|
||||||
|
import com.android.settings.R;
|
||||||
import com.android.settings.Settings;
|
import com.android.settings.Settings;
|
||||||
|
import com.android.settings.homepage.contextualcards.ContextualCard;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
@@ -75,6 +78,20 @@ public class CellularDataConditionController implements ConditionalCardControlle
|
|||||||
mTelephonyManager.setDataEnabled(true);
|
mTelephonyManager.setDataEnabled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ContextualCard buildContextualCard() {
|
||||||
|
return new ConditionalContextualCard.Builder()
|
||||||
|
.setConditionId(ID)
|
||||||
|
.setMetricsConstant(MetricsProto.MetricsEvent.SETTINGS_CONDITION_CELLULAR_DATA)
|
||||||
|
.setActionText(mAppContext.getText(R.string.condition_turn_on))
|
||||||
|
.setName(mAppContext.getPackageName() + "/"
|
||||||
|
+ mAppContext.getText(R.string.condition_cellular_title))
|
||||||
|
.setTitleText(mAppContext.getText(R.string.condition_cellular_title).toString())
|
||||||
|
.setSummaryText(mAppContext.getText(R.string.condition_cellular_summary).toString())
|
||||||
|
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_cellular_off))
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startMonitoringStateChange() {
|
public void startMonitoringStateChange() {
|
||||||
mAppContext.registerReceiver(mReceiver, DATA_CONNECTION_FILTER);
|
mAppContext.registerReceiver(mReceiver, DATA_CONNECTION_FILTER);
|
||||||
|
@@ -26,7 +26,6 @@ import com.android.settingslib.core.lifecycle.LifecycleObserver;
|
|||||||
import com.android.settingslib.core.lifecycle.events.OnStart;
|
import com.android.settingslib.core.lifecycle.events.OnStart;
|
||||||
import com.android.settingslib.core.lifecycle.events.OnStop;
|
import com.android.settingslib.core.lifecycle.events.OnStop;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@@ -84,24 +83,7 @@ public class ConditionContextualCardController implements ContextualCardControll
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onConditionsChanged() {
|
public void onConditionsChanged() {
|
||||||
final List<ContextualCard> conditionCards = new ArrayList<>();
|
final List<ContextualCard> conditionCards = mConditionManager.getDisplayableCards();
|
||||||
final List<ConditionalCard> conditionList = mConditionManager.getDisplayableCards();
|
|
||||||
|
|
||||||
for (ConditionalCard condition : conditionList) {
|
|
||||||
final ContextualCard conditionCard =
|
|
||||||
new ConditionalContextualCard.Builder()
|
|
||||||
.setConditionId(condition.getId())
|
|
||||||
.setMetricsConstant(condition.getMetricsConstant())
|
|
||||||
.setActionText(condition.getActionText())
|
|
||||||
.setName(mContext.getPackageName() + "/"
|
|
||||||
+ condition.getTitle().toString())
|
|
||||||
.setTitleText(condition.getTitle().toString())
|
|
||||||
.setSummaryText(condition.getSummary().toString())
|
|
||||||
.setIconDrawable(condition.getIcon())
|
|
||||||
.build();
|
|
||||||
|
|
||||||
conditionCards.add(conditionCard);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mListener != null) {
|
if (mListener != null) {
|
||||||
final Map<Integer, List<ContextualCard>> conditionalCards = new ArrayMap<>();
|
final Map<Integer, List<ContextualCard>> conditionalCards = new ArrayMap<>();
|
||||||
|
@@ -22,6 +22,8 @@ import android.util.Log;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
|
|
||||||
|
import com.android.settings.homepage.contextualcards.ContextualCard;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.Callable;
|
||||||
@@ -35,8 +37,6 @@ import java.util.concurrent.TimeoutException;
|
|||||||
public class ConditionManager {
|
public class ConditionManager {
|
||||||
private static final String TAG = "ConditionManager";
|
private static final String TAG = "ConditionManager";
|
||||||
|
|
||||||
@VisibleForTesting
|
|
||||||
final List<ConditionalCard> mCandidates;
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
final List<ConditionalCardController> mCardControllers;
|
final List<ConditionalCardController> mCardControllers;
|
||||||
|
|
||||||
@@ -51,29 +51,27 @@ public class ConditionManager {
|
|||||||
public ConditionManager(Context context, ConditionListener listener) {
|
public ConditionManager(Context context, ConditionListener listener) {
|
||||||
mAppContext = context.getApplicationContext();
|
mAppContext = context.getApplicationContext();
|
||||||
mExecutorService = Executors.newCachedThreadPool();
|
mExecutorService = Executors.newCachedThreadPool();
|
||||||
mCandidates = new ArrayList<>();
|
|
||||||
mCardControllers = new ArrayList<>();
|
mCardControllers = new ArrayList<>();
|
||||||
mListener = listener;
|
mListener = listener;
|
||||||
initCandidates();
|
initCandidates();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a list of {@link ConditionalCard}s eligible for display.
|
* Returns a list of {@link ContextualCard}s eligible for display.
|
||||||
*/
|
*/
|
||||||
public List<ConditionalCard> getDisplayableCards() {
|
public List<ContextualCard> getDisplayableCards() {
|
||||||
final List<ConditionalCard> cards = new ArrayList<>();
|
final List<ContextualCard> cards = new ArrayList<>();
|
||||||
final List<Future<ConditionalCard>> displayableCards = new ArrayList<>();
|
final List<Future<ContextualCard>> displayableCards = new ArrayList<>();
|
||||||
// Check displayable future
|
// Check displayable future
|
||||||
for (ConditionalCard card : mCandidates) {
|
for (ConditionalCardController card : mCardControllers) {
|
||||||
final DisplayableChecker future = new DisplayableChecker(
|
final DisplayableChecker future = new DisplayableChecker(getController(card.getId()));
|
||||||
card, getController(card.getId()));
|
|
||||||
displayableCards.add(mExecutorService.submit(future));
|
displayableCards.add(mExecutorService.submit(future));
|
||||||
}
|
}
|
||||||
// Collect future and add displayable cards
|
// Collect future and add displayable cards
|
||||||
for (Future<ConditionalCard> cardFuture : displayableCards) {
|
for (Future<ContextualCard> cardFuture : displayableCards) {
|
||||||
try {
|
try {
|
||||||
final ConditionalCard card = cardFuture.get(DISPLAYABLE_CHECKER_TIMEOUT_MS,
|
final ContextualCard card = cardFuture.get(
|
||||||
TimeUnit.MILLISECONDS);
|
DISPLAYABLE_CHECKER_TIMEOUT_MS, TimeUnit.MILLISECONDS);
|
||||||
if (card != null) {
|
if (card != null) {
|
||||||
cards.add(card);
|
cards.add(card);
|
||||||
}
|
}
|
||||||
@@ -142,7 +140,7 @@ public class ConditionManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
<T extends ConditionalCardController> T getController(long id) {
|
private <T extends ConditionalCardController> T getController(long id) {
|
||||||
for (ConditionalCardController controller : mCardControllers) {
|
for (ConditionalCardController controller : mCardControllers) {
|
||||||
if (controller.getId() == id) {
|
if (controller.getId() == id) {
|
||||||
return (T) controller;
|
return (T) controller;
|
||||||
@@ -164,36 +162,22 @@ public class ConditionManager {
|
|||||||
mCardControllers.add(new RingerVibrateConditionController(mAppContext, this /* manager */));
|
mCardControllers.add(new RingerVibrateConditionController(mAppContext, this /* manager */));
|
||||||
mCardControllers.add(new RingerMutedConditionController(mAppContext, this /* manager */));
|
mCardControllers.add(new RingerMutedConditionController(mAppContext, this /* manager */));
|
||||||
mCardControllers.add(new WorkModeConditionController(mAppContext, this /* manager */));
|
mCardControllers.add(new WorkModeConditionController(mAppContext, this /* manager */));
|
||||||
|
|
||||||
// Initialize ui model later. UI model depends on controller.
|
|
||||||
mCandidates.add(new AirplaneModeConditionCard(mAppContext));
|
|
||||||
mCandidates.add(new BackgroundDataConditionCard(mAppContext));
|
|
||||||
mCandidates.add(new BatterySaverConditionCard(mAppContext));
|
|
||||||
mCandidates.add(new CellularDataConditionCard(mAppContext));
|
|
||||||
mCandidates.add(new DndConditionCard(mAppContext, this /* manager */));
|
|
||||||
mCandidates.add(new HotspotConditionCard(mAppContext, this /* manager */));
|
|
||||||
mCandidates.add(new NightDisplayConditionCard(mAppContext));
|
|
||||||
mCandidates.add(new RingerMutedConditionCard(mAppContext));
|
|
||||||
mCandidates.add(new RingerVibrateConditionCard(mAppContext));
|
|
||||||
mCandidates.add(new WorkModeConditionCard(mAppContext));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns card if controller says it's displayable. Otherwise returns null.
|
* Returns card if controller says it's displayable. Otherwise returns null.
|
||||||
*/
|
*/
|
||||||
public static class DisplayableChecker implements Callable<ConditionalCard> {
|
public static class DisplayableChecker implements Callable<ContextualCard> {
|
||||||
|
|
||||||
private final ConditionalCard mCard;
|
|
||||||
private final ConditionalCardController mController;
|
private final ConditionalCardController mController;
|
||||||
|
|
||||||
private DisplayableChecker(ConditionalCard card, ConditionalCardController controller) {
|
private DisplayableChecker(ConditionalCardController controller) {
|
||||||
mCard = card;
|
|
||||||
mController = controller;
|
mController = controller;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ConditionalCard call() throws Exception {
|
public ContextualCard call() throws Exception {
|
||||||
return mController.isDisplayable() ? mCard : null;
|
return mController.isDisplayable() ? mController.buildContextualCard() : null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,48 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2018 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.settings.homepage.contextualcards.conditional;
|
|
||||||
|
|
||||||
import android.graphics.drawable.Drawable;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* UI Model for a conditional card displayed on homepage.
|
|
||||||
*/
|
|
||||||
public interface ConditionalCard {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A stable ID for this card.
|
|
||||||
*
|
|
||||||
* @see {@link ConditionalCardController#getId()}
|
|
||||||
*/
|
|
||||||
long getId();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The text display on the card for click action.
|
|
||||||
*/
|
|
||||||
CharSequence getActionText();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Metrics constant used for logging user interaction.
|
|
||||||
*/
|
|
||||||
int getMetricsConstant();
|
|
||||||
|
|
||||||
Drawable getIcon();
|
|
||||||
|
|
||||||
CharSequence getTitle();
|
|
||||||
|
|
||||||
CharSequence getSummary();
|
|
||||||
}
|
|
@@ -18,15 +18,15 @@ package com.android.settings.homepage.contextualcards.conditional;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
||||||
|
import com.android.settings.homepage.contextualcards.ContextualCard;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Data controller for a {@link ConditionalCard}.
|
* Data controller for a {@link ConditionalContextualCard}.
|
||||||
*/
|
*/
|
||||||
public interface ConditionalCardController {
|
public interface ConditionalCardController {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A stable ID for this card.
|
* A stable ID for this card.
|
||||||
*
|
|
||||||
* @see {@link ConditionalCard#getId()}
|
|
||||||
*/
|
*/
|
||||||
long getId();
|
long getId();
|
||||||
|
|
||||||
@@ -45,6 +45,11 @@ public interface ConditionalCardController {
|
|||||||
*/
|
*/
|
||||||
void onActionClick();
|
void onActionClick();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a UI model suitable for display, controlled by this controller.
|
||||||
|
*/
|
||||||
|
ContextualCard buildContextualCard();
|
||||||
|
|
||||||
void startMonitoringStateChange();
|
void startMonitoringStateChange();
|
||||||
|
|
||||||
void stopMonitoringStateChange();
|
void stopMonitoringStateChange();
|
||||||
|
@@ -22,7 +22,7 @@ import com.android.settings.homepage.contextualcards.ContextualCard;
|
|||||||
* Data class representing a conditional {@link ContextualCard}.
|
* Data class representing a conditional {@link ContextualCard}.
|
||||||
*
|
*
|
||||||
* Use this class to store additional attributes on top of {@link ContextualCard} for
|
* Use this class to store additional attributes on top of {@link ContextualCard} for
|
||||||
* {@link ConditionalCard}.
|
* {@link ConditionalCardController}.
|
||||||
*/
|
*/
|
||||||
public class ConditionalContextualCard extends ContextualCard {
|
public class ConditionalContextualCard extends ContextualCard {
|
||||||
|
|
||||||
|
@@ -1,64 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2018 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.settings.homepage.contextualcards.conditional;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.graphics.drawable.Drawable;
|
|
||||||
|
|
||||||
import com.android.internal.logging.nano.MetricsProto;
|
|
||||||
import com.android.settings.R;
|
|
||||||
|
|
||||||
public class DndConditionCard implements ConditionalCard {
|
|
||||||
|
|
||||||
private final Context mAppContext;
|
|
||||||
private final DndConditionCardController mController;
|
|
||||||
|
|
||||||
public DndConditionCard(Context appContext, ConditionManager manager) {
|
|
||||||
mAppContext = appContext;
|
|
||||||
mController = manager.getController(getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public long getId() {
|
|
||||||
return DndConditionCardController.ID;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Drawable getIcon() {
|
|
||||||
return mAppContext.getDrawable(R.drawable.ic_do_not_disturb_on_24dp);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getTitle() {
|
|
||||||
return mAppContext.getText(R.string.condition_zen_title);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getSummary() {
|
|
||||||
return mController.getSummary();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getActionText() {
|
|
||||||
return mAppContext.getText(R.string.condition_turn_off);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMetricsConstant() {
|
|
||||||
return MetricsProto.MetricsEvent.SETTINGS_CONDITION_DND;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -29,6 +29,7 @@ import androidx.annotation.VisibleForTesting;
|
|||||||
import com.android.internal.logging.nano.MetricsProto;
|
import com.android.internal.logging.nano.MetricsProto;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.core.SubSettingLauncher;
|
import com.android.settings.core.SubSettingLauncher;
|
||||||
|
import com.android.settings.homepage.contextualcards.ContextualCard;
|
||||||
import com.android.settings.notification.ZenModeSettings;
|
import com.android.settings.notification.ZenModeSettings;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@@ -88,6 +89,20 @@ public class DndConditionCardController implements ConditionalCardController {
|
|||||||
mNotificationManager.setZenMode(Settings.Global.ZEN_MODE_OFF, null, TAG);
|
mNotificationManager.setZenMode(Settings.Global.ZEN_MODE_OFF, null, TAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ContextualCard buildContextualCard() {
|
||||||
|
return new ConditionalContextualCard.Builder()
|
||||||
|
.setConditionId(ID)
|
||||||
|
.setMetricsConstant(MetricsProto.MetricsEvent.SETTINGS_CONDITION_DND)
|
||||||
|
.setActionText(mAppContext.getText(R.string.condition_turn_off))
|
||||||
|
.setName(mAppContext.getPackageName() + "/"
|
||||||
|
+ mAppContext.getText(R.string.condition_zen_title))
|
||||||
|
.setTitleText(mAppContext.getText(R.string.condition_zen_title).toString())
|
||||||
|
.setSummaryText(getSummary().toString())
|
||||||
|
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_do_not_disturb_on_24dp))
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
public CharSequence getSummary() {
|
public CharSequence getSummary() {
|
||||||
final int zen = mNotificationManager.getZenMode();
|
final int zen = mNotificationManager.getZenMode();
|
||||||
final ZenModeConfig config;
|
final ZenModeConfig config;
|
||||||
|
@@ -1,72 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2018 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.settings.homepage.contextualcards.conditional;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.graphics.drawable.Drawable;
|
|
||||||
import android.os.UserHandle;
|
|
||||||
import android.os.UserManager;
|
|
||||||
|
|
||||||
import com.android.internal.logging.nano.MetricsProto;
|
|
||||||
import com.android.settings.R;
|
|
||||||
import com.android.settingslib.RestrictedLockUtilsInternal;
|
|
||||||
|
|
||||||
public class HotspotConditionCard implements ConditionalCard {
|
|
||||||
|
|
||||||
private final Context mAppContext;
|
|
||||||
private final ConditionManager mConditionManager;
|
|
||||||
|
|
||||||
public HotspotConditionCard(Context appContext, ConditionManager manager) {
|
|
||||||
mAppContext = appContext;
|
|
||||||
mConditionManager = manager;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public long getId() {
|
|
||||||
return HotspotConditionController.ID;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getActionText() {
|
|
||||||
if (RestrictedLockUtilsInternal.hasBaseUserRestriction(mAppContext,
|
|
||||||
UserManager.DISALLOW_CONFIG_TETHERING, UserHandle.myUserId())) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return mAppContext.getText(R.string.condition_turn_off);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMetricsConstant() {
|
|
||||||
return MetricsProto.MetricsEvent.SETTINGS_CONDITION_HOTSPOT;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Drawable getIcon() {
|
|
||||||
return mAppContext.getDrawable(R.drawable.ic_hotspot);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getTitle() {
|
|
||||||
return mAppContext.getText(R.string.condition_hotspot_title);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getSummary() {
|
|
||||||
final HotspotConditionController controller = mConditionManager.getController(getId());
|
|
||||||
return controller.getSummary();
|
|
||||||
}
|
|
||||||
}
|
|
@@ -30,6 +30,7 @@ import com.android.internal.logging.nano.MetricsProto;
|
|||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.TetherSettings;
|
import com.android.settings.TetherSettings;
|
||||||
import com.android.settings.core.SubSettingLauncher;
|
import com.android.settings.core.SubSettingLauncher;
|
||||||
|
import com.android.settings.homepage.contextualcards.ContextualCard;
|
||||||
import com.android.settingslib.RestrictedLockUtils;
|
import com.android.settingslib.RestrictedLockUtils;
|
||||||
import com.android.settingslib.RestrictedLockUtilsInternal;
|
import com.android.settingslib.RestrictedLockUtilsInternal;
|
||||||
|
|
||||||
@@ -87,6 +88,20 @@ public class HotspotConditionController implements ConditionalCardController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ContextualCard buildContextualCard() {
|
||||||
|
return new ConditionalContextualCard.Builder()
|
||||||
|
.setConditionId(ID)
|
||||||
|
.setMetricsConstant(MetricsProto.MetricsEvent.SETTINGS_CONDITION_HOTSPOT)
|
||||||
|
.setActionText(mAppContext.getText(R.string.condition_turn_off))
|
||||||
|
.setName(mAppContext.getPackageName() + "/"
|
||||||
|
+ mAppContext.getText(R.string.condition_hotspot_title))
|
||||||
|
.setTitleText(mAppContext.getText(R.string.condition_hotspot_title).toString())
|
||||||
|
.setSummaryText(getSummary().toString())
|
||||||
|
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_hotspot))
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startMonitoringStateChange() {
|
public void startMonitoringStateChange() {
|
||||||
mAppContext.registerReceiver(mReceiver, WIFI_AP_STATE_FILTER);
|
mAppContext.registerReceiver(mReceiver, WIFI_AP_STATE_FILTER);
|
||||||
|
@@ -1,62 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2018 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.settings.homepage.contextualcards.conditional;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.graphics.drawable.Drawable;
|
|
||||||
|
|
||||||
import com.android.internal.logging.nano.MetricsProto;
|
|
||||||
import com.android.settings.R;
|
|
||||||
|
|
||||||
public class NightDisplayConditionCard implements ConditionalCard {
|
|
||||||
|
|
||||||
private final Context mAppContext;
|
|
||||||
|
|
||||||
public NightDisplayConditionCard(Context appContext) {
|
|
||||||
mAppContext = appContext;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public long getId() {
|
|
||||||
return NightDisplayConditionController.ID;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getActionText() {
|
|
||||||
return mAppContext.getText(R.string.condition_turn_off);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMetricsConstant() {
|
|
||||||
return MetricsProto.MetricsEvent.SETTINGS_CONDITION_NIGHT_DISPLAY;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Drawable getIcon() {
|
|
||||||
return mAppContext.getDrawable(R.drawable.ic_settings_night_display);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getTitle() {
|
|
||||||
return mAppContext.getText(R.string.condition_night_display_title);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getSummary() {
|
|
||||||
return mAppContext.getText(R.string.condition_night_display_summary);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -23,6 +23,7 @@ import com.android.internal.logging.nano.MetricsProto;
|
|||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.core.SubSettingLauncher;
|
import com.android.settings.core.SubSettingLauncher;
|
||||||
import com.android.settings.display.NightDisplaySettings;
|
import com.android.settings.display.NightDisplaySettings;
|
||||||
|
import com.android.settings.homepage.contextualcards.ContextualCard;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
@@ -30,11 +31,13 @@ public class NightDisplayConditionController implements ConditionalCardControlle
|
|||||||
ColorDisplayController.Callback {
|
ColorDisplayController.Callback {
|
||||||
static final int ID = Objects.hash("NightDisplayConditionController");
|
static final int ID = Objects.hash("NightDisplayConditionController");
|
||||||
|
|
||||||
|
private final Context mAppContext;
|
||||||
private final ConditionManager mConditionManager;
|
private final ConditionManager mConditionManager;
|
||||||
private final ColorDisplayController mController;
|
private final ColorDisplayController mController;
|
||||||
|
|
||||||
public NightDisplayConditionController(Context appContext, ConditionManager manager) {
|
public NightDisplayConditionController(Context appContext, ConditionManager manager) {
|
||||||
mController = new ColorDisplayController(appContext);
|
mController = new ColorDisplayController(appContext);
|
||||||
|
mAppContext = appContext;
|
||||||
mConditionManager = manager;
|
mConditionManager = manager;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,6 +65,22 @@ public class NightDisplayConditionController implements ConditionalCardControlle
|
|||||||
mController.setActivated(false);
|
mController.setActivated(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ContextualCard buildContextualCard() {
|
||||||
|
return new ConditionalContextualCard.Builder()
|
||||||
|
.setConditionId(ID)
|
||||||
|
.setMetricsConstant(MetricsProto.MetricsEvent.SETTINGS_CONDITION_NIGHT_DISPLAY)
|
||||||
|
.setActionText(mAppContext.getText(R.string.condition_turn_off))
|
||||||
|
.setName(mAppContext.getPackageName() + "/"
|
||||||
|
+ mAppContext.getText(R.string.condition_night_display_title))
|
||||||
|
.setTitleText(mAppContext.getText(
|
||||||
|
R.string.condition_night_display_title).toString())
|
||||||
|
.setSummaryText(
|
||||||
|
mAppContext.getText(R.string.condition_night_display_summary).toString())
|
||||||
|
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_settings_night_display))
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startMonitoringStateChange() {
|
public void startMonitoringStateChange() {
|
||||||
mController.setListener(this);
|
mController.setListener(this);
|
||||||
|
@@ -1,62 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2018 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.settings.homepage.contextualcards.conditional;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.graphics.drawable.Drawable;
|
|
||||||
|
|
||||||
import com.android.internal.logging.nano.MetricsProto;
|
|
||||||
import com.android.settings.R;
|
|
||||||
|
|
||||||
public class RingerMutedConditionCard implements ConditionalCard {
|
|
||||||
|
|
||||||
private final Context mAppContext;
|
|
||||||
|
|
||||||
public RingerMutedConditionCard(Context appContext) {
|
|
||||||
mAppContext = appContext;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public long getId() {
|
|
||||||
return RingerMutedConditionController.ID;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getActionText() {
|
|
||||||
return mAppContext.getText(R.string.condition_device_muted_action_turn_on_sound);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMetricsConstant() {
|
|
||||||
return MetricsProto.MetricsEvent.SETTINGS_CONDITION_DEVICE_MUTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Drawable getIcon() {
|
|
||||||
return mAppContext.getDrawable(R.drawable.ic_notifications_off_24dp);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getTitle() {
|
|
||||||
return mAppContext.getText(R.string.condition_device_muted_title);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getSummary() {
|
|
||||||
return mAppContext.getText(R.string.condition_device_muted_summary);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -23,15 +23,21 @@ import android.content.Context;
|
|||||||
import android.media.AudioManager;
|
import android.media.AudioManager;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
|
||||||
|
import com.android.internal.logging.nano.MetricsProto;
|
||||||
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.homepage.contextualcards.ContextualCard;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
public class RingerMutedConditionController extends AbnormalRingerConditionController {
|
public class RingerMutedConditionController extends AbnormalRingerConditionController {
|
||||||
static final int ID = Objects.hash("RingerMutedConditionController");
|
static final int ID = Objects.hash("RingerMutedConditionController");
|
||||||
|
|
||||||
private final NotificationManager mNotificationManager;
|
private final NotificationManager mNotificationManager;
|
||||||
|
private final Context mAppContext;
|
||||||
|
|
||||||
public RingerMutedConditionController(Context appContext, ConditionManager conditionManager) {
|
public RingerMutedConditionController(Context appContext, ConditionManager conditionManager) {
|
||||||
super(appContext, conditionManager);
|
super(appContext, conditionManager);
|
||||||
|
mAppContext = appContext;
|
||||||
mNotificationManager =
|
mNotificationManager =
|
||||||
(NotificationManager) appContext.getSystemService(NOTIFICATION_SERVICE);
|
(NotificationManager) appContext.getSystemService(NOTIFICATION_SERVICE);
|
||||||
}
|
}
|
||||||
@@ -52,4 +58,20 @@ public class RingerMutedConditionController extends AbnormalRingerConditionContr
|
|||||||
mAudioManager.getRingerModeInternal() == AudioManager.RINGER_MODE_SILENT;
|
mAudioManager.getRingerModeInternal() == AudioManager.RINGER_MODE_SILENT;
|
||||||
return isSilent && !zenModeEnabled;
|
return isSilent && !zenModeEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ContextualCard buildContextualCard() {
|
||||||
|
return new ConditionalContextualCard.Builder()
|
||||||
|
.setConditionId(ID)
|
||||||
|
.setMetricsConstant(MetricsProto.MetricsEvent.SETTINGS_CONDITION_DEVICE_MUTED)
|
||||||
|
.setActionText(
|
||||||
|
mAppContext.getText(R.string.condition_device_muted_action_turn_on_sound))
|
||||||
|
.setName(mAppContext.getPackageName() + "/"
|
||||||
|
+ mAppContext.getText(R.string.condition_device_muted_title))
|
||||||
|
.setTitleText(mAppContext.getText(R.string.condition_device_muted_title).toString())
|
||||||
|
.setSummaryText(
|
||||||
|
mAppContext.getText(R.string.condition_device_muted_summary).toString())
|
||||||
|
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_notifications_off_24dp))
|
||||||
|
.build();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,62 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2018 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.settings.homepage.contextualcards.conditional;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.graphics.drawable.Drawable;
|
|
||||||
|
|
||||||
import com.android.internal.logging.nano.MetricsProto;
|
|
||||||
import com.android.settings.R;
|
|
||||||
|
|
||||||
public class RingerVibrateConditionCard implements ConditionalCard {
|
|
||||||
|
|
||||||
private final Context mAppContext;
|
|
||||||
|
|
||||||
public RingerVibrateConditionCard(Context appContext) {
|
|
||||||
mAppContext = appContext;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public long getId() {
|
|
||||||
return RingerVibrateConditionController.ID;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getActionText() {
|
|
||||||
return mAppContext.getText(R.string.condition_device_muted_action_turn_on_sound);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMetricsConstant() {
|
|
||||||
return MetricsProto.MetricsEvent.SETTINGS_CONDITION_DEVICE_VIBRATE;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Drawable getIcon() {
|
|
||||||
return mAppContext.getDrawable(R.drawable.ic_volume_ringer_vibrate);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getTitle() {
|
|
||||||
return mAppContext.getText(R.string.condition_device_vibrate_title);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getSummary() {
|
|
||||||
return mAppContext.getText(R.string.condition_device_vibrate_summary);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -19,13 +19,20 @@ package com.android.settings.homepage.contextualcards.conditional;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.media.AudioManager;
|
import android.media.AudioManager;
|
||||||
|
|
||||||
|
import com.android.internal.logging.nano.MetricsProto;
|
||||||
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.homepage.contextualcards.ContextualCard;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
public class RingerVibrateConditionController extends AbnormalRingerConditionController {
|
public class RingerVibrateConditionController extends AbnormalRingerConditionController {
|
||||||
static final int ID = Objects.hash("RingerVibrateConditionController");
|
static final int ID = Objects.hash("RingerVibrateConditionController");
|
||||||
|
|
||||||
|
private final Context mAppContext;
|
||||||
|
|
||||||
public RingerVibrateConditionController(Context appContext, ConditionManager conditionManager) {
|
public RingerVibrateConditionController(Context appContext, ConditionManager conditionManager) {
|
||||||
super(appContext, conditionManager);
|
super(appContext, conditionManager);
|
||||||
|
mAppContext = appContext;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,4 +45,21 @@ public class RingerVibrateConditionController extends AbnormalRingerConditionCon
|
|||||||
public boolean isDisplayable() {
|
public boolean isDisplayable() {
|
||||||
return mAudioManager.getRingerModeInternal() == AudioManager.RINGER_MODE_VIBRATE;
|
return mAudioManager.getRingerModeInternal() == AudioManager.RINGER_MODE_VIBRATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ContextualCard buildContextualCard() {
|
||||||
|
return new ConditionalContextualCard.Builder()
|
||||||
|
.setConditionId(ID)
|
||||||
|
.setMetricsConstant(MetricsProto.MetricsEvent.SETTINGS_CONDITION_DEVICE_VIBRATE)
|
||||||
|
.setActionText(
|
||||||
|
mAppContext.getText(R.string.condition_device_muted_action_turn_on_sound))
|
||||||
|
.setName(mAppContext.getPackageName() + "/"
|
||||||
|
+ mAppContext.getText(R.string.condition_device_vibrate_title))
|
||||||
|
.setTitleText(
|
||||||
|
mAppContext.getText(R.string.condition_device_vibrate_title).toString())
|
||||||
|
.setSummaryText(
|
||||||
|
mAppContext.getText(R.string.condition_device_vibrate_summary).toString())
|
||||||
|
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_volume_ringer_vibrate))
|
||||||
|
.build();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,63 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2018 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.settings.homepage.contextualcards.conditional;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.graphics.drawable.Drawable;
|
|
||||||
|
|
||||||
import com.android.internal.logging.nano.MetricsProto;
|
|
||||||
import com.android.settings.R;
|
|
||||||
|
|
||||||
public class WorkModeConditionCard implements ConditionalCard {
|
|
||||||
|
|
||||||
private final Context mAppContext;
|
|
||||||
|
|
||||||
public WorkModeConditionCard(Context appContext) {
|
|
||||||
mAppContext = appContext;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public long getId() {
|
|
||||||
return WorkModeConditionController.ID;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getActionText() {
|
|
||||||
return mAppContext.getText(R.string.condition_turn_on);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMetricsConstant() {
|
|
||||||
return MetricsProto.MetricsEvent.SETTINGS_CONDITION_WORK_MODE;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Drawable getIcon() {
|
|
||||||
return mAppContext.getDrawable(R.drawable.ic_signal_workmode_enable);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getTitle() {
|
|
||||||
return mAppContext.getText(R.string.condition_work_title);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getSummary() {
|
|
||||||
return mAppContext.getText(R.string.condition_work_summary);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@@ -25,7 +25,10 @@ import android.os.UserHandle;
|
|||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
||||||
|
import com.android.internal.logging.nano.MetricsProto;
|
||||||
|
import com.android.settings.R;
|
||||||
import com.android.settings.Settings;
|
import com.android.settings.Settings;
|
||||||
|
import com.android.settings.homepage.contextualcards.ContextualCard;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@@ -79,6 +82,20 @@ public class WorkModeConditionController implements ConditionalCardController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ContextualCard buildContextualCard() {
|
||||||
|
return new ConditionalContextualCard.Builder()
|
||||||
|
.setConditionId(ID)
|
||||||
|
.setMetricsConstant(MetricsProto.MetricsEvent.SETTINGS_CONDITION_WORK_MODE)
|
||||||
|
.setActionText(mAppContext.getText(R.string.condition_turn_on))
|
||||||
|
.setName(mAppContext.getPackageName() + "/"
|
||||||
|
+ mAppContext.getText(R.string.condition_work_title))
|
||||||
|
.setTitleText(mAppContext.getText(R.string.condition_work_title).toString())
|
||||||
|
.setSummaryText(mAppContext.getText(R.string.condition_work_summary).toString())
|
||||||
|
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_signal_workmode_enable))
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startMonitoringStateChange() {
|
public void startMonitoringStateChange() {
|
||||||
mAppContext.registerReceiver(mReceiver, FILTER);
|
mAppContext.registerReceiver(mReceiver, FILTER);
|
||||||
|
@@ -23,6 +23,7 @@ import android.content.Context;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.media.AudioManager;
|
import android.media.AudioManager;
|
||||||
|
|
||||||
|
import com.android.settings.homepage.contextualcards.ContextualCard;
|
||||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@@ -79,5 +80,10 @@ public class AbnormalRingerConditionControllerBaseTest {
|
|||||||
public boolean isDisplayable() {
|
public boolean isDisplayable() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ContextualCard buildContextualCard() {
|
||||||
|
return new ConditionalContextualCard.Builder().build();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -23,9 +23,8 @@ import static org.mockito.Mockito.verify;
|
|||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.drawable.Drawable;
|
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.homepage.contextualcards.ContextualCard;
|
||||||
import com.android.settings.homepage.contextualcards.ContextualCardUpdateListener;
|
import com.android.settings.homepage.contextualcards.ContextualCardUpdateListener;
|
||||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||||
|
|
||||||
@@ -74,8 +73,8 @@ public class ConditionContextualCardControllerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onConditionsChanged_listenerIsSet_shouldUpdateData() {
|
public void onConditionsChanged_listenerIsSet_shouldUpdateData() {
|
||||||
final FakeConditionalCard fakeConditionalCard = new FakeConditionalCard(mContext);
|
final ContextualCard fakeConditionalCard = new ConditionalContextualCard.Builder().build();
|
||||||
final List<ConditionalCard> conditionalCards = new ArrayList<>();
|
final List<ContextualCard> conditionalCards = new ArrayList<>();
|
||||||
conditionalCards.add(fakeConditionalCard);
|
conditionalCards.add(fakeConditionalCard);
|
||||||
when(mConditionManager.getDisplayableCards()).thenReturn(conditionalCards);
|
when(mConditionManager.getDisplayableCards()).thenReturn(conditionalCards);
|
||||||
mController.setCardUpdateListener(mListener);
|
mController.setCardUpdateListener(mListener);
|
||||||
@@ -87,8 +86,8 @@ public class ConditionContextualCardControllerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onConditionsChanged_listenerNotSet_shouldNotUpdateData() {
|
public void onConditionsChanged_listenerNotSet_shouldNotUpdateData() {
|
||||||
final FakeConditionalCard fakeConditionalCard = new FakeConditionalCard(mContext);
|
final ContextualCard fakeConditionalCard = new ConditionalContextualCard.Builder().build();
|
||||||
final List<ConditionalCard> conditionalCards = new ArrayList<>();
|
final List<ContextualCard> conditionalCards = new ArrayList<>();
|
||||||
conditionalCards.add(fakeConditionalCard);
|
conditionalCards.add(fakeConditionalCard);
|
||||||
when(mConditionManager.getDisplayableCards()).thenReturn(conditionalCards);
|
when(mConditionManager.getDisplayableCards()).thenReturn(conditionalCards);
|
||||||
|
|
||||||
@@ -96,43 +95,4 @@ public class ConditionContextualCardControllerTest {
|
|||||||
|
|
||||||
verify(mListener, never()).onContextualCardUpdated(any());
|
verify(mListener, never()).onContextualCardUpdated(any());
|
||||||
}
|
}
|
||||||
|
|
||||||
private class FakeConditionalCard implements ConditionalCard {
|
|
||||||
|
|
||||||
private final Context mContext;
|
|
||||||
|
|
||||||
public FakeConditionalCard(Context context) {
|
|
||||||
mContext = context;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public long getId() {
|
|
||||||
return 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getActionText() {
|
|
||||||
return "action_text_test";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMetricsConstant() {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Drawable getIcon() {
|
|
||||||
return mContext.getDrawable(R.drawable.ic_do_not_disturb_on_24dp);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getTitle() {
|
|
||||||
return "title_text_test";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence getSummary() {
|
|
||||||
return "summary_text_test";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -40,8 +40,6 @@ public class ConditionManagerTest {
|
|||||||
|
|
||||||
private static final long ID = 123L;
|
private static final long ID = 123L;
|
||||||
|
|
||||||
@Mock
|
|
||||||
private ConditionalCard mCard;
|
|
||||||
@Mock
|
@Mock
|
||||||
private ConditionalCardController mController;
|
private ConditionalCardController mController;
|
||||||
@Mock
|
@Mock
|
||||||
@@ -57,14 +55,11 @@ public class ConditionManagerTest {
|
|||||||
mContext = RuntimeEnvironment.application;
|
mContext = RuntimeEnvironment.application;
|
||||||
mManager = spy(new ConditionManager(mContext, mConditionListener));
|
mManager = spy(new ConditionManager(mContext, mConditionListener));
|
||||||
|
|
||||||
assertThat(mManager.mCandidates.size()).isEqualTo(mManager.mCardControllers.size());
|
|
||||||
|
|
||||||
when(mController.getId()).thenReturn(ID);
|
when(mController.getId()).thenReturn(ID);
|
||||||
when(mCard.getId()).thenReturn(ID);
|
when(mController.buildContextualCard()).thenReturn(
|
||||||
|
new ConditionalContextualCard.Builder()
|
||||||
mManager.mCandidates.clear();
|
.build());
|
||||||
mManager.mCardControllers.clear();
|
mManager.mCardControllers.clear();
|
||||||
mManager.mCandidates.add(mCard);
|
|
||||||
mManager.mCardControllers.add(mController);
|
mManager.mCardControllers.add(mController);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,62 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2018 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.settings.homepage.contextualcards.conditional;
|
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
|
||||||
|
|
||||||
import static org.mockito.ArgumentMatchers.anyLong;
|
|
||||||
import static org.mockito.Mockito.spy;
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
|
|
||||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
|
||||||
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
import org.mockito.Mock;
|
|
||||||
import org.mockito.MockitoAnnotations;
|
|
||||||
import org.robolectric.RuntimeEnvironment;
|
|
||||||
|
|
||||||
@RunWith(SettingsRobolectricTestRunner.class)
|
|
||||||
public class DndConditionalCardTest {
|
|
||||||
|
|
||||||
@Mock
|
|
||||||
private ConditionManager mManager;
|
|
||||||
private DndConditionCardController mController;
|
|
||||||
|
|
||||||
private Context mContext;
|
|
||||||
private DndConditionCard mCard;
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void setUp() {
|
|
||||||
MockitoAnnotations.initMocks(this);
|
|
||||||
mContext = spy(RuntimeEnvironment.application);
|
|
||||||
|
|
||||||
mController = new DndConditionCardController(mContext, mManager);
|
|
||||||
when(mManager.getController(anyLong())).thenReturn(mController);
|
|
||||||
|
|
||||||
mCard = new DndConditionCard(mContext, mManager);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void getId_sameAsController() {
|
|
||||||
assertThat(mCard.getId()).isEqualTo(mController.getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@@ -1,55 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2018 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.settings.homepage.contextualcards.conditional;
|
|
||||||
|
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
|
|
||||||
import com.android.settings.R;
|
|
||||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
|
||||||
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
import org.mockito.MockitoAnnotations;
|
|
||||||
import org.robolectric.RuntimeEnvironment;
|
|
||||||
|
|
||||||
@RunWith(SettingsRobolectricTestRunner.class)
|
|
||||||
public class RingerVibrateConditionCardTest {
|
|
||||||
|
|
||||||
private Context mContext;
|
|
||||||
private RingerVibrateConditionCard mCard;
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void setUp() {
|
|
||||||
MockitoAnnotations.initMocks(this);
|
|
||||||
mContext = RuntimeEnvironment.application;
|
|
||||||
mCard = new RingerVibrateConditionCard(mContext);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void verifyText() {
|
|
||||||
assertThat(mCard.getTitle()).isEqualTo(
|
|
||||||
mContext.getText(R.string.condition_device_vibrate_title));
|
|
||||||
assertThat(mCard.getSummary()).isEqualTo(
|
|
||||||
mContext.getText(R.string.condition_device_vibrate_summary));
|
|
||||||
assertThat(mCard.getActionText()).isEqualTo(
|
|
||||||
mContext.getText(R.string.condition_device_muted_action_turn_on_sound));
|
|
||||||
}
|
|
||||||
}
|
|
Reference in New Issue
Block a user