Merge "Clean up ConditionalCards"

This commit is contained in:
Fan Zhang
2018-11-02 16:43:50 +00:00
committed by Android (Google) Code Review
30 changed files with 218 additions and 906 deletions

View File

@@ -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);
}
}

View File

@@ -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);

View File

@@ -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);
}
}

View File

@@ -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() {

View File

@@ -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);
}
}

View File

@@ -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);

View File

@@ -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);
}
}

View File

@@ -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);

View File

@@ -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<>();

View File

@@ -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;
} }
} }
} }

View File

@@ -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();
}

View File

@@ -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();

View File

@@ -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 {

View File

@@ -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;
}
}

View File

@@ -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;

View File

@@ -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();
}
}

View File

@@ -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);

View File

@@ -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);
}
}

View File

@@ -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);

View File

@@ -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);
}
}

View File

@@ -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();
}
} }

View File

@@ -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);
}
}

View File

@@ -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();
}
} }

View File

@@ -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);
}
}

View File

@@ -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);

View File

@@ -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();
}
} }
} }

View File

@@ -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";
}
}
} }

View File

@@ -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);
} }

View File

@@ -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());
}
}

View File

@@ -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));
}
}