blob: 49e0479c2415af5903a488305d3f59153a711aae [file] [log] [blame]
/*
* 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,
}
}