Properly handle and distribute language change #733
Also centralize QUIT handling in GBActivity
This commit is contained in:
parent
6cb400a63c
commit
c1925a4e64
|
@ -24,6 +24,7 @@ import android.app.NotificationManager.Policy;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.res.Configuration;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.database.sqlite.SQLiteDatabase;
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
|
@ -32,6 +33,7 @@ import android.os.Build;
|
||||||
import android.os.Build.VERSION;
|
import android.os.Build.VERSION;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import android.provider.ContactsContract.PhoneLookup;
|
import android.provider.ContactsContract.PhoneLookup;
|
||||||
|
import android.support.annotation.Nullable;
|
||||||
import android.support.v4.content.LocalBroadcastManager;
|
import android.support.v4.content.LocalBroadcastManager;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.TypedValue;
|
import android.util.TypedValue;
|
||||||
|
@ -40,6 +42,7 @@ import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.locks.Lock;
|
import java.util.concurrent.locks.Lock;
|
||||||
|
@ -88,6 +91,7 @@ public class GBApplication extends Application {
|
||||||
|
|
||||||
public static final String ACTION_QUIT
|
public static final String ACTION_QUIT
|
||||||
= "nodomain.freeyourgadget.gadgetbridge.gbapplication.action.quit";
|
= "nodomain.freeyourgadget.gadgetbridge.gbapplication.action.quit";
|
||||||
|
public static final String ACTION_LANGUAGE_CHANGE = "nodomain.freeyourgadget.gadgetbridge.gbapplication.action.language_change";
|
||||||
|
|
||||||
private static GBApplication app;
|
private static GBApplication app;
|
||||||
|
|
||||||
|
@ -102,6 +106,7 @@ public class GBApplication extends Application {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
private static Locale language;
|
||||||
|
|
||||||
private DeviceManager deviceManager;
|
private DeviceManager deviceManager;
|
||||||
|
|
||||||
|
@ -157,6 +162,8 @@ public class GBApplication extends Application {
|
||||||
setupExceptionHandler();
|
setupExceptionHandler();
|
||||||
|
|
||||||
deviceManager = new DeviceManager(this);
|
deviceManager = new DeviceManager(this);
|
||||||
|
String language = prefs.getString("language", "default");
|
||||||
|
setLanguage(language, null);
|
||||||
|
|
||||||
deviceService = createDeviceService();
|
deviceService = createDeviceService();
|
||||||
loadBlackList();
|
loadBlackList();
|
||||||
|
@ -468,6 +475,25 @@ public class GBApplication extends Application {
|
||||||
editor.apply();
|
editor.apply();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void setLanguage(String lang, @Nullable Context baseContext) {
|
||||||
|
if (lang.equals("default")) {
|
||||||
|
language = Locale.getDefault();
|
||||||
|
} else {
|
||||||
|
language = new Locale(lang);
|
||||||
|
}
|
||||||
|
Configuration config = new Configuration();
|
||||||
|
config.setLocale(language);
|
||||||
|
|
||||||
|
// FIXME: I have no idea what I am doing
|
||||||
|
context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());
|
||||||
|
if (baseContext != null) {
|
||||||
|
baseContext.getResources().updateConfiguration(config, baseContext.getResources().getDisplayMetrics());
|
||||||
|
}
|
||||||
|
Intent intent = new Intent();
|
||||||
|
intent.setAction(ACTION_LANGUAGE_CHANGE);
|
||||||
|
LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
|
||||||
|
}
|
||||||
|
|
||||||
public static LimitedQueue getIDSenderLookup() {
|
public static LimitedQueue getIDSenderLookup() {
|
||||||
return mIDSenderLookup;
|
return mIDSenderLookup;
|
||||||
}
|
}
|
||||||
|
@ -505,4 +531,8 @@ public class GBApplication extends Application {
|
||||||
public static GBApplication app() {
|
public static GBApplication app() {
|
||||||
return app;
|
return app;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Locale getLanguage() {
|
||||||
|
return language;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,20 +17,28 @@
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
package nodomain.freeyourgadget.gadgetbridge.activities;
|
package nodomain.freeyourgadget.gadgetbridge.activities;
|
||||||
|
|
||||||
|
import android.content.BroadcastReceiver;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.IntentFilter;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.preference.EditTextPreference;
|
import android.preference.EditTextPreference;
|
||||||
import android.preference.ListPreference;
|
import android.preference.ListPreference;
|
||||||
import android.preference.Preference;
|
import android.preference.Preference;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import android.support.v4.app.NavUtils;
|
import android.support.v4.app.NavUtils;
|
||||||
|
import android.support.v4.content.LocalBroadcastManager;
|
||||||
import android.text.InputType;
|
import android.text.InputType;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.util.AndroidUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A settings activity with support for preferences directly displaying their value.
|
* A settings activity with support for preferences directly displaying their value.
|
||||||
|
@ -42,6 +50,22 @@ public abstract class AbstractSettingsActivity extends AppCompatPreferenceActivi
|
||||||
|
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(AbstractSettingsActivity.class);
|
private static final Logger LOG = LoggerFactory.getLogger(AbstractSettingsActivity.class);
|
||||||
|
|
||||||
|
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
|
||||||
|
@Override
|
||||||
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
String action = intent.getAction();
|
||||||
|
switch (action) {
|
||||||
|
case GBApplication.ACTION_LANGUAGE_CHANGE:
|
||||||
|
setLanguage(GBApplication.getLanguage());
|
||||||
|
break;
|
||||||
|
case GBApplication.ACTION_QUIT:
|
||||||
|
finish();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A preference value change listener that updates the preference's summary
|
* A preference value change listener that updates the preference's summary
|
||||||
* to reflect its new value.
|
* to reflect its new value.
|
||||||
|
@ -110,6 +134,12 @@ public abstract class AbstractSettingsActivity extends AppCompatPreferenceActivi
|
||||||
} else {
|
} else {
|
||||||
setTheme(R.style.GadgetbridgeTheme);
|
setTheme(R.style.GadgetbridgeTheme);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IntentFilter filterLocal = new IntentFilter();
|
||||||
|
filterLocal.addAction(GBApplication.ACTION_QUIT);
|
||||||
|
filterLocal.addAction(GBApplication.ACTION_LANGUAGE_CHANGE);
|
||||||
|
LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, filterLocal);
|
||||||
|
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,6 +157,12 @@ public abstract class AbstractSettingsActivity extends AppCompatPreferenceActivi
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onDestroy() {
|
||||||
|
LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver);
|
||||||
|
super.onDestroy();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Subclasses should reimplement this to return the keys of those
|
* Subclasses should reimplement this to return the keys of those
|
||||||
* preferences which should print its values as a summary below the
|
* preferences which should print its values as a summary below the
|
||||||
|
@ -178,4 +214,8 @@ public abstract class AbstractSettingsActivity extends AppCompatPreferenceActivi
|
||||||
}
|
}
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setLanguage(Locale language) {
|
||||||
|
AndroidUtils.setLanguage(this, language);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,13 +17,8 @@
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
package nodomain.freeyourgadget.gadgetbridge.activities;
|
package nodomain.freeyourgadget.gadgetbridge.activities;
|
||||||
|
|
||||||
import android.content.BroadcastReceiver;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.IntentFilter;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.NavUtils;
|
import android.support.v4.app.NavUtils;
|
||||||
import android.support.v4.content.LocalBroadcastManager;
|
|
||||||
import android.support.v7.widget.LinearLayoutManager;
|
import android.support.v7.widget.LinearLayoutManager;
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
import android.support.v7.widget.SearchView;
|
import android.support.v7.widget.SearchView;
|
||||||
|
@ -32,7 +27,6 @@ import android.view.MenuItem;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.adapter.AppBlacklistAdapter;
|
import nodomain.freeyourgadget.gadgetbridge.adapter.AppBlacklistAdapter;
|
||||||
|
|
||||||
|
@ -42,16 +36,6 @@ public class AppBlacklistActivity extends GBActivity {
|
||||||
|
|
||||||
private AppBlacklistAdapter appBlacklistAdapter;
|
private AppBlacklistAdapter appBlacklistAdapter;
|
||||||
|
|
||||||
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
|
|
||||||
@Override
|
|
||||||
public void onReceive(Context context, Intent intent) {
|
|
||||||
String action = intent.getAction();
|
|
||||||
if (action.equals(GBApplication.ACTION_QUIT)) {
|
|
||||||
finish();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
@ -78,10 +62,6 @@ public class AppBlacklistActivity extends GBActivity {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
IntentFilter filter = new IntentFilter();
|
|
||||||
filter.addAction(GBApplication.ACTION_QUIT);
|
|
||||||
LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, filter);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -93,10 +73,4 @@ public class AppBlacklistActivity extends GBActivity {
|
||||||
}
|
}
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onDestroy() {
|
|
||||||
LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver);
|
|
||||||
super.onDestroy();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,6 +49,7 @@ import android.widget.Toast;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
import de.cketti.library.changelog.ChangeLog;
|
import de.cketti.library.changelog.ChangeLog;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||||
|
@ -56,6 +57,7 @@ import nodomain.freeyourgadget.gadgetbridge.R;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.adapter.GBDeviceAdapterv2;
|
import nodomain.freeyourgadget.gadgetbridge.adapter.GBDeviceAdapterv2;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.DeviceManager;
|
import nodomain.freeyourgadget.gadgetbridge.devices.DeviceManager;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.util.AndroidUtils;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.util.GB;
|
import nodomain.freeyourgadget.gadgetbridge.util.GB;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
|
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
|
||||||
|
|
||||||
|
@ -80,6 +82,9 @@ public class ControlCenterv2 extends AppCompatActivity
|
||||||
public void onReceive(Context context, Intent intent) {
|
public void onReceive(Context context, Intent intent) {
|
||||||
String action = intent.getAction();
|
String action = intent.getAction();
|
||||||
switch (action) {
|
switch (action) {
|
||||||
|
case GBApplication.ACTION_LANGUAGE_CHANGE:
|
||||||
|
setLanguage(GBApplication.getLanguage());
|
||||||
|
break;
|
||||||
case GBApplication.ACTION_QUIT:
|
case GBApplication.ACTION_QUIT:
|
||||||
finish();
|
finish();
|
||||||
break;
|
break;
|
||||||
|
@ -170,6 +175,7 @@ public class ControlCenterv2 extends AppCompatActivity
|
||||||
registerForContextMenu(deviceListView);
|
registerForContextMenu(deviceListView);
|
||||||
|
|
||||||
IntentFilter filterLocal = new IntentFilter();
|
IntentFilter filterLocal = new IntentFilter();
|
||||||
|
filterLocal.addAction(GBApplication.ACTION_LANGUAGE_CHANGE);
|
||||||
filterLocal.addAction(GBApplication.ACTION_QUIT);
|
filterLocal.addAction(GBApplication.ACTION_QUIT);
|
||||||
filterLocal.addAction(DeviceManager.ACTION_DEVICES_CHANGED);
|
filterLocal.addAction(DeviceManager.ACTION_DEVICES_CHANGED);
|
||||||
LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, filterLocal);
|
LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, filterLocal);
|
||||||
|
@ -295,4 +301,7 @@ public class ControlCenterv2 extends AppCompatActivity
|
||||||
ActivityCompat.requestPermissions(this, wantedPermissions.toArray(new String[wantedPermissions.size()]), 0);
|
ActivityCompat.requestPermissions(this, wantedPermissions.toArray(new String[wantedPermissions.size()]), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setLanguage(Locale language) {
|
||||||
|
AndroidUtils.setLanguage(this, language);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,6 @@ package nodomain.freeyourgadget.gadgetbridge.activities;
|
||||||
|
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.IntentFilter;
|
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.database.sqlite.SQLiteOpenHelper;
|
import android.database.sqlite.SQLiteOpenHelper;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
@ -62,9 +61,6 @@ public class DbManagementActivity extends GBActivity {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.activity_db_management);
|
setContentView(R.layout.activity_db_management);
|
||||||
|
|
||||||
IntentFilter filter = new IntentFilter();
|
|
||||||
filter.addAction(GBApplication.ACTION_QUIT);
|
|
||||||
|
|
||||||
dbPath = (TextView) findViewById(R.id.activity_db_management_path);
|
dbPath = (TextView) findViewById(R.id.activity_db_management_path);
|
||||||
dbPath.setText(getExternalPath());
|
dbPath.setText(getExternalPath());
|
||||||
|
|
||||||
|
|
|
@ -78,10 +78,6 @@ public class DebugActivity extends GBActivity {
|
||||||
@Override
|
@Override
|
||||||
public void onReceive(Context context, Intent intent) {
|
public void onReceive(Context context, Intent intent) {
|
||||||
switch (intent.getAction()) {
|
switch (intent.getAction()) {
|
||||||
case GBApplication.ACTION_QUIT: {
|
|
||||||
finish();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case ACTION_REPLY: {
|
case ACTION_REPLY: {
|
||||||
Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
|
Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
|
||||||
CharSequence reply = remoteInput.getCharSequence(EXTRA_REPLY);
|
CharSequence reply = remoteInput.getCharSequence(EXTRA_REPLY);
|
||||||
|
@ -104,7 +100,6 @@ public class DebugActivity extends GBActivity {
|
||||||
setContentView(R.layout.activity_debug);
|
setContentView(R.layout.activity_debug);
|
||||||
|
|
||||||
IntentFilter filter = new IntentFilter();
|
IntentFilter filter = new IntentFilter();
|
||||||
filter.addAction(GBApplication.ACTION_QUIT);
|
|
||||||
filter.addAction(ACTION_REPLY);
|
filter.addAction(ACTION_REPLY);
|
||||||
filter.addAction(DeviceService.ACTION_HEARTRATE_MEASUREMENT);
|
filter.addAction(DeviceService.ACTION_HEARTRATE_MEASUREMENT);
|
||||||
LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, filter);
|
LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, filter);
|
||||||
|
|
|
@ -76,9 +76,7 @@ public class FwAppInstallerActivity extends GBActivity implements InstallActivit
|
||||||
@Override
|
@Override
|
||||||
public void onReceive(Context context, Intent intent) {
|
public void onReceive(Context context, Intent intent) {
|
||||||
String action = intent.getAction();
|
String action = intent.getAction();
|
||||||
if (GBApplication.ACTION_QUIT.equals(action)) {
|
if (GBDevice.ACTION_DEVICE_CHANGED.equals(action)) {
|
||||||
finish();
|
|
||||||
} else if (GBDevice.ACTION_DEVICE_CHANGED.equals(action)) {
|
|
||||||
device = intent.getParcelableExtra(GBDevice.EXTRA_DEVICE);
|
device = intent.getParcelableExtra(GBDevice.EXTRA_DEVICE);
|
||||||
if (device != null) {
|
if (device != null) {
|
||||||
refreshBusyState(device);
|
refreshBusyState(device);
|
||||||
|
@ -154,7 +152,6 @@ public class FwAppInstallerActivity extends GBActivity implements InstallActivit
|
||||||
detailsListView.setAdapter(mDetailsItemAdapter);
|
detailsListView.setAdapter(mDetailsItemAdapter);
|
||||||
setInstallEnabled(false);
|
setInstallEnabled(false);
|
||||||
IntentFilter filter = new IntentFilter();
|
IntentFilter filter = new IntentFilter();
|
||||||
filter.addAction(GBApplication.ACTION_QUIT);
|
|
||||||
filter.addAction(GBDevice.ACTION_DEVICE_CHANGED);
|
filter.addAction(GBDevice.ACTION_DEVICE_CHANGED);
|
||||||
filter.addAction(GB.ACTION_DISPLAY_MESSAGE);
|
filter.addAction(GB.ACTION_DISPLAY_MESSAGE);
|
||||||
LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, filter);
|
LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, filter);
|
||||||
|
|
|
@ -17,44 +17,64 @@
|
||||||
package nodomain.freeyourgadget.gadgetbridge.activities;
|
package nodomain.freeyourgadget.gadgetbridge.activities;
|
||||||
|
|
||||||
|
|
||||||
|
import android.content.BroadcastReceiver;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.IntentFilter;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.LocaleList;
|
||||||
|
import android.support.v4.content.LocalBroadcastManager;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.devices.DeviceManager;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.util.AndroidUtils;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
|
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
|
||||||
|
|
||||||
|
|
||||||
public class GBActivity extends AppCompatActivity {
|
public class GBActivity extends AppCompatActivity {
|
||||||
private void setLanguage(String language) {
|
|
||||||
Locale locale;
|
|
||||||
if (language.equals("default")) {
|
|
||||||
locale = Locale.getDefault();
|
|
||||||
} else {
|
|
||||||
locale = new Locale(language);
|
|
||||||
}
|
|
||||||
Configuration config = new Configuration();
|
|
||||||
config.locale = locale;
|
|
||||||
|
|
||||||
// FIXME: I have no idea what I am doing
|
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
|
||||||
getApplicationContext().getResources().updateConfiguration(config, getApplicationContext().getResources().getDisplayMetrics());
|
@Override
|
||||||
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
String action = intent.getAction();
|
||||||
|
switch (action) {
|
||||||
|
case GBApplication.ACTION_LANGUAGE_CHANGE:
|
||||||
|
setLanguage(GBApplication.getLanguage());
|
||||||
|
break;
|
||||||
|
case GBApplication.ACTION_QUIT:
|
||||||
|
finish();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
private void setLanguage(Locale language) {
|
||||||
|
AndroidUtils.setLanguage(this, language);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
IntentFilter filterLocal = new IntentFilter();
|
||||||
|
filterLocal.addAction(GBApplication.ACTION_QUIT);
|
||||||
|
filterLocal.addAction(GBApplication.ACTION_LANGUAGE_CHANGE);
|
||||||
|
LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, filterLocal);
|
||||||
|
|
||||||
if (GBApplication.isDarkThemeEnabled()) {
|
if (GBApplication.isDarkThemeEnabled()) {
|
||||||
setTheme(R.style.GadgetbridgeThemeDark);
|
setTheme(R.style.GadgetbridgeThemeDark);
|
||||||
} else {
|
} else {
|
||||||
setTheme(R.style.GadgetbridgeTheme);
|
setTheme(R.style.GadgetbridgeTheme);
|
||||||
}
|
}
|
||||||
|
|
||||||
Prefs prefs = GBApplication.getPrefs();
|
|
||||||
String language = prefs.getString("language", "default");
|
|
||||||
setLanguage(language);
|
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onDestroy() {
|
||||||
|
LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver);
|
||||||
|
super.onDestroy();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -143,6 +143,26 @@ public class SettingsActivity extends AbstractSettingsActivity {
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
pref = findPreference("language");
|
||||||
|
pref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newVal) {
|
||||||
|
String newLang = newVal.toString();
|
||||||
|
try {
|
||||||
|
GBApplication.setLanguage(newLang, getBaseContext());
|
||||||
|
// recreate();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
GB.toast(getApplicationContext(),
|
||||||
|
"Error setting language: " + ex.getLocalizedMessage(),
|
||||||
|
Toast.LENGTH_LONG,
|
||||||
|
GB.ERROR,
|
||||||
|
ex);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
if (!GBApplication.isRunningMarshmallowOrLater()) {
|
if (!GBApplication.isRunningMarshmallowOrLater()) {
|
||||||
pref = findPreference("notification_filter");
|
pref = findPreference("notification_filter");
|
||||||
PreferenceCategory category = (PreferenceCategory) findPreference("pref_key_notifications");
|
PreferenceCategory category = (PreferenceCategory) findPreference("pref_key_notifications");
|
||||||
|
|
|
@ -16,12 +16,7 @@
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
package nodomain.freeyourgadget.gadgetbridge.activities;
|
package nodomain.freeyourgadget.gadgetbridge.activities;
|
||||||
|
|
||||||
import android.content.BroadcastReceiver;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.IntentFilter;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.content.LocalBroadcastManager;
|
|
||||||
import android.widget.SeekBar;
|
import android.widget.SeekBar;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
@ -33,17 +28,6 @@ import nodomain.freeyourgadget.gadgetbridge.R;
|
||||||
|
|
||||||
public class VibrationActivity extends GBActivity {
|
public class VibrationActivity extends GBActivity {
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(VibrationActivity.class);
|
private static final Logger LOG = LoggerFactory.getLogger(VibrationActivity.class);
|
||||||
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
|
|
||||||
@Override
|
|
||||||
public void onReceive(Context context, Intent intent) {
|
|
||||||
switch (intent.getAction()) {
|
|
||||||
case GBApplication.ACTION_QUIT: {
|
|
||||||
finish();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
private SeekBar seekBar;
|
private SeekBar seekBar;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -51,11 +35,6 @@ public class VibrationActivity extends GBActivity {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.activity_vibration);
|
setContentView(R.layout.activity_vibration);
|
||||||
|
|
||||||
IntentFilter filter = new IntentFilter();
|
|
||||||
filter.addAction(GBApplication.ACTION_QUIT);
|
|
||||||
LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, filter);
|
|
||||||
registerReceiver(mReceiver, filter);
|
|
||||||
|
|
||||||
seekBar = (SeekBar) findViewById(R.id.vibration_seekbar);
|
seekBar = (SeekBar) findViewById(R.id.vibration_seekbar);
|
||||||
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -77,11 +56,4 @@ public class VibrationActivity extends GBActivity {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onDestroy() {
|
|
||||||
super.onDestroy();
|
|
||||||
LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver);
|
|
||||||
unregisterReceiver(mReceiver);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,16 +18,12 @@
|
||||||
package nodomain.freeyourgadget.gadgetbridge.activities.appmanager;
|
package nodomain.freeyourgadget.gadgetbridge.activities.appmanager;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.BroadcastReceiver;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.design.widget.FloatingActionButton;
|
import android.support.design.widget.FloatingActionButton;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.app.FragmentManager;
|
import android.support.v4.app.FragmentManager;
|
||||||
import android.support.v4.app.NavUtils;
|
import android.support.v4.app.NavUtils;
|
||||||
import android.support.v4.content.LocalBroadcastManager;
|
|
||||||
import android.support.v4.view.ViewPager;
|
import android.support.v4.view.ViewPager;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
@ -44,7 +40,6 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.AbstractFragmentPagerAdapter;
|
import nodomain.freeyourgadget.gadgetbridge.activities.AbstractFragmentPagerAdapter;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.AbstractGBFragmentActivity;
|
import nodomain.freeyourgadget.gadgetbridge.activities.AbstractGBFragmentActivity;
|
||||||
|
@ -60,18 +55,6 @@ public class AppManagerActivity extends AbstractGBFragmentActivity {
|
||||||
|
|
||||||
private GBDevice mGBDevice = null;
|
private GBDevice mGBDevice = null;
|
||||||
|
|
||||||
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
|
|
||||||
@Override
|
|
||||||
public void onReceive(Context context, Intent intent) {
|
|
||||||
String action = intent.getAction();
|
|
||||||
switch (action) {
|
|
||||||
case GBApplication.ACTION_QUIT:
|
|
||||||
finish();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
public GBDevice getGBDevice() {
|
public GBDevice getGBDevice() {
|
||||||
return mGBDevice;
|
return mGBDevice;
|
||||||
}
|
}
|
||||||
|
@ -102,11 +85,6 @@ public class AppManagerActivity extends AbstractGBFragmentActivity {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
IntentFilter filterLocal = new IntentFilter();
|
|
||||||
filterLocal.addAction(GBApplication.ACTION_QUIT);
|
|
||||||
filterLocal.addAction(GBDevice.ACTION_DEVICE_CHANGED);
|
|
||||||
LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, filterLocal);
|
|
||||||
|
|
||||||
// Set up the ViewPager with the sections adapter.
|
// Set up the ViewPager with the sections adapter.
|
||||||
ViewPager viewPager = (ViewPager) findViewById(R.id.appmanager_pager);
|
ViewPager viewPager = (ViewPager) findViewById(R.id.appmanager_pager);
|
||||||
if (viewPager != null) {
|
if (viewPager != null) {
|
||||||
|
@ -217,10 +195,4 @@ public class AppManagerActivity extends AbstractGBFragmentActivity {
|
||||||
startActivity(startIntent);
|
startActivity(startIntent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onDestroy() {
|
|
||||||
LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver);
|
|
||||||
super.onDestroy();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -102,9 +102,6 @@ public class ChartsActivity extends AbstractGBFragmentActivity implements Charts
|
||||||
public void onReceive(Context context, Intent intent) {
|
public void onReceive(Context context, Intent intent) {
|
||||||
String action = intent.getAction();
|
String action = intent.getAction();
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case GBApplication.ACTION_QUIT:
|
|
||||||
finish();
|
|
||||||
break;
|
|
||||||
case GBDevice.ACTION_DEVICE_CHANGED:
|
case GBDevice.ACTION_DEVICE_CHANGED:
|
||||||
GBDevice dev = intent.getParcelableExtra(GBDevice.EXTRA_DEVICE);
|
GBDevice dev = intent.getParcelableExtra(GBDevice.EXTRA_DEVICE);
|
||||||
refreshBusyState(dev);
|
refreshBusyState(dev);
|
||||||
|
@ -136,7 +133,6 @@ public class ChartsActivity extends AbstractGBFragmentActivity implements Charts
|
||||||
initDates();
|
initDates();
|
||||||
|
|
||||||
IntentFilter filterLocal = new IntentFilter();
|
IntentFilter filterLocal = new IntentFilter();
|
||||||
filterLocal.addAction(GBApplication.ACTION_QUIT);
|
|
||||||
filterLocal.addAction(GBDevice.ACTION_DEVICE_CHANGED);
|
filterLocal.addAction(GBDevice.ACTION_DEVICE_CHANGED);
|
||||||
LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, filterLocal);
|
LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, filterLocal);
|
||||||
|
|
||||||
|
|
|
@ -16,12 +16,16 @@
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
package nodomain.freeyourgadget.gadgetbridge.util;
|
package nodomain.freeyourgadget.gadgetbridge.util;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.res.Configuration;
|
||||||
import android.os.ParcelUuid;
|
import android.os.ParcelUuid;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
import android.support.v4.content.LocalBroadcastManager;
|
import android.support.v4.content.LocalBroadcastManager;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
public class AndroidUtils {
|
public class AndroidUtils {
|
||||||
public static ParcelUuid[] toParcelUUids(Parcelable[] uuids) {
|
public static ParcelUuid[] toParcelUUids(Parcelable[] uuids) {
|
||||||
if (uuids == null) {
|
if (uuids == null) {
|
||||||
|
@ -61,4 +65,13 @@ public class AndroidUtils {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void setLanguage(Activity activity, Locale language) {
|
||||||
|
Configuration config = new Configuration();
|
||||||
|
config.setLocale(language);
|
||||||
|
|
||||||
|
// FIXME: I have no idea what I am doing
|
||||||
|
activity.getBaseContext().getResources().updateConfiguration(config, activity.getBaseContext().getResources().getDisplayMetrics());
|
||||||
|
activity.recreate();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue