package com.androapplite.kuaiya.battermanager.activity;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.widget.FrameLayout;
import com.androapplite.kuaiya.battermanager.fragment.SettingsFragment;
import com.androapplite.kuaiya.battermanager.utils.StatusColorUtils;
import com.androapplite.kuaiya.battermanager.utils.ToolbarUtils;
import com.tools.doc.battery.R;
import butterknife.Bind;
import butterknife.ButterKnife;
public class MetarialSettingActivity extends AppCompatActivity {
@Bind(R.id.toolbar)
Toolbar toolbar;
@Bind(R.id.fl_my_setting_activity)
FrameLayout flMySettingActivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_metarial_setting);
ButterKnife.bind(this);
ToolbarUtils.setToolbar(R.string.setting, toolbar, this);
toolbar.setSubtitleTextColor(Color.WHITE);
toolbar.setTitleTextColor(Color.WHITE);
SettingsFragment settingsFragment = new SettingsFragment();
StatusColorUtils.initStatusGreenBar(this);
getFragmentManager().beginTransaction().replace(R.id.fl_my_setting_activity, settingsFragment).commit();
}
}
<activity
android:name="com.androapplite.kuaiya.battermanager.activity.MetarialSettingActivity"
android:screenOrientation="portrait"
android:theme="@style/SettingThemeSwitch"></activity>
<style name="SettingThemeSwitch" parent="Theme.AppCompat.NoActionBar">
<item name="colorPrimaryDark">@color/color_main</item>
<item name="colorPrimary">@color/color_main</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:listDivider">@drawable/divider</item>
<!--<item name="android:textColorPrimary">#DD000000</item>-->
<!--<item name="android:textColorSecondary">#8A000000</item>-->
<item name="android:textColorHint">#42000000</item>
<!--<item name="android:windowBackground">@color/color_main</item>-->
</style>
activity_metarial_setting.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/color_main"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/AppLockPopupOverlay" />
<FrameLayout
android:background="@color/white"
android:id="@+id/fl_my_setting_activity"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"></FrameLayout>
</LinearLayout>
</LinearLayout>
SettingsFragment
package com.androapplite.kuaiya.battermanager.fragment;
import android.app.Activity;
import android.app.NotificationManager;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceScreen;
import android.support.annotation.Nullable;
import com.androapplite.kuaiya.battermanager.Constant;
import com.androapplite.kuaiya.battermanager.service.BatteryService;
import com.androapplite.kuaiya.battermanager.service.NightShiftService;
import com.androapplite.kuaiya.battermanager.utils.Firebase;
import com.androapplite.kuaiya.battermanager.utils.ShortCutUtils;
import com.androapplite.kuaiya.battermanager.utils.SpUtils;
import com.lb.material_preferences_library.custom_preferences.SwitchPreference;
import com.tools.doc.battery.R;
import static android.content.Context.NOTIFICATION_SERVICE;
import static com.androapplite.kuaiya.battermanager.service.BatteryService.APP_ID_RESIDENT;
import static com.androapplite.kuaiya.battermanager.service.BatteryService.APP_NOTIFIMEMORYID;
import static com.androapplite.kuaiya.battermanager.service.BatteryService.APP_OVER_HEATING;
/**
* Created by liuan on 2018/3/20.
*/
public class SettingsFragment extends PreferenceFragment implements Preference.OnPreferenceClickListener {
private Activity activity;
private SwitchPreference switchAppinstall;
private SwitchPreference switchNotiOptimizationReminder;
private SwitchPreference switchAppUninstall;
private SwitchPreference switchNotiLowPower;
private SwitchPreference switchSafeReport;
private SwitchPreference switchTemperatureAlarm;
private Preference createShortcut;
private SwitchPreference switchQuickPanel;
private Preference feedback;
private Preference version;
private SwitchPreference switchNotification;
private NotificationManager mManager;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
activity = getActivity();
addPreferencesFromResource(R.xml.setting_activity_preference);
initView();
initData();
}
private void initData() {
mManager = (NotificationManager) activity.getSystemService(NOTIFICATION_SERVICE);
//通知栏开关
final boolean notification = SpUtils.getBoolean(activity, "notification", true);
switchNotification.setChecked(notification);
//快速面板
final boolean QuickPanel = SpUtils.getBoolean(activity, "QuickPanel", Constant.isQuickPanel);
switchQuickPanel.setChecked(QuickPanel);
//优化内存超过70%
final boolean mSpToogleOptimize = SpUtils.getBoolean(activity, "mSpToogleMemory", true);
switchNotiOptimizationReminder.setChecked(mSpToogleOptimize);
//安装提醒
final boolean mSpToogleAppInstall = SpUtils.getBoolean(activity, "mSpToogleAppInstall", true);
switchAppinstall.setChecked(mSpToogleAppInstall);
//卸载提醒
final boolean mSpToogleAppUnInstall = SpUtils.getBoolean(activity, "mSpToogleAppUnInstall", true);
switchAppUninstall.setChecked(mSpToogleAppUnInstall);
//电量低于百分之30提醒
final boolean mSpLessThirty = SpUtils.getBoolean(activity, "mSpLessThirty", true);
switchNotiLowPower.setChecked(mSpLessThirty);
//每日报告
final boolean mSpSafeReport = SpUtils.getBoolean(activity, "mSpSafeReport", true);
switchSafeReport.setChecked(mSpSafeReport);
//优化弹框
boolean isSpToogleeOverHeating = SpUtils.getBoolean("isSpToogleeOverHeating", true);
switchTemperatureAlarm.setChecked(isSpToogleeOverHeating);
}
private void initView() {
PreferenceScreen preferenceScreen = getPreferenceScreen();
switchNotification = (SwitchPreference) preferenceScreen.findPreference("switch_notification");
switchNotiOptimizationReminder = (SwitchPreference) preferenceScreen.findPreference("switch_noti_optimization_reminder");
switchAppinstall = (SwitchPreference) preferenceScreen.findPreference("switch_appinstall");
switchAppUninstall = (SwitchPreference) preferenceScreen.findPreference("switch_app_uninstall");
switchNotiLowPower = (SwitchPreference) preferenceScreen.findPreference("switch_noti_low_power");
switchSafeReport = (SwitchPreference) preferenceScreen.findPreference("switch_safe_report");
switchTemperatureAlarm = (SwitchPreference) preferenceScreen.findPreference("switch_temperature_alarm");
createShortcut = (Preference) preferenceScreen.findPreference("create_shortcut");
switchQuickPanel = (SwitchPreference) preferenceScreen.findPreference("switch_quick_panel");
feedback = (Preference) preferenceScreen.findPreference("feedback");
version = (Preference) preferenceScreen.findPreference("version");
switchNotification.setOnPreferenceClickListener(this);
switchNotiOptimizationReminder.setOnPreferenceClickListener(this);
switchAppinstall.setOnPreferenceClickListener(this);
switchAppUninstall.setOnPreferenceClickListener(this);
switchNotiLowPower.setOnPreferenceClickListener(this);
switchSafeReport.setOnPreferenceClickListener(this);
switchTemperatureAlarm.setOnPreferenceClickListener(this);
createShortcut.setOnPreferenceClickListener(this);
switchQuickPanel.setOnPreferenceClickListener(this);
feedback.setOnPreferenceClickListener(this);
version.setOnPreferenceClickListener(this);
initVersion();
}
@Override
public boolean onPreferenceClick(Preference preference) {
String key = preference.getKey();
if (key.equals("switch_notification")) {
initNotification();
} else if (key.equals("switch_noti_optimization_reminder")) {
initOptimizationReminder();
} else if (key.equals("switch_appinstall")) {
initAppinstall();
} else if (key.equals("switch_app_uninstall")) {
initAppUninstall();
} else if (key.equals("switch_noti_low_power")) {
initNotiLowPower();
} else if (key.equals("switch_safe_report")) {
initSafeReport();
} else if (key.equals("switch_temperature_alarm")) {
initTemperatureAlarm();
} else if (key.equals("create_shortcut")) {
initCreateShortcut();
} else if (key.equals("switch_quick_panel")) {
iniQuickPanel();
} else if (key.equals("feedback")) {
initFeedBack();
} else if (key.equals("version")) {
}
return false;
}
private void initVersion() {
PackageManager packageManager = activity.getPackageManager();
String packageName = activity.getPackageName();
PackageInfo packageInfo = null;
try {
packageInfo = packageManager.getPackageInfo(packageName, 0);
version.setSummary(packageInfo.versionName);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
private void initFeedBack() {
Intent data = new Intent(Intent.ACTION_SENDTO);
data.setData(Uri.parse("mailto:15662660292@163.com"));
data.putExtra(Intent.EXTRA_SUBJECT, "");
data.putExtra(Intent.EXTRA_TEXT, "");
try {
myStartActivity(activity, data);
} catch (ActivityNotFoundException e) {
e.printStackTrace();
}
}
public static boolean myStartActivity(Context context, Intent intent) {
if ((context == null) || (intent == null))
return false;
try {
context.startActivity(intent);
} catch (ActivityNotFoundException activityNotFoundException) {
activityNotFoundException.printStackTrace();
return false;
} catch (IllegalArgumentException illegalArgumentException) {
illegalArgumentException.printStackTrace();
return false;
} catch (Exception exception) {
exception.printStackTrace();
return false;
}
return true;
}
private void initCreateShortcut() {
ShortCutUtils.addShortcut(getString(R.string.power_saving), activity);
}
private void initTemperatureAlarm() {
final boolean mSpToogleOptimize = SpUtils.getBoolean(activity, "isSpToogleeOverHeating", true);
if (mSpToogleOptimize) {
Firebase.getInstance(activity).logEvent("关闭高温通知", "点击");
switchTemperatureAlarm.setChecked(false);
SpUtils.putBoolean("isSpToogleeOverHeating", false);
mManager.cancel(APP_OVER_HEATING);
} else {
Firebase.getInstance(activity).logEvent("开启高温通知", "点击");
switchTemperatureAlarm.setChecked(true);
SpUtils.putBoolean("isSpToogleeOverHeating", true);
}
}
private void initSafeReport() {
final boolean mSpToogleOptimize = SpUtils.getBoolean(activity, "mSpSafeReport", true);
if (mSpToogleOptimize) {
Firebase.getInstance(activity).logEvent("关闭控制面板通知", "点击");
switchSafeReport.setChecked(false);
SpUtils.putBoolean("mSpSafeReport", false);
} else {
Firebase.getInstance(activity).logEvent("开启控制面板通知", "点击");
switchSafeReport.setChecked(true);
SpUtils.putBoolean("mSpSafeReport", true);
}
}
private void initNotiLowPower() {
//优化内存超过70%
final boolean mSpToogleOptimize = SpUtils.getBoolean(activity, "mSpLessThirty", true);
if (mSpToogleOptimize) {
Firebase.getInstance(activity).logEvent("关闭低电量通知", "点击");
switchNotiLowPower.setChecked(false);
SpUtils.putBoolean("mSpLessThirty", false);
} else {
Firebase.getInstance(activity).logEvent("开启低电量通知", "点击");
switchNotiLowPower.setChecked(true);
SpUtils.putBoolean("mSpLessThirty", true);
}
}
private void iniQuickPanel() {
boolean initProtection1 = SpUtils.getBoolean(activity, "QuickPanel", Constant.isQuickPanel);
if (initProtection1) {
Firebase.getInstance(activity).logEvent("关闭底部快捷面板", "点击");
switchQuickPanel.setChecked(false);
SpUtils.putBoolean(activity, "QuickPanel", false);
Intent intent = new Intent(activity, NightShiftService.class);
intent.putExtra("show_shifnight_view", false);
activity.stopService(intent);
} else {
Firebase.getInstance(activity).logEvent("打开底部快捷面板", "点击");
switchQuickPanel.setChecked(true);
SpUtils.putBoolean(activity, "QuickPanel", true);
Intent intent = new Intent(activity, NightShiftService.class);
activity.startService(intent);
}
}
private void initAppUninstall() {
//优化内存超过70%
final boolean mSpToogleOptimize = SpUtils.getBoolean(activity, "mSpToogleAppUnInstall", true);
if (mSpToogleOptimize) {
Firebase.getInstance(activity).logEvent("关闭卸载通知", "点击");
switchAppUninstall.setChecked(false);
SpUtils.putBoolean("mSpToogleAppUnInstall", false);
} else {
Firebase.getInstance(activity).logEvent("开启卸载通知", "点击");
switchAppUninstall.setChecked(true);
SpUtils.putBoolean("mSpToogleAppUnInstall", true);
}
}
private void initAppinstall() {
//优化内存超过70%
final boolean mSpToogleOptimize = SpUtils.getBoolean(activity, "mSpToogleAppInstall", true);
if (mSpToogleOptimize) {
Firebase.getInstance(activity).logEvent("关闭安装通知", "点击");
switchAppinstall.setChecked(false);
SpUtils.putBoolean("mSpToogleAppInstall", false);
} else {
Firebase.getInstance(activity).logEvent("开启安装通知", "点击");
switchAppinstall.setChecked(true);
SpUtils.putBoolean("mSpToogleAppInstall", true);
}
}
private void initOptimizationReminder() {
//优化内存超过70%
final boolean mSpToogleOptimize = SpUtils.getBoolean(activity, "mSpToogleMemory", true);
if (mSpToogleOptimize) {
Firebase.getInstance(activity).logEvent("关闭优化通知", "点击");
switchNotiOptimizationReminder.setChecked(false);
SpUtils.putBoolean("mSpToogleMemory", false);
mManager.cancel(APP_NOTIFIMEMORYID);
} else {
Firebase.getInstance(activity).logEvent("开启优化通知", "点击");
switchNotiOptimizationReminder.setChecked(true);
SpUtils.putBoolean("mSpToogleMemory", true);
}
}
private void initNotification() {
boolean notification1 = SpUtils.getBoolean(activity, "notification", true);
if (notification1) {
// ToastUtils.showToast(
// " The next boot will not show notifications");
Firebase.getInstance(activity).logEvent("关闭通知", "点击");
BatteryService batteryService = new BatteryService();
batteryService.stopServiceNotification();
switchNotification.setChecked(false);
SpUtils.putBoolean(activity, "notification", false);
if (mManager != null) {
mManager.cancel(APP_ID_RESIDENT);
}
} else {
Firebase.getInstance(activity).logEvent("打开通知", "点击");
BatteryService batteryService = new BatteryService();
batteryService.startServiceNotification();
switchNotification.setChecked(true);
SpUtils.putBoolean(activity, "notification", true);
}
}
}
setting_activity_preference
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<com.lb.material_preferences_library.custom_preferences.PreferenceCategory
android:key="notification"
android:theme="@style/SettingThemeSwitch"
android:title="@string/notification">
<com.lb.material_preferences_library.custom_preferences.SwitchPreference
android:defaultValue="true"
android:key="switch_notification"
android:textOff=""
android:textOn=""
android:title="@string/notification_toggle" />
<com.lb.material_preferences_library.custom_preferences.SwitchPreference
android:defaultValue="true"
android:key="switch_noti_optimization_reminder"
android:textOff=""
android:textOn=""
android:title="@string/optimization_reminder"
/>
<com.lb.material_preferences_library.custom_preferences.SwitchPreference
android:defaultValue="true"
android:key="switch_appinstall"
android:textOff=""
android:textOn=""
android:title="@string/app_installation_alret"
/>
<com.lb.material_preferences_library.custom_preferences.SwitchPreference
android:defaultValue="true"
android:key="switch_app_uninstall"
android:textOff=""
android:textOn=""
android:title="@string/uninstall_alert"
/>
<com.lb.material_preferences_library.custom_preferences.SwitchPreference
android:defaultValue="true"
android:key="switch_noti_low_power"
android:textOff=""
android:textOn=""
android:title="@string/low_power_reminder"
/>
<com.lb.material_preferences_library.custom_preferences.SwitchPreference
android:defaultValue="true"
android:key="switch_safe_report"
android:textOff=""
android:textOn=""
android:title="@string/battery_safety_report"
/>
<com.lb.material_preferences_library.custom_preferences.SwitchPreference
android:defaultValue="true"
android:key="switch_temperature_alarm"
android:textOff=""
android:textOn=""
android:title="@string/overheating_temperature_alarm"
/>
</com.lb.material_preferences_library.custom_preferences.PreferenceCategory>
<com.lb.material_preferences_library.custom_preferences.PreferenceCategory
android:key="shortcut"
android:title="@string/shortcut">
<com.lb.material_preferences_library.custom_preferences.Preference
android:defaultValue="true"
android:key="create_shortcut"
android:title="@string/create_a_power_saving_shortcut" />
<com.lb.material_preferences_library.custom_preferences.SwitchPreference
android:defaultValue="true"
android:key="switch_quick_panel"
android:textOff=""
android:textOn=""
android:summary="@string/may_contain_ads"
android:title="@string/quick_panel"
/>
</com.lb.material_preferences_library.custom_preferences.PreferenceCategory>
<com.lb.material_preferences_library.custom_preferences.PreferenceCategory
android:key="other"
android:title="@string/other">
<com.lb.material_preferences_library.custom_preferences.Preference
android:defaultValue="true"
android:key="feedback"
android:title="@string/feedback" />
<com.lb.material_preferences_library.custom_preferences.Preference
android:defaultValue="true"
android:key="version"
android:title="@string/version" />
</com.lb.material_preferences_library.custom_preferences.PreferenceCategory>
</PreferenceScreen>
这里用到了一个库 点击打开链接
我提交到码云 也可以点击打开链接
这个样式如果不是你喜欢的颜色 那么可以在这里改这些参数
在Android 5.0 中 Switch 更新了样式 变得 比较好用了
但是在5.0 以下的版本 还是老样子 不实用 因此 就有了 SwitchCompat 来兼容 它是v7 包中的 因此可兼容到 2.1
使用时 写一下布局即可。。
<android.support.v7.widget.SwitchCompat
android:id="@+id/switch1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
这个switch 默认是 粉红色的 有的时候我们需要设置成和我们的主题颜色一致 就需要更改 switch的颜色
一种方式是 设置 thumb(拇指按钮) 和 track(轨迹) 颜色
switch1 = (SwitchCompat) view.findViewById(R.id.switch1);
switch1.setTrackResource();
switch1.setThumbResource();
如果有适合的图片 可以这样设置 但是通常这样设置是比较麻烦的 需要合适的图片
因此就有了下面的简便的方法 :
在style 中设置
<!-- Active thumb color & Active track color(30% transparency) switch 打开时的拇指按钮的颜色 轨迹颜色默认为30%这个颜色 -->
<item name="colorControlActivated">@color/theme_color_green</item>
<!-- Inactive thumb color switch关闭时的拇指按钮的颜色 -->
<item name="colorSwitchThumbNormal">@color/colorAccent</item>
<!-- Inactive track color(30% transparency) switch关闭时的轨迹的颜色 30%这个颜色 -->
<item name="android:colorForeground">@color/colorPrimaryDark</item>
这样就完成了