| /* |
| * Copyright 2016 Fairphone B.V. |
| * |
| * 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.fairphone.hiccup.app; |
| |
| import android.content.BroadcastReceiver; |
| import android.content.Context; |
| import android.content.Intent; |
| import android.content.IntentFilter; |
| import android.content.SharedPreferences; |
| import android.os.Bundle; |
| import android.preference.Preference; |
| import android.preference.PreferenceActivity; |
| import android.preference.PreferenceManager; |
| import android.support.v4.content.LocalBroadcastManager; |
| import android.widget.Toast; |
| |
| import java.text.SimpleDateFormat; |
| import java.util.Date; |
| |
| |
| public class HiccupSettings extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener, Preference.OnPreferenceClickListener { |
| private BroadcastReceiver mReceiver; |
| private int mClicked =0; |
| |
| public static boolean isCrashReportingEnabled(Context ctx) { |
| SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(ctx); |
| return preferences.getBoolean(ctx.getString(R.string.PREF_KEY_CRASH_REPORTING_ENABLED), true); |
| } |
| |
| public static String getAuxData(Context ctx) { |
| SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(ctx); |
| return preferences.getString(ctx.getString(R.string.PREF_KEY_AUXDATA), "N/A"); |
| } |
| |
| public static boolean isMobileDataAllowed(Context ctx) { |
| SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(ctx); |
| return preferences.getBoolean(ctx.getString(R.string.PREF_KEY_ALLOW_MOBILE_DATA), false); |
| } |
| |
| public static void setLastHeartbeatDate(Context ctx, Date date) { |
| SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(ctx); |
| SharedPreferences.Editor editor = preferences.edit(); |
| editor.putLong("com.fairphone.hiccup.last_heartbeat_date", date.getTime()); |
| editor.apply(); |
| } |
| |
| public static Date getLastHeartbeatDate(Context ctx) { |
| SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(ctx); |
| return new Date(preferences.getLong("com.fairphone.hiccup.last_heartbeat_date", 0)); |
| } |
| |
| |
| public static void setLastSyncDate(Context ctx, Date date) { |
| SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(ctx); |
| SharedPreferences.Editor editor = preferences.edit(); |
| editor.putLong("com.fairphone.hiccup.last_sync_date", date.getTime()); |
| editor.apply(); |
| } |
| |
| public static Date getLastSyncDate(Context ctx) { |
| SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(ctx); |
| return new Date(preferences.getLong("com.fairphone.hiccup.last_sync_date", 0)); |
| } |
| |
| public static IncludeLogFilesConfiguration getIncludeLogFilesConfiguration(Context ctx) { |
| SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(ctx); |
| String setting = preferences.getString(ctx.getString(R.string.PREF_KEY_LOGGING_OPTIONS), "last_kmsg"); |
| switch (setting){ |
| case "none": return IncludeLogFilesConfiguration.NONE; |
| case "last_kmsg": return IncludeLogFilesConfiguration.LAST_KMSG; |
| case "ALL": return IncludeLogFilesConfiguration.ALL; |
| default: return IncludeLogFilesConfiguration.NONE; |
| } |
| } |
| |
| public static String getUUID(Context ctx) { |
| SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(ctx); |
| return preferences.getString(ctx.getString(R.string.PREF_KEY_UUID), ctx.getString(R.string.no_UUID_assigned_yet)); |
| } |
| |
| @Override |
| public void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| addPreferencesFromResource(R.xml.settings); |
| updateView(); |
| getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); |
| } |
| |
| protected void onStart() { |
| super.onStart(); |
| mReceiver = new BroadcastReceiver() { |
| @Override |
| public void onReceive(Context context, Intent intent) { |
| updateView(); |
| } |
| }; |
| LocalBroadcastManager.getInstance(this).registerReceiver((mReceiver), |
| new IntentFilter(HiccupReportDB.db_changed_action) |
| ); |
| } |
| |
| @Override |
| protected void onStop() { |
| LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver); |
| super.onStop(); |
| } |
| |
| |
| @Override |
| protected void onResume() { |
| super.onResume(); |
| getPreferenceScreen().getSharedPreferences() |
| .registerOnSharedPreferenceChangeListener(this); |
| mReceiver = new BroadcastReceiver() { |
| @Override |
| public void onReceive(Context context, Intent intent) { |
| updateView(); |
| } |
| }; |
| LocalBroadcastManager.getInstance(this).registerReceiver((mReceiver), |
| new IntentFilter(HiccupReportDB.db_changed_action) |
| ); |
| } |
| |
| @Override |
| protected void onPause() { |
| super.onPause(); |
| LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver); |
| getPreferenceScreen().getSharedPreferences() |
| .unregisterOnSharedPreferenceChangeListener(this); |
| } |
| |
| void updateView() { |
| HiccupReportDB hiccupReportDB = new HiccupReportDB(this); |
| Preference uuidPreference = findPreference(getString(R.string.PREF_KEY_UUID)); |
| uuidPreference.setSummary(getUUID(this)); |
| |
| |
| String boardDateString = new SimpleDateFormat("yyyy-MM-dd").format(HiccupUtil.getBoardDate()); |
| String lastSyncDateString = new SimpleDateFormat("yyyy-MM-dd").format(getLastSyncDate(this)); |
| |
| if (lastSyncDateString.startsWith("19")) { |
| lastSyncDateString = "Never"; |
| } |
| |
| Preference boardDatePreference = findPreference(getString(R.string.PREF_BOARD_DATE)); |
| boardDatePreference.setSummary(boardDateString); |
| |
| Preference statisticsPreference = findPreference(getString(R.string.PREF_STATISTICS)); |
| int notUploadedCrashReports = hiccupReportDB.getNumNotUploadedCrashReports(); |
| int total = notUploadedCrashReports + hiccupReportDB.getNumUploadedCrashReports(); |
| statisticsPreference.setSummary("" + |
| total + " crashreports generated\n" + |
| notUploadedCrashReports + " crashreports not yet uploaded\n" + |
| "Last sync: " + lastSyncDateString); |
| |
| Preference logFilePreference = findPreference(getString(R.string.PREF_KEY_LOGGING_OPTIONS)); |
| String logfileChoice = getResources().getStringArray(R.array.include_logfile_choices)[getIncludeLogFilesConfiguration(this).ordinal()]; |
| |
| logFilePreference.setSummary(getString(R.string.pref_desc_include_log_files) +"\n" + |
| "Current setting: " + logfileChoice); |
| |
| boardDatePreference.setOnPreferenceClickListener(this); |
| } |
| |
| @Override |
| public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { |
| updateView(); |
| } |
| |
| public static void setCrashReportingEnabled(Context context, boolean isChecked) { |
| SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); |
| SharedPreferences.Editor editor = preferences.edit(); |
| editor.putBoolean(context.getString(R.string.PREF_KEY_CRASH_REPORTING_ENABLED), isChecked); |
| editor.apply(); |
| } |
| |
| @Override |
| public boolean onPreferenceClick(Preference preference) { |
| if (++mClicked > 10) { |
| HiccupUserConsentWizardActivity.enable(this); |
| Toast.makeText(this,"Re-enabled user consent question.", Toast.LENGTH_LONG); |
| } |
| return false; |
| } |
| |
| enum IncludeLogFilesConfiguration { |
| NONE, |
| LAST_KMSG, |
| ALL, |
| } |
| } |