mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2025-02-13 08:47:50 +01:00
new class to track devIDs (GCM and relay-assigned) separate from prefs
so easier to debug and don't get reset.
This commit is contained in:
parent
dfff282b25
commit
23f803bb98
1 changed files with 149 additions and 0 deletions
149
xwords4/android/XWords4/src/org/eehouse/android/xw4/DevID.java
Normal file
149
xwords4/android/XWords4/src/org/eehouse/android/xw4/DevID.java
Normal file
|
@ -0,0 +1,149 @@
|
|||
/* -*- compile-command: "find-and-ant.sh debug install"; -*- */
|
||||
/*
|
||||
* Copyright 2010 - 2015 by Eric House (xwords@eehouse.org). All rights
|
||||
* reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
package org.eehouse.android.xw4;
|
||||
|
||||
/* The relay issues an identifier for a registered device. It's a string
|
||||
* representation of a 32-bit hex number. When devices register, they pass
|
||||
* what's meant to be a unique identifier of their own. GCM-aware devices (for
|
||||
* which this was originally conceived) pass their GCM IDs (which can change,
|
||||
* and require re-registration). Other devices generate an ID however they
|
||||
* choose, or can pass "", meaning "I'm anonymous; just give me an ID based on
|
||||
* nothing."
|
||||
*/
|
||||
|
||||
import android.content.Context;
|
||||
import com.google.android.gcm.GCMRegistrar;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
public class DevID {
|
||||
|
||||
private static final String DEVID_KEY = "DevID.devid_key";
|
||||
private static final String DEVID_ACK_KEY = "key_relay_regid_ackd";
|
||||
private static final String GCM_REGVERS_KEY = "key_gcmvers_regid";
|
||||
|
||||
private static String s_relayDevID;
|
||||
private static int s_asInt;
|
||||
|
||||
// Called, likely on DEBUG builds only, when the relay hostname is
|
||||
// changed. DevIDs are invalid at that point.
|
||||
public static void hostChanged( Context context )
|
||||
{
|
||||
clearRelayDevID( context );
|
||||
RelayService.reset( context );
|
||||
}
|
||||
|
||||
public static int getRelayDevIDInt( Context context )
|
||||
{
|
||||
if ( 0 == s_asInt ) {
|
||||
String asStr = getRelayDevID( context );
|
||||
if ( null != asStr && 0 < asStr.length() ) {
|
||||
s_asInt = Integer.valueOf( asStr, 16 );
|
||||
}
|
||||
}
|
||||
return s_asInt;
|
||||
}
|
||||
|
||||
public static String getRelayDevID( Context context, boolean insistAckd )
|
||||
{
|
||||
String result = getRelayDevID( context );
|
||||
if ( insistAckd && 0 < result.length()
|
||||
&& ! DBUtils.getBoolFor( context, DEVID_ACK_KEY, false ) ) {
|
||||
result = null;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static String getRelayDevID( Context context )
|
||||
{
|
||||
if ( null == s_relayDevID ) {
|
||||
String asStr = DBUtils.getStringFor( context, DEVID_KEY, "" );
|
||||
// TRANSITIONAL: If it's not there, see if it's stored the old way
|
||||
if ( 0 == asStr.length() ) {
|
||||
asStr = XWPrefs.getPrefsString( context, R.string.key_relay_regid );
|
||||
}
|
||||
|
||||
if ( null != asStr && 0 != asStr.length() ) {
|
||||
s_relayDevID = asStr;
|
||||
}
|
||||
}
|
||||
DbgUtils.logdf( "DevID.getRelayDevID() => %s", s_relayDevID );
|
||||
return s_relayDevID;
|
||||
}
|
||||
|
||||
public static void setRelayDevID( Context context, String devID )
|
||||
{
|
||||
DbgUtils.logdf( "DevID.setRelayDevID()" );
|
||||
if ( BuildConfig.DEBUG ) {
|
||||
String oldID = getRelayDevID( context );
|
||||
if ( 0 < oldID.length() && ! devID.equals( oldID ) ) {
|
||||
DbgUtils.logf( "devID changing!!!: %s => %s", oldID, devID );
|
||||
Assert.fail();
|
||||
}
|
||||
}
|
||||
DBUtils.setStringFor( context, DEVID_KEY, devID );
|
||||
s_relayDevID = devID;
|
||||
|
||||
DBUtils.setBoolFor( context, DEVID_ACK_KEY, true );
|
||||
DbgUtils.printStack();
|
||||
}
|
||||
|
||||
public static void clearRelayDevID( Context context )
|
||||
{
|
||||
DbgUtils.logf( "DevID.clearRelayDevID()" );
|
||||
DBUtils.setStringFor( context, DEVID_KEY, "" );
|
||||
DbgUtils.printStack();
|
||||
}
|
||||
|
||||
public static void setGCMDevID( Context context, String devID )
|
||||
{
|
||||
int curVers = Utils.getAppVersion( context );
|
||||
DBUtils.setIntFor( context, GCM_REGVERS_KEY, curVers );
|
||||
DBUtils.setBoolFor( context, DEVID_ACK_KEY, false );
|
||||
}
|
||||
|
||||
public static String getGCMDevID( Context context )
|
||||
{
|
||||
int curVers = Utils.getAppVersion( context );
|
||||
int storedVers = DBUtils.getIntFor( context, GCM_REGVERS_KEY, 0 );
|
||||
// TRANSITIONAL
|
||||
if ( 0 == storedVers ) {
|
||||
storedVers = XWPrefs.getPrefsInt( context,
|
||||
R.string.key_gcmvers_regid, 0 );
|
||||
if ( 0 != storedVers ) {
|
||||
DBUtils.setIntFor( context, GCM_REGVERS_KEY, storedVers );
|
||||
}
|
||||
}
|
||||
|
||||
String result;
|
||||
if ( 0 != storedVers && storedVers < curVers ) {
|
||||
result = ""; // Don't trust what registrar has
|
||||
} else {
|
||||
result = GCMRegistrar.getRegistrationId( context );
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static void clearGCMDevID( Context context )
|
||||
{
|
||||
DBUtils.setBoolFor( context, DEVID_ACK_KEY, false );
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue