mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2025-02-14 20:47:54 +01:00
Merge branch 'android_branch' into android_translate
This commit is contained in:
commit
3c2d36c5d4
26 changed files with 379 additions and 690 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -38,6 +38,7 @@
|
||||||
work anyway.)</li>
|
work anyway.)</li>
|
||||||
<li>Don't open a closed group when moving games to it</li>
|
<li>Don't open a closed group when moving games to it</li>
|
||||||
<li>Fix occasional crash</li>
|
<li>Fix occasional crash</li>
|
||||||
|
<li>Switch from ant to gradle (dev. detail)</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<p>(The full changelog
|
<p>(The full changelog
|
||||||
|
|
|
@ -83,15 +83,8 @@ public class BoardDelegate extends DelegateBase
|
||||||
NFCUtils.NFCActor {
|
NFCUtils.NFCActor {
|
||||||
private static final String TAG = BoardDelegate.class.getSimpleName();
|
private static final String TAG = BoardDelegate.class.getSimpleName();
|
||||||
|
|
||||||
public static final String INTENT_KEY_CHAT = "chat";
|
|
||||||
|
|
||||||
private static final int SCREEN_ON_TIME = 10 * 60 * 1000; // 10 mins
|
private static final int SCREEN_ON_TIME = 10 * 60 * 1000; // 10 mins
|
||||||
|
|
||||||
private static final String DLG_TITLE = "DLG_TITLE";
|
|
||||||
private static final String DLG_TITLESTR = "DLG_TITLESTR";
|
|
||||||
private static final String DLG_BYTES = "DLG_BYTES";
|
|
||||||
private static final String ROOM = "ROOM";
|
|
||||||
private static final String PWDNAME = "PWDNAME";
|
|
||||||
private static final String SAVE_MYSIS = TAG + "/MYSIS";
|
private static final String SAVE_MYSIS = TAG + "/MYSIS";
|
||||||
|
|
||||||
private Activity m_activity;
|
private Activity m_activity;
|
||||||
|
@ -617,7 +610,6 @@ public class BoardDelegate extends DelegateBase
|
||||||
{
|
{
|
||||||
super.onResume();
|
super.onResume();
|
||||||
doResume( false );
|
doResume( false );
|
||||||
checkAddDualpaneExpl();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void onPause()
|
protected void onPause()
|
||||||
|
@ -736,14 +728,6 @@ public class BoardDelegate extends DelegateBase
|
||||||
showInviteChoicesThen( Action.LAUNCH_INVITE_ACTION, info );
|
showInviteChoicesThen( Action.LAUNCH_INVITE_ACTION, info );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void orientationChanged()
|
|
||||||
{
|
|
||||||
Log.d( TAG, "BoardDelegate.orientationChanged()" );
|
|
||||||
initToolbar();
|
|
||||||
m_view.orientationChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setTitle()
|
protected void setTitle()
|
||||||
{
|
{
|
||||||
|
@ -1443,8 +1427,6 @@ public class BoardDelegate extends DelegateBase
|
||||||
data = nli.makeLaunchJSON();
|
data = nli.makeLaunchJSON();
|
||||||
}
|
}
|
||||||
if ( null != data ) {
|
if ( null != data ) {
|
||||||
removeDialog( DlgID.CONFIRM_THEN );
|
|
||||||
|
|
||||||
recordInviteSent( InviteMeans.NFC, null );
|
recordInviteSent( InviteMeans.NFC, null );
|
||||||
}
|
}
|
||||||
return data;
|
return data;
|
||||||
|
@ -2822,29 +2804,4 @@ public class BoardDelegate extends DelegateBase
|
||||||
m_jniThread.handle( cmd, args );
|
m_jniThread.handle( cmd, args );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If I'm upgrading and running this for the first time show an
|
|
||||||
// explanation about the new dualpane feature
|
|
||||||
//
|
|
||||||
// TODO remove a few weeks after shipping a version that includes it
|
|
||||||
private static boolean s_dpShown = false;
|
|
||||||
private void checkAddDualpaneExpl()
|
|
||||||
{
|
|
||||||
if ( !s_dpShown ) {
|
|
||||||
s_dpShown = true;
|
|
||||||
// Am I a tablet AND is that because my size says so rather than
|
|
||||||
// my having overridden it
|
|
||||||
if ( XWPrefs.getIsTablet( m_activity )
|
|
||||||
&& getString(R.string.force_tablet_default)
|
|
||||||
.equals(XWPrefs.getPrefsString(m_activity,
|
|
||||||
R.string.key_force_tablet))
|
|
||||||
&& !Utils.onFirstVersion(m_activity ) ) {
|
|
||||||
makeNotAgainBuilder( R.string.invite_dualpane,
|
|
||||||
R.string.key_notagain_dualpane )
|
|
||||||
.setActionPair(new ActionPair(Action.DISABLE_DUALPANE,
|
|
||||||
R.string.disable_dualpane))
|
|
||||||
.show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} // class BoardDelegate
|
} // class BoardDelegate
|
||||||
|
|
|
@ -50,7 +50,7 @@ public class DBAlert extends XWDialogFragment {
|
||||||
if ( null != obj && !(obj instanceof Serializable) ) {
|
if ( null != obj && !(obj instanceof Serializable) ) {
|
||||||
Log.d( TAG, "OOPS: %s not Serializable",
|
Log.d( TAG, "OOPS: %s not Serializable",
|
||||||
obj.getClass().getName() );
|
obj.getClass().getName() );
|
||||||
// Assert.fail();
|
Assert.assertFalse( BuildConfig.DEBUG );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,7 +84,7 @@ public class DelegateBase implements DlgClickNotify,
|
||||||
Assert.assertTrue( 0 < menuID );
|
Assert.assertTrue( 0 < menuID );
|
||||||
m_delegator = delegator;
|
m_delegator = delegator;
|
||||||
m_activity = delegator.getActivity();
|
m_activity = delegator.getActivity();
|
||||||
m_dlgDelegate = new DlgDelegate( m_activity, this, this, bundle );
|
m_dlgDelegate = new DlgDelegate( m_activity, this, this );
|
||||||
m_layoutID = layoutID;
|
m_layoutID = layoutID;
|
||||||
m_optionsMenuID = menuID;
|
m_optionsMenuID = menuID;
|
||||||
LocUtils.xlateTitle( m_activity );
|
LocUtils.xlateTitle( m_activity );
|
||||||
|
@ -100,12 +100,10 @@ public class DelegateBase implements DlgClickNotify,
|
||||||
protected void onCreateContextMenu( ContextMenu menu, View view,
|
protected void onCreateContextMenu( ContextMenu menu, View view,
|
||||||
ContextMenuInfo menuInfo ) {}
|
ContextMenuInfo menuInfo ) {}
|
||||||
protected boolean onContextItemSelected( MenuItem item ) { return false; }
|
protected boolean onContextItemSelected( MenuItem item ) { return false; }
|
||||||
|
protected void onStop() {}
|
||||||
protected void onDestroy() {}
|
protected void onDestroy() {}
|
||||||
protected void onWindowFocusChanged( boolean hasFocus ) {}
|
protected void onWindowFocusChanged( boolean hasFocus ) {}
|
||||||
protected boolean handleBackPressed() { return false; }
|
protected boolean handleBackPressed() { return false; }
|
||||||
public void orientationChanged() {}
|
|
||||||
protected Dialog onCreateDialog( int id ) { return null; }
|
|
||||||
protected void prepareDialog( DlgID dlgId, Dialog dialog ) {}
|
|
||||||
|
|
||||||
protected void requestWindowFeature( int feature ) {}
|
protected void requestWindowFeature( int feature ) {}
|
||||||
|
|
||||||
|
@ -156,16 +154,6 @@ public class DelegateBase implements DlgClickNotify,
|
||||||
XWService.setListener( null );
|
XWService.setListener( null );
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void onStop()
|
|
||||||
{
|
|
||||||
// Alerts disappear on their own if not in dualpane mode
|
|
||||||
if ( false
|
|
||||||
&& m_activity instanceof MainActivity
|
|
||||||
&& ((MainActivity)m_activity).inDPMode() ) {
|
|
||||||
DlgDelegate.closeAlerts( m_activity, this );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected DelegateBase curThis()
|
protected DelegateBase curThis()
|
||||||
{
|
{
|
||||||
DelegateBase result = null;
|
DelegateBase result = null;
|
||||||
|
@ -424,15 +412,11 @@ public class DelegateBase implements DlgClickNotify,
|
||||||
return cbx.isChecked();
|
return cbx.isChecked();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void showDialog( DlgID dlgID )
|
|
||||||
{
|
|
||||||
m_dlgDelegate.showDialog( dlgID );
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Dialog makeDialog( DBAlert alert, Object[] params )
|
protected Dialog makeDialog( DBAlert alert, Object[] params )
|
||||||
{
|
{
|
||||||
DlgID dlgID = alert.getDlgID();
|
DlgID dlgID = alert.getDlgID();
|
||||||
Log.d( TAG, "makeDialog(): not handling %s", dlgID.toString() );
|
Log.d( TAG, "%s.makeDialog(): not handling %s", getClass().getSimpleName(),
|
||||||
|
dlgID.toString() );
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -477,32 +461,11 @@ public class DelegateBase implements DlgClickNotify,
|
||||||
DbgUtils.assertOnUIThread();
|
DbgUtils.assertOnUIThread();
|
||||||
if ( m_activity instanceof XWActivity ) {
|
if ( m_activity instanceof XWActivity ) {
|
||||||
((XWActivity)m_activity).show( df );
|
((XWActivity)m_activity).show( df );
|
||||||
} else if ( m_activity instanceof PrefsActivity ) {
|
|
||||||
((PrefsActivity)m_activity).show( df );
|
|
||||||
} else {
|
} else {
|
||||||
Assert.assertTrue( !BuildConfig.DEBUG );
|
Assert.assertTrue( !BuildConfig.DEBUG );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void removeDialog( DlgID dlgID )
|
|
||||||
{
|
|
||||||
removeDialog( dlgID.ordinal() );
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void dismissDialog( DlgID dlgID )
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
m_activity.dismissDialog( dlgID.ordinal() );
|
|
||||||
} catch ( Exception ex ) {
|
|
||||||
// Log.ex( ex );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void removeDialog( int id )
|
|
||||||
{
|
|
||||||
m_activity.removeDialog( id );
|
|
||||||
}
|
|
||||||
|
|
||||||
protected AlertDialog.Builder makeAlertBuilder()
|
protected AlertDialog.Builder makeAlertBuilder()
|
||||||
{
|
{
|
||||||
return LocUtils.makeAlertBuilder( m_activity );
|
return LocUtils.makeAlertBuilder( m_activity );
|
||||||
|
|
|
@ -312,7 +312,7 @@ public class DictBrowseDelegate extends DelegateBase
|
||||||
finish();
|
finish();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Assert.assertTrue( !BuildConfig.DEBUG );
|
Assert.assertFalse( BuildConfig.DEBUG );
|
||||||
}
|
}
|
||||||
return handled;
|
return handled;
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,28 +28,13 @@ import android.app.ProgressDialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface.OnCancelListener;
|
import android.content.DialogInterface.OnCancelListener;
|
||||||
import android.content.DialogInterface.OnClickListener;
|
import android.content.DialogInterface.OnClickListener;
|
||||||
import android.content.DialogInterface;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.AdapterView.OnItemSelectedListener;
|
|
||||||
import android.widget.AdapterView;
|
|
||||||
import android.widget.Button;
|
|
||||||
import android.widget.Spinner;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import junit.framework.Assert;
|
import junit.framework.Assert;
|
||||||
|
|
||||||
import org.eehouse.android.xw4.DBUtils.SentInvitesInfo;
|
import org.eehouse.android.xw4.DBUtils.SentInvitesInfo;
|
||||||
import org.eehouse.android.xw4.loc.LocUtils;
|
|
||||||
|
|
||||||
import java.lang.ref.WeakReference;
|
|
||||||
import java.text.DateFormat;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class DlgDelegate {
|
public class DlgDelegate {
|
||||||
private static final String TAG = DlgDelegate.class.getSimpleName();
|
private static final String TAG = DlgDelegate.class.getSimpleName();
|
||||||
|
@ -288,9 +273,6 @@ public class DlgDelegate {
|
||||||
public static final int NFC_BTN = AlertDialog.BUTTON_NEUTRAL;
|
public static final int NFC_BTN = AlertDialog.BUTTON_NEUTRAL;
|
||||||
public static final int DISMISS_BUTTON = 0;
|
public static final int DISMISS_BUTTON = 0;
|
||||||
|
|
||||||
private static final String IDS = "IDS";
|
|
||||||
private static final String STATE_KEYF = "STATE_%d";
|
|
||||||
|
|
||||||
public interface DlgClickNotify {
|
public interface DlgClickNotify {
|
||||||
// These are stored in the INVITES table. Don't change order
|
// These are stored in the INVITES table. Don't change order
|
||||||
// gratuitously
|
// gratuitously
|
||||||
|
@ -311,8 +293,6 @@ public class DlgDelegate {
|
||||||
NotAgainBuilder makeNotAgainBuilder( int msgID, int prefsKey );
|
NotAgainBuilder makeNotAgainBuilder( int msgID, int prefsKey );
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Map<DlgID, WeakReference<DelegateBase>> s_pendings
|
|
||||||
= new HashMap<DlgID, WeakReference<DelegateBase>>();
|
|
||||||
private Activity m_activity;
|
private Activity m_activity;
|
||||||
private DelegateBase m_dlgt;
|
private DelegateBase m_dlgt;
|
||||||
private DlgClickNotify m_clickCallback;
|
private DlgClickNotify m_clickCallback;
|
||||||
|
@ -320,52 +300,13 @@ public class DlgDelegate {
|
||||||
private ProgressDialog m_progress;
|
private ProgressDialog m_progress;
|
||||||
private Handler m_handler;
|
private Handler m_handler;
|
||||||
|
|
||||||
private HashMap<DlgID, DlgState> m_dlgStates;
|
|
||||||
|
|
||||||
public DlgDelegate( Activity activity, DelegateBase dlgt,
|
public DlgDelegate( Activity activity, DelegateBase dlgt,
|
||||||
DlgClickNotify callback, Bundle bundle )
|
DlgClickNotify callback )
|
||||||
{
|
{
|
||||||
m_activity = activity;
|
m_activity = activity;
|
||||||
m_dlgt = dlgt;
|
m_dlgt = dlgt;
|
||||||
m_clickCallback = callback;
|
m_clickCallback = callback;
|
||||||
m_handler = new Handler();
|
m_handler = new Handler();
|
||||||
m_dlgStates = new HashMap<DlgID,DlgState>();
|
|
||||||
|
|
||||||
if ( null != bundle ) {
|
|
||||||
int[] ids = bundle.getIntArray( IDS );
|
|
||||||
if ( null != ids ) {
|
|
||||||
for ( int id : ids ) {
|
|
||||||
String key = String.format( STATE_KEYF, id );
|
|
||||||
addState( (DlgState)bundle.getParcelable( key ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onSaveInstanceState( Bundle outState )
|
|
||||||
{
|
|
||||||
int[] ids = new int[m_dlgStates.size()];
|
|
||||||
if ( 0 < ids.length ) {
|
|
||||||
int indx = 0;
|
|
||||||
Iterator<DlgState> iter = m_dlgStates.values().iterator();
|
|
||||||
while ( iter.hasNext() ) {
|
|
||||||
DlgState state = iter.next();
|
|
||||||
int id = state.m_id.ordinal();
|
|
||||||
String key = String.format( STATE_KEYF, id );
|
|
||||||
outState.putParcelable( key, state );
|
|
||||||
ids[indx++] = id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
outState.putIntArray( IDS, ids );
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void showDialog( DlgID dlgID )
|
|
||||||
{
|
|
||||||
// DbgUtils.logf( "showDialog(%s)", dlgID.toString() );
|
|
||||||
if ( !m_activity.isFinishing() ) {
|
|
||||||
s_pendings.put( dlgID, new WeakReference<DelegateBase>(m_dlgt) );
|
|
||||||
m_activity.showDialog( dlgID.ordinal() );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showOKOnlyDialogThen( String msg, Action action,
|
private void showOKOnlyDialogThen( String msg, Action action,
|
||||||
|
@ -544,80 +485,6 @@ public class DlgDelegate {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private DlgState findForID( DlgID dlgID )
|
|
||||||
{
|
|
||||||
DlgState state = m_dlgStates.get( dlgID );
|
|
||||||
// DbgUtils.logf( "findForID(%d)=>%H", id, state );
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void dropState( DlgState state )
|
|
||||||
{
|
|
||||||
int nDlgs = m_dlgStates.size();
|
|
||||||
Assert.assertNotNull( state );
|
|
||||||
// Assert.assertTrue( state == m_dlgStates.get( state.m_id ) );
|
|
||||||
m_dlgStates.remove( state.m_id );
|
|
||||||
// DbgUtils.logf( "dropState: active dialogs now %d from %d ",
|
|
||||||
// m_dlgStates.size(), nDlgs );
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addState( DlgState state )
|
|
||||||
{
|
|
||||||
// I'm getting serialization failures on devices pointing at
|
|
||||||
// DlgState but the code below says the object's fine (as it
|
|
||||||
// should be.) Just to have a record....
|
|
||||||
//
|
|
||||||
// Bundle bundle = new Bundle();
|
|
||||||
// DbgUtils.logf( "addState: testing serializable" );
|
|
||||||
// bundle.putSerializable( "foo", state );
|
|
||||||
// state = (DlgState)bundle.getSerializable( "foo" );
|
|
||||||
// DbgUtils.logf( "addState: serializable is ok" );
|
|
||||||
|
|
||||||
m_dlgStates.put( state.m_id, state );
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Dialog onCreateDialog( int id )
|
|
||||||
{
|
|
||||||
Dialog result = null;
|
|
||||||
DlgID dlgID = DlgID.values()[id];
|
|
||||||
WeakReference<DelegateBase> ref = s_pendings.get( dlgID );
|
|
||||||
if ( null != ref ) {
|
|
||||||
DelegateBase dlgt = ref.get();
|
|
||||||
if ( null != dlgt ) {
|
|
||||||
result = dlgt.onCreateDialog( id );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void onPrepareDialog( int id, Dialog dialog )
|
|
||||||
{
|
|
||||||
DlgID dlgID = DlgID.values()[id];
|
|
||||||
WeakReference<DelegateBase> ref = s_pendings.get( dlgID );
|
|
||||||
DelegateBase dlgt = ref.get();
|
|
||||||
if ( null != dlgt ) {
|
|
||||||
dlgt.prepareDialog( dlgID, dialog );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected static void closeAlerts( Activity activity, DelegateBase base )
|
|
||||||
{
|
|
||||||
DbgUtils.assertOnUIThread();
|
|
||||||
Iterator<DlgID> iter = s_pendings.keySet().iterator();
|
|
||||||
while ( iter.hasNext() ) {
|
|
||||||
DlgID dlgID = iter.next();
|
|
||||||
DelegateBase oneBase = s_pendings.get( dlgID ).get();
|
|
||||||
if ( null == oneBase ) {
|
|
||||||
iter.remove(); // no point in keeping it
|
|
||||||
} else if ( base.equals( oneBase ) ) {
|
|
||||||
Log.d( TAG, "removing alert %s for %s", dlgID.toString(),
|
|
||||||
oneBase.toString() );
|
|
||||||
activity.removeDialog( dlgID.ordinal() );
|
|
||||||
iter.remove(); // no point in keeping this either
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getString( int id, Object... params )
|
private String getString( int id, Object... params )
|
||||||
{
|
{
|
||||||
return m_dlgt.getString( id, params );
|
return m_dlgt.getString( id, params );
|
||||||
|
|
|
@ -61,18 +61,6 @@ public class DualpaneDelegate extends DelegateBase {
|
||||||
return dialog;
|
return dialog;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Dialog onCreateDialog( int id )
|
|
||||||
{
|
|
||||||
return DlgDelegate.onCreateDialog( id );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void prepareDialog( DlgID dlgId, Dialog dialog )
|
|
||||||
{
|
|
||||||
DlgDelegate.onPrepareDialog( dlgId.ordinal(), dialog );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void handleNewIntent( Intent intent )
|
protected void handleNewIntent( Intent intent )
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,309 +0,0 @@
|
||||||
// /* -*- compile-command: "find-and-gradle.sh installXw4Debug"; -*- */
|
|
||||||
// /*
|
|
||||||
// * Copyright 2014-2016 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;
|
|
||||||
|
|
||||||
// import android.graphics.Rect;
|
|
||||||
// import android.app.Dialog;
|
|
||||||
// import android.content.res.Configuration;
|
|
||||||
// import android.os.Bundle;
|
|
||||||
// import android.support.v4.app.Fragment;
|
|
||||||
// import android.support.v4.app.FragmentActivity;
|
|
||||||
// import android.support.v4.app.FragmentManager;
|
|
||||||
// import android.support.v4.app.FragmentManager.BackStackEntry;
|
|
||||||
// import android.support.v4.app.FragmentTransaction;
|
|
||||||
// import android.view.View;
|
|
||||||
// import android.widget.FrameLayout;
|
|
||||||
// import android.widget.LinearLayout.LayoutParams;
|
|
||||||
// import android.widget.LinearLayout;
|
|
||||||
// import android.widget.LinearLayout;
|
|
||||||
|
|
||||||
// import junit.framework.Assert;
|
|
||||||
|
|
||||||
// public class FragActivity extends FragmentActivity
|
|
||||||
// implements FragmentManager.OnBackStackChangedListener {
|
|
||||||
|
|
||||||
// private static final int MAX_PANES_LANDSCAPE = 3;
|
|
||||||
|
|
||||||
// // public interface OrientChangeListener {
|
|
||||||
// // void orientationChanged();
|
|
||||||
// // }
|
|
||||||
|
|
||||||
// private static FragActivity s_this;
|
|
||||||
|
|
||||||
// private LinearLayout m_root;
|
|
||||||
// private int m_nextID = 0x00FFFFFF;
|
|
||||||
// private int m_maxPanes;
|
|
||||||
// private Boolean m_isPortrait;
|
|
||||||
|
|
||||||
// @Override
|
|
||||||
// public void onCreate( Bundle savedInstanceState )
|
|
||||||
// {
|
|
||||||
// s_this = this;
|
|
||||||
// super.onCreate( savedInstanceState );
|
|
||||||
// setContentView( R.layout.dualcontainer );
|
|
||||||
|
|
||||||
// m_root = (LinearLayout)findViewById( R.id.main_container );
|
|
||||||
// getSupportFragmentManager().addOnBackStackChangedListener( this );
|
|
||||||
|
|
||||||
// m_maxPanes = maxPanes();
|
|
||||||
|
|
||||||
// // Nothing to do if we're restarting
|
|
||||||
// if ( savedInstanceState == null ) {
|
|
||||||
// // In case this activity was started with special instructions from an Intent,
|
|
||||||
// // pass the Intent's extras to the fragment as arguments
|
|
||||||
// addFragmentImpl( new GamesListFrag(), getIntent().getExtras(), null );
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// @Override
|
|
||||||
// public void onBackPressed()
|
|
||||||
// {
|
|
||||||
// DbgUtils.logf( "FragActivity.onBackPressed()" );
|
|
||||||
// super.onBackPressed();
|
|
||||||
// }
|
|
||||||
|
|
||||||
// @Override
|
|
||||||
// public void onConfigurationChanged( Configuration newConfig )
|
|
||||||
// {
|
|
||||||
// Rect rect = new Rect();
|
|
||||||
// m_root.getWindowVisibleDisplayFrame( rect );
|
|
||||||
|
|
||||||
// boolean isPortrait
|
|
||||||
// = Configuration.ORIENTATION_PORTRAIT == newConfig.orientation;
|
|
||||||
// DbgUtils.logf( "FragActivity.onConfigurationChanged(isPortrait=%b)",
|
|
||||||
// isPortrait );
|
|
||||||
// m_isPortrait = isPortrait;
|
|
||||||
// if ( isPortrait != (rect.width() <= rect.height()) ) {
|
|
||||||
// Log.df( "FragActivity.onConfigurationChanged(): isPortrait:"
|
|
||||||
// + " %b; width: %d; height: %d",
|
|
||||||
// isPortrait, rect.width(), rect.height() );
|
|
||||||
// }
|
|
||||||
// int maxPanes = isPortrait? 1 : MAX_PANES_LANDSCAPE;
|
|
||||||
// if ( m_maxPanes != maxPanes ) {
|
|
||||||
// m_maxPanes = maxPanes;
|
|
||||||
// setVisiblePanes();
|
|
||||||
// }
|
|
||||||
// tellOrientationChanged();
|
|
||||||
// super.onConfigurationChanged( newConfig );
|
|
||||||
// }
|
|
||||||
|
|
||||||
// protected void getFragmentDims( int[] dims )
|
|
||||||
// {
|
|
||||||
// Rect rect = new Rect();
|
|
||||||
// m_root.getWindowVisibleDisplayFrame( rect );
|
|
||||||
// int width = rect.width();
|
|
||||||
// int height = rect.height();
|
|
||||||
// if ( null != m_isPortrait && m_isPortrait && height < width ) {
|
|
||||||
// int tmp = width;
|
|
||||||
// width = height;
|
|
||||||
// height = tmp;
|
|
||||||
// }
|
|
||||||
// dims[0] = width / Math.min( m_maxPanes, m_root.getChildCount() );
|
|
||||||
// dims[1] = height;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// @Override
|
|
||||||
// protected Dialog onCreateDialog( int id )
|
|
||||||
// {
|
|
||||||
// return DlgDelegate.onCreateDialog( id );
|
|
||||||
// }
|
|
||||||
|
|
||||||
// @Override
|
|
||||||
// protected void onPrepareDialog( int id, Dialog dialog )
|
|
||||||
// {
|
|
||||||
// DlgDelegate.onPrepareDialog( id, dialog );
|
|
||||||
// }
|
|
||||||
|
|
||||||
// //////////////////////////////////////////////////////////////////////
|
|
||||||
// // FragmentManager.OnBackStackChangedListener
|
|
||||||
// //////////////////////////////////////////////////////////////////////
|
|
||||||
// public void onBackStackChanged()
|
|
||||||
// {
|
|
||||||
// DbgUtils.logf( "FragActivity.onBackStackChanged()" );
|
|
||||||
// // make sure the right-most are visible
|
|
||||||
// int fragCount = getSupportFragmentManager().getBackStackEntryCount();
|
|
||||||
// if ( 0 == fragCount ) {
|
|
||||||
// finish();
|
|
||||||
// } else if ( fragCount == m_root.getChildCount() - 1 ) {
|
|
||||||
// m_root.removeViewAt( fragCount );
|
|
||||||
// setVisiblePanes();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // public void launchDictFrag( Bundle args )
|
|
||||||
// // {
|
|
||||||
// // // DictBrowseFrag dbf = new DictBrowseFrag();
|
|
||||||
// // // dbf.setArguments( args );
|
|
||||||
// // // addFragment( dbf );
|
|
||||||
// // }
|
|
||||||
|
|
||||||
// protected void finishFragment()
|
|
||||||
// {
|
|
||||||
// popFragment( null );
|
|
||||||
// }
|
|
||||||
|
|
||||||
// protected void popFragment( Fragment frag )
|
|
||||||
// {
|
|
||||||
// getSupportFragmentManager().popBackStack();
|
|
||||||
// }
|
|
||||||
|
|
||||||
// private void addFragmentImpl( Fragment fragment, Bundle bundle,
|
|
||||||
// Delegator parent )
|
|
||||||
// {
|
|
||||||
// fragment.setArguments( bundle );
|
|
||||||
// addFragmentImpl( fragment, parent );
|
|
||||||
// }
|
|
||||||
|
|
||||||
// private void addFragmentImpl( Fragment fragment, Delegator delegator )
|
|
||||||
// {
|
|
||||||
// String newName = fragment.getClass().getName();
|
|
||||||
// boolean replace = false;
|
|
||||||
// FragmentManager fm = getSupportFragmentManager();
|
|
||||||
// int fragCount = fm.getBackStackEntryCount();
|
|
||||||
// int containerCount = m_root.getChildCount();
|
|
||||||
// DbgUtils.logf( "fragCount: %d; containerCount: %d", fragCount, containerCount );
|
|
||||||
// // Assert.assertTrue( fragCount == containerCount );
|
|
||||||
|
|
||||||
// // Replace IF we're adding something of the same class at right OR if
|
|
||||||
// // we're adding something with the existing left pane as its parent
|
|
||||||
// // (delegator)
|
|
||||||
// if ( 0 < fragCount ) {
|
|
||||||
// FragmentManager.BackStackEntry entry = fm.getBackStackEntryAt( fragCount - 1 );
|
|
||||||
// String curName = entry.getName();
|
|
||||||
// DbgUtils.logf( "name of last entry: %s", curName );
|
|
||||||
// replace = curName.equals( newName );
|
|
||||||
|
|
||||||
// if ( !replace && 1 < fragCount ) {
|
|
||||||
// entry = fm.getBackStackEntryAt( fragCount - 2 );
|
|
||||||
// curName = entry.getName();
|
|
||||||
// String delName = delegator.getClass().getName();
|
|
||||||
// DbgUtils.logf( "comparing %s, %s", curName, delName );
|
|
||||||
// replace = curName.equals( delName );
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if ( replace ) {
|
|
||||||
// fm.popBackStack();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // Replace doesn't seem to work with generated IDs, so we'll create a
|
|
||||||
// // new FrameLayout each time. If we're replacing, we'll replace the
|
|
||||||
// // current rightmost FrameLayout. Otherwise we'll add a new one.
|
|
||||||
// FrameLayout cont = new FrameLayout( this );
|
|
||||||
// cont.setLayoutParams( new LayoutParams(0, LayoutParams.MATCH_PARENT, 1.0f) );
|
|
||||||
// int id = --m_nextID;
|
|
||||||
// cont.setId( id );
|
|
||||||
// m_root.addView( cont, replace ? containerCount - 1 : containerCount );
|
|
||||||
|
|
||||||
// if ( !replace && containerCount >= m_maxPanes ) {
|
|
||||||
// int indx = containerCount - m_maxPanes;
|
|
||||||
// View child = m_root.getChildAt( indx );
|
|
||||||
// child.setVisibility( View.GONE );
|
|
||||||
|
|
||||||
// setMenuVisibility( child, false );
|
|
||||||
|
|
||||||
// DbgUtils.logf( "hiding %dth container", indx );
|
|
||||||
// }
|
|
||||||
|
|
||||||
// fm.beginTransaction()
|
|
||||||
// .add( id, fragment )
|
|
||||||
// .addToBackStack( newName )
|
|
||||||
// .commit();
|
|
||||||
// // fm.executePendingTransactions();
|
|
||||||
// }
|
|
||||||
|
|
||||||
// private void setVisiblePanes()
|
|
||||||
// {
|
|
||||||
// // hide all but the right-most m_maxPanes children
|
|
||||||
// int nPanes = m_root.getChildCount();
|
|
||||||
// for ( int ii = 0; ii < nPanes; ++ii ) {
|
|
||||||
// View child = m_root.getChildAt( ii );
|
|
||||||
// boolean visible = ii >= nPanes - m_maxPanes;
|
|
||||||
// DbgUtils.logf( "pane %d: visible=%b", ii, visible );
|
|
||||||
// child.setVisibility( visible ? View.VISIBLE : View.GONE );
|
|
||||||
// setMenuVisibility( child, visible );
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// private void setMenuVisibility( View cont, boolean visible )
|
|
||||||
// {
|
|
||||||
// FrameLayout layout = (FrameLayout)cont;
|
|
||||||
// FragmentManager fm = getSupportFragmentManager();
|
|
||||||
// int hidingId = layout.getId();
|
|
||||||
// Fragment frag = fm.findFragmentById( hidingId );
|
|
||||||
// if ( null != frag ) { // hasn't been popped?
|
|
||||||
// frag.setMenuVisibility( visible );
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // Walk all Fragment children and if they care notify of change.
|
|
||||||
// private void tellOrientationChanged()
|
|
||||||
// {
|
|
||||||
// FragmentManager fm = getSupportFragmentManager();
|
|
||||||
// int nPanes = m_root.getChildCount();
|
|
||||||
// for ( int ii = 0; ii < nPanes; ++ii ) {
|
|
||||||
// FrameLayout frame = (FrameLayout)m_root.getChildAt( ii );
|
|
||||||
// int id = frame.getId();
|
|
||||||
// Fragment frag = fm.findFragmentById( id );
|
|
||||||
// if ( null == frag ) {
|
|
||||||
// DbgUtils.logf( "tellOrienationChanged: NO FRAG at %d, id=%d", ii, id );
|
|
||||||
// } else if ( frag instanceof XWFragment ) {
|
|
||||||
// ((XWFragment)frag).getDelegate().orientationChanged();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// private int maxPanes()
|
|
||||||
// {
|
|
||||||
// int result;
|
|
||||||
// int orientation = getResources().getConfiguration().orientation;
|
|
||||||
// if ( XWPrefs.getIsTablet( this )
|
|
||||||
// && Configuration.ORIENTATION_LANDSCAPE == orientation ) {
|
|
||||||
// result = 2;
|
|
||||||
// } else {
|
|
||||||
// result = 1;
|
|
||||||
// }
|
|
||||||
// return result;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// private static FragActivity getThis()
|
|
||||||
// {
|
|
||||||
// Assert.assertNotNull( s_this );
|
|
||||||
// return s_this;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// public static void addFragment( Fragment fragment, Bundle bundle )
|
|
||||||
// {
|
|
||||||
// addFragment( fragment, bundle, null );
|
|
||||||
// }
|
|
||||||
|
|
||||||
// public static void addFragment( Fragment fragment, Bundle bundle,
|
|
||||||
// Delegator parent )
|
|
||||||
// {
|
|
||||||
// getThis().addFragmentImpl( fragment, bundle, parent );
|
|
||||||
// }
|
|
||||||
|
|
||||||
// public static void addFragmentForResult( Fragment fragment, Bundle bundle,
|
|
||||||
// RequestCode requestCode, Delegator parent )
|
|
||||||
// {
|
|
||||||
// getThis().addFragmentImpl( fragment, bundle, parent );
|
|
||||||
// }
|
|
||||||
// }
|
|
|
@ -929,20 +929,6 @@ public class GamesListDelegate extends ListDelegateBase
|
||||||
.setEnabled( 0 <= m_mySIS.groupSelItem );
|
.setEnabled( 0 <= m_mySIS.groupSelItem );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void prepareDialog( DlgID dlgID, Dialog dialog )
|
|
||||||
{
|
|
||||||
Assert.fail();
|
|
||||||
/*
|
|
||||||
AlertDialog ad = (AlertDialog)dialog;
|
|
||||||
switch( dlgID ) {
|
|
||||||
case CHANGE_GROUP:
|
|
||||||
ad.getButton( AlertDialog.BUTTON_POSITIVE ).setEnabled( false );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void init( Bundle savedInstanceState )
|
protected void init( Bundle savedInstanceState )
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
/* -*- compile-command: "find-and-gradle.sh installXw4Debug"; -*- */
|
/* -*- compile-command: "find-and-gradle.sh installXw4Debug"; -*- */
|
||||||
/*
|
/*
|
||||||
* Copyright 2009-2010 by Eric House (xwords@eehouse.org). All
|
* Copyright 2017 by Eric House (xwords@eehouse.org). All rights reserved.
|
||||||
* rights reserved.
|
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License as
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
@ -21,16 +20,11 @@
|
||||||
package org.eehouse.android.xw4;
|
package org.eehouse.android.xw4;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.app.Activity;
|
|
||||||
import android.content.Intent;
|
|
||||||
|
|
||||||
public class HostActivity extends XWActivity {
|
public class HostActivity extends XWActivity {
|
||||||
private HostDelegate m_dlgt;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate( Bundle sis ) {
|
public void onCreate( Bundle sis ) {
|
||||||
m_dlgt = new HostDelegate( this, sis );
|
super.onCreate( sis, new HostDelegate( this, sis ) );
|
||||||
super.onCreate( sis, m_dlgt );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,13 +96,6 @@ public class PrefsActivity extends PreferenceActivity
|
||||||
return m_dlgt.onCreateDialog( id );
|
return m_dlgt.onCreateDialog( id );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPrepareDialog( int id, Dialog dialog )
|
|
||||||
{
|
|
||||||
super.onPrepareDialog( id, dialog );
|
|
||||||
m_dlgt.prepareDialog( DlgID.values()[id], dialog );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onActivityResult( int requestCode, int resultCode,
|
protected void onActivityResult( int requestCode, int resultCode,
|
||||||
Intent data )
|
Intent data )
|
||||||
|
@ -163,11 +156,4 @@ public class PrefsActivity extends PreferenceActivity
|
||||||
public void addFragment( XWFragment fragment, Bundle extras ) { Assert.fail(); }
|
public void addFragment( XWFragment fragment, Bundle extras ) { Assert.fail(); }
|
||||||
public void addFragmentForResult( XWFragment fragment, Bundle extras,
|
public void addFragmentForResult( XWFragment fragment, Bundle extras,
|
||||||
RequestCode code ) { Assert.fail(); }
|
RequestCode code ) { Assert.fail(); }
|
||||||
public void show( DialogFragment fragment )
|
|
||||||
{
|
|
||||||
// This can't work right now because PrefsActivity doesn't inherit
|
|
||||||
// from anything that can show fragments. So I need to convert to the
|
|
||||||
// newer preferences framework too. :-(
|
|
||||||
Assert.fail();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,65 +75,63 @@ public class PrefsDelegate extends DelegateBase
|
||||||
|
|
||||||
protected Dialog onCreateDialog( int id )
|
protected Dialog onCreateDialog( int id )
|
||||||
{
|
{
|
||||||
Dialog dialog = super.onCreateDialog( id );
|
DialogInterface.OnClickListener lstnr = null;
|
||||||
if ( null == dialog ) {
|
int confirmID = 0;
|
||||||
DialogInterface.OnClickListener lstnr = null;
|
|
||||||
int confirmID = 0;
|
|
||||||
|
|
||||||
switch( DlgID.values()[id] ) {
|
switch( DlgID.values()[id] ) {
|
||||||
case REVERT_COLORS:
|
case REVERT_COLORS:
|
||||||
confirmID = R.string.confirm_revert_colors;
|
confirmID = R.string.confirm_revert_colors;
|
||||||
lstnr = new DialogInterface.OnClickListener() {
|
lstnr = new DialogInterface.OnClickListener() {
|
||||||
public void onClick( DialogInterface dlg, int item ) {
|
public void onClick( DialogInterface dlg, int item ) {
|
||||||
PrefsDelegate self = (PrefsDelegate)curThis();
|
PrefsDelegate self = (PrefsDelegate)curThis();
|
||||||
SharedPreferences sp = self.getSharedPreferences();
|
SharedPreferences sp = self.getSharedPreferences();
|
||||||
SharedPreferences.Editor editor = sp.edit();
|
SharedPreferences.Editor editor = sp.edit();
|
||||||
int[] colorKeys = {
|
int[] colorKeys = {
|
||||||
R.string.key_player0,
|
R.string.key_player0,
|
||||||
R.string.key_player1,
|
R.string.key_player1,
|
||||||
R.string.key_player2,
|
R.string.key_player2,
|
||||||
R.string.key_player3,
|
R.string.key_player3,
|
||||||
R.string.key_bonus_l2x,
|
R.string.key_bonus_l2x,
|
||||||
R.string.key_bonus_l3x,
|
R.string.key_bonus_l3x,
|
||||||
R.string.key_bonus_w2x,
|
R.string.key_bonus_w2x,
|
||||||
R.string.key_bonus_w3x,
|
R.string.key_bonus_w3x,
|
||||||
R.string.key_tile_back,
|
R.string.key_tile_back,
|
||||||
R.string.key_clr_crosshairs,
|
R.string.key_clr_crosshairs,
|
||||||
R.string.key_empty,
|
R.string.key_empty,
|
||||||
R.string.key_background,
|
R.string.key_background,
|
||||||
R.string.key_clr_bonushint,
|
R.string.key_clr_bonushint,
|
||||||
};
|
};
|
||||||
for ( int colorKey : colorKeys ) {
|
for ( int colorKey : colorKeys ) {
|
||||||
editor.remove( getString(colorKey) );
|
editor.remove( getString(colorKey) );
|
||||||
}
|
|
||||||
editor.commit();
|
|
||||||
self.relaunch();
|
|
||||||
}
|
}
|
||||||
};
|
editor.commit();
|
||||||
break;
|
self.relaunch();
|
||||||
case REVERT_ALL:
|
}
|
||||||
confirmID = R.string.confirm_revert_all;
|
};
|
||||||
lstnr = new DialogInterface.OnClickListener() {
|
break;
|
||||||
public void onClick( DialogInterface dlg, int item ) {
|
case REVERT_ALL:
|
||||||
PrefsDelegate self = (PrefsDelegate)curThis();
|
confirmID = R.string.confirm_revert_all;
|
||||||
SharedPreferences sp = self.getSharedPreferences();
|
lstnr = new DialogInterface.OnClickListener() {
|
||||||
SharedPreferences.Editor editor = sp.edit();
|
public void onClick( DialogInterface dlg, int item ) {
|
||||||
editor.clear();
|
PrefsDelegate self = (PrefsDelegate)curThis();
|
||||||
editor.commit();
|
SharedPreferences sp = self.getSharedPreferences();
|
||||||
self.relaunch();
|
SharedPreferences.Editor editor = sp.edit();
|
||||||
}
|
editor.clear();
|
||||||
};
|
editor.commit();
|
||||||
break;
|
self.relaunch();
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if ( null == dialog && null != lstnr ) {
|
Dialog dialog = null;
|
||||||
dialog = makeAlertBuilder()
|
if ( null != lstnr ) {
|
||||||
.setTitle( R.string.query_title )
|
dialog = makeAlertBuilder()
|
||||||
.setMessage( confirmID )
|
.setTitle( R.string.query_title )
|
||||||
.setPositiveButton( android.R.string.ok, lstnr )
|
.setMessage( confirmID )
|
||||||
.setNegativeButton( android.R.string.cancel, null )
|
.setPositiveButton( android.R.string.ok, lstnr )
|
||||||
.create();
|
.setNegativeButton( android.R.string.cancel, null )
|
||||||
}
|
.create();
|
||||||
}
|
}
|
||||||
return dialog;
|
return dialog;
|
||||||
}
|
}
|
||||||
|
@ -154,13 +152,13 @@ public class PrefsDelegate extends DelegateBase
|
||||||
Button button = (Button)findViewById( R.id.revert_colors );
|
Button button = (Button)findViewById( R.id.revert_colors );
|
||||||
button.setOnClickListener( new View.OnClickListener() {
|
button.setOnClickListener( new View.OnClickListener() {
|
||||||
public void onClick( View v ) {
|
public void onClick( View v ) {
|
||||||
curThis().showDialog( DlgID.REVERT_COLORS );
|
showDialog( DlgID.REVERT_COLORS );
|
||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
button = (Button)findViewById( R.id.revert_all );
|
button = (Button)findViewById( R.id.revert_all );
|
||||||
button.setOnClickListener(new View.OnClickListener() {
|
button.setOnClickListener(new View.OnClickListener() {
|
||||||
public void onClick( View v ) {
|
public void onClick( View v ) {
|
||||||
curThis().showDialog( DlgID.REVERT_ALL );
|
showDialog( DlgID.REVERT_ALL );
|
||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
|
|
||||||
|
@ -365,6 +363,13 @@ public class PrefsDelegate extends DelegateBase
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void showDialog( DlgID dlgID )
|
||||||
|
{
|
||||||
|
if ( !m_activity.isFinishing() ) {
|
||||||
|
m_activity.showDialog( dlgID.ordinal() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void hideStuff()
|
private void hideStuff()
|
||||||
{
|
{
|
||||||
if ( !Utils.isGSMPhone( m_activity ) || Perms23.haveNativePerms() ) {
|
if ( !Utils.isGSMPhone( m_activity ) || Perms23.haveNativePerms() ) {
|
||||||
|
|
|
@ -122,24 +122,23 @@ public class RelayInviteDelegate extends InviteDelegate {
|
||||||
@Override
|
@Override
|
||||||
protected void onBarButtonClicked( int id )
|
protected void onBarButtonClicked( int id )
|
||||||
{
|
{
|
||||||
switch( id ) {
|
// switch( id ) {
|
||||||
case R.id.button_relay_add:
|
// case R.id.button_relay_add:
|
||||||
Utils.notImpl( m_activity );
|
// Utils.notImpl( m_activity );
|
||||||
break;
|
// break;
|
||||||
case R.id.manual_add_button:
|
// case R.id.manual_add_button:
|
||||||
showDialog( DlgID.GET_NUMBER );
|
// showDialog( DlgID.GET_NUMBER );
|
||||||
break;
|
// break;
|
||||||
case R.id.button_clear:
|
// case R.id.button_clear:
|
||||||
Utils.notImpl( m_activity );
|
// Utils.notImpl( m_activity );
|
||||||
// int count = getChecked().size();
|
// // int count = getChecked().size();
|
||||||
// String msg = getQuantityString( R.plurals.confirm_clear_sms_fmt,
|
// // String msg = getQuantityString( R.plurals.confirm_clear_sms_fmt,
|
||||||
// count, count );
|
// // count, count );
|
||||||
// makeConfirmThenBuilder( msg, Action.CLEAR_ACTION ).show();
|
// // makeConfirmThenBuilder( msg, Action.CLEAR_ACTION ).show();
|
||||||
break;
|
// break;
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// protected void onSaveInstanceState( Bundle outState )
|
// protected void onSaveInstanceState( Bundle outState )
|
||||||
// {
|
// {
|
||||||
// outState.putString( SAVE_NAME, m_pendingName );
|
// outState.putString( SAVE_NAME, m_pendingName );
|
||||||
|
|
|
@ -125,7 +125,7 @@ public class SMSInviteDelegate extends InviteDelegate {
|
||||||
if ( Activity.RESULT_CANCELED != resultCode && data != null ) {
|
if ( Activity.RESULT_CANCELED != resultCode && data != null ) {
|
||||||
switch ( requestCode ) {
|
switch ( requestCode ) {
|
||||||
case GET_CONTACT:
|
case GET_CONTACT:
|
||||||
post ( new Runnable() {
|
post( new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
addPhoneNumbers( data );
|
addPhoneNumbers( data );
|
||||||
|
|
|
@ -192,31 +192,6 @@ public class XWActivity extends FragmentActivity
|
||||||
return m_dlgt.onContextItemSelected( item );
|
return m_dlgt.onContextItemSelected( item );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Dialog onCreateDialog( int id )
|
|
||||||
{
|
|
||||||
Dialog dialog = super.onCreateDialog( id );
|
|
||||||
Assert.assertNull( dialog );
|
|
||||||
if ( null == dialog ) {
|
|
||||||
dialog = m_dlgt.onCreateDialog( id );
|
|
||||||
}
|
|
||||||
return dialog;
|
|
||||||
} // onCreateDialog
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPrepareDialog( int id, Dialog dialog )
|
|
||||||
{
|
|
||||||
super.onPrepareDialog( id, dialog );
|
|
||||||
m_dlgt.prepareDialog( DlgID.values()[id], dialog );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onConfigurationChanged( Configuration newConfig )
|
|
||||||
{
|
|
||||||
m_dlgt.orientationChanged();
|
|
||||||
super.onConfigurationChanged( newConfig );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onActivityResult( int requestCode, int resultCode,
|
protected void onActivityResult( int requestCode, int resultCode,
|
||||||
Intent data )
|
Intent data )
|
||||||
|
|
|
@ -92,7 +92,6 @@
|
||||||
<string name="key_notagain_sync">key_notagain_sync</string>
|
<string name="key_notagain_sync">key_notagain_sync</string>
|
||||||
<!-- <string name="key_notagain_sms_ready">key_notagain_sms_ready</string> -->
|
<!-- <string name="key_notagain_sms_ready">key_notagain_sms_ready</string> -->
|
||||||
<string name="key_notagain_newselect">key_notagain_newselect</string>
|
<string name="key_notagain_newselect">key_notagain_newselect</string>
|
||||||
<string name="key_notagain_dualpane">key_notagain_dualpane</string>
|
|
||||||
<string name="key_notagain_backclears">key_notagain_backclears</string>
|
<string name="key_notagain_backclears">key_notagain_backclears</string>
|
||||||
<string name="key_notagain_chat">key_notagain_chat</string>
|
<string name="key_notagain_chat">key_notagain_chat</string>
|
||||||
<string name="key_notagain_relay">key_notagain_relay</string>
|
<string name="key_notagain_relay">key_notagain_relay</string>
|
||||||
|
|
|
@ -2609,14 +2609,6 @@
|
||||||
|
|
||||||
<string name="no_invites">This game has sent no invitations</string>
|
<string name="no_invites">This game has sent no invitations</string>
|
||||||
|
|
||||||
<string name="invite_dualpane">This new version of CrossWords lets
|
|
||||||
larger-screened devices like yours view two panes (e.g. Games List
|
|
||||||
and Board) side-by-side. You\'ll notice this when your device is
|
|
||||||
horizontal; when it\'s vertical there\'s no change.\n\n
|
|
||||||
|
|
||||||
I hope you like it. If you don\'t you can disable it below or in the
|
|
||||||
Appearance section of App Settings.</string>
|
|
||||||
|
|
||||||
<string name="disable_dualpane">Disable side-by-side</string>
|
<string name="disable_dualpane">Disable side-by-side</string>
|
||||||
<string name="after_restart">This change will take effect after you
|
<string name="after_restart">This change will take effect after you
|
||||||
restart CrossWords.</string>
|
restart CrossWords.</string>
|
||||||
|
|
20
xwords4/dawg/English/Makefile.BasEnglishBowd
Normal file
20
xwords4/dawg/English/Makefile.BasEnglishBowd
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
# -*- mode: makefile; compile-command: "make -f Makefile.top5000Bowd"; -*-
|
||||||
|
# Copyright 2017 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.
|
||||||
|
|
||||||
|
DIRTY_LIST=dirtywords.txt
|
||||||
|
include Makefile.BasEnglish
|
19
xwords4/dawg/English/Makefile.CollegeEngBowd
Normal file
19
xwords4/dawg/English/Makefile.CollegeEngBowd
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
# -*- mode: makefile; compile-command: "make -f Makefile.CollegeEngBowd"; -*-
|
||||||
|
# Copyright 2017 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.
|
||||||
|
|
||||||
|
DIRTY_LIST=dirtywords.txt
|
||||||
|
include Makefile.CollegeEng
|
20
xwords4/dawg/English/Makefile.top5000Bowd
Normal file
20
xwords4/dawg/English/Makefile.top5000Bowd
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
# -*- mode: makefile; compile-command: "make -f Makefile.top5000Bowd"; -*-
|
||||||
|
# Copyright 2017 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.
|
||||||
|
|
||||||
|
DIRTY_LIST=dirtywords.txt
|
||||||
|
include Makefile.top5000
|
204
xwords4/dawg/English/dirtywords.txt
Normal file
204
xwords4/dawg/English/dirtywords.txt
Normal file
|
@ -0,0 +1,204 @@
|
||||||
|
ABO
|
||||||
|
ABOS
|
||||||
|
ARSE
|
||||||
|
ASSHOLE
|
||||||
|
ASSHOLES
|
||||||
|
BADASS
|
||||||
|
BADASSED
|
||||||
|
BADASSES
|
||||||
|
BALLSIER
|
||||||
|
BALLSIEST
|
||||||
|
BALLSY
|
||||||
|
BAZOOMS
|
||||||
|
BLOWJOB
|
||||||
|
BLOWJOBS
|
||||||
|
BOCHE
|
||||||
|
BOCHES
|
||||||
|
BOOBIE
|
||||||
|
BUBBIES
|
||||||
|
BUBBY
|
||||||
|
BUCKRA
|
||||||
|
BUCKRAS
|
||||||
|
BULLSHIT
|
||||||
|
BULLSHITS
|
||||||
|
BULLSHITTED
|
||||||
|
BULLSHITTING
|
||||||
|
CLIT
|
||||||
|
COLOREDS
|
||||||
|
COMSYMP
|
||||||
|
COMSYMPS
|
||||||
|
CRAPPER
|
||||||
|
CRAPPERS
|
||||||
|
CUNT
|
||||||
|
CUNTS
|
||||||
|
DAGO
|
||||||
|
DAGOES
|
||||||
|
DAGOS
|
||||||
|
DARKEY
|
||||||
|
DARKEYS
|
||||||
|
DARKIE
|
||||||
|
DARKIES
|
||||||
|
DARKY
|
||||||
|
DICKED
|
||||||
|
DICKING
|
||||||
|
DIKEY
|
||||||
|
DYKEY
|
||||||
|
FAGGOTRIES
|
||||||
|
FAGGOTRY
|
||||||
|
FAGGOTY
|
||||||
|
FAGGY
|
||||||
|
FART
|
||||||
|
FARTED
|
||||||
|
FARTING
|
||||||
|
FARTS
|
||||||
|
FATSO
|
||||||
|
FATSOES
|
||||||
|
FATSOS
|
||||||
|
FRIG
|
||||||
|
FRIGGED
|
||||||
|
FRIGGING
|
||||||
|
FRIGS
|
||||||
|
FUCK
|
||||||
|
FUCKED
|
||||||
|
FUCKER
|
||||||
|
FUCKERS
|
||||||
|
FUCKING
|
||||||
|
FUCKS
|
||||||
|
FUCKUP
|
||||||
|
FUCKUPS
|
||||||
|
GANGBANG
|
||||||
|
GANGBANGS
|
||||||
|
GOY
|
||||||
|
GOYIM
|
||||||
|
GOYISH
|
||||||
|
GOYS
|
||||||
|
GRINGO
|
||||||
|
GRINGOS
|
||||||
|
HAOLE
|
||||||
|
HAOLES
|
||||||
|
HEBE
|
||||||
|
HEBES
|
||||||
|
HONKEY
|
||||||
|
HONKEYS
|
||||||
|
HONKIE
|
||||||
|
HONKIES
|
||||||
|
HONKY
|
||||||
|
HUNKIES
|
||||||
|
JESUIT
|
||||||
|
JESUITIC
|
||||||
|
JESUITRIES
|
||||||
|
JESUITRY
|
||||||
|
JESUITS
|
||||||
|
JEW
|
||||||
|
JEWED
|
||||||
|
JEWING
|
||||||
|
JEWS
|
||||||
|
JIGABOO
|
||||||
|
JIGABOOS
|
||||||
|
JISM
|
||||||
|
JISMS
|
||||||
|
KIKE
|
||||||
|
KIKES
|
||||||
|
LEZ
|
||||||
|
LEZES
|
||||||
|
LEZZIE
|
||||||
|
LEZZIES
|
||||||
|
LEZZY
|
||||||
|
LIBBER
|
||||||
|
LIBBERS
|
||||||
|
MERDE
|
||||||
|
MERDES
|
||||||
|
MICK
|
||||||
|
MICKS
|
||||||
|
NANCE
|
||||||
|
NANCES
|
||||||
|
NANCIES
|
||||||
|
NANCY
|
||||||
|
NIGGER
|
||||||
|
NIGGERS
|
||||||
|
NITCHIE
|
||||||
|
NITCHIES
|
||||||
|
NOOKIES
|
||||||
|
NOOKY
|
||||||
|
OFAY
|
||||||
|
OFAYS
|
||||||
|
PAPIST
|
||||||
|
PAPISTIC
|
||||||
|
PAPISTRIES
|
||||||
|
PAPISTRY
|
||||||
|
PAPISTS
|
||||||
|
PEED
|
||||||
|
PEEING
|
||||||
|
PISS
|
||||||
|
PISSED
|
||||||
|
PISSER
|
||||||
|
PISSERS
|
||||||
|
PISSES
|
||||||
|
PISSING
|
||||||
|
POM
|
||||||
|
POMMIE
|
||||||
|
POMMIES
|
||||||
|
POMMY
|
||||||
|
POMS
|
||||||
|
POOFS
|
||||||
|
POOFTAH
|
||||||
|
POOFTAHS
|
||||||
|
POOFTER
|
||||||
|
POOFTERS
|
||||||
|
POOFY
|
||||||
|
POOVE
|
||||||
|
POOVES
|
||||||
|
POPERIES
|
||||||
|
POPERY
|
||||||
|
POPISH
|
||||||
|
POPISHLY
|
||||||
|
REDNECK
|
||||||
|
REDNECKS
|
||||||
|
REDSKIN
|
||||||
|
REDSKINS
|
||||||
|
SHAT
|
||||||
|
SHEENEY
|
||||||
|
SHEENEYS
|
||||||
|
SHEENIE
|
||||||
|
SHEENIES
|
||||||
|
SHEGETZ
|
||||||
|
SHICKSA
|
||||||
|
SHICKSAS
|
||||||
|
SHIKSA
|
||||||
|
SHIKSAS
|
||||||
|
SHIKSE
|
||||||
|
SHIKSES
|
||||||
|
SHIT
|
||||||
|
SHITHEAD
|
||||||
|
SHITHEADS
|
||||||
|
SHITS
|
||||||
|
SHITTED
|
||||||
|
SHITTIER
|
||||||
|
SHITTIEST
|
||||||
|
SHITTING
|
||||||
|
SHITTY
|
||||||
|
SHKOTZIM
|
||||||
|
SKIMO
|
||||||
|
SKIMOS
|
||||||
|
SPIC
|
||||||
|
SPICK
|
||||||
|
SPICKS
|
||||||
|
SPICS
|
||||||
|
SPIK
|
||||||
|
SPIKS
|
||||||
|
TOMMED
|
||||||
|
TOMMING
|
||||||
|
TURD
|
||||||
|
TURDS
|
||||||
|
TWAT
|
||||||
|
TWATS
|
||||||
|
WETBACK
|
||||||
|
WETBACKS
|
||||||
|
WHITEYS
|
||||||
|
WHITIES
|
||||||
|
WOG
|
||||||
|
WOGS
|
||||||
|
WOP
|
||||||
|
WOPS
|
||||||
|
YID
|
||||||
|
YIDS
|
|
@ -16,6 +16,14 @@
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
|
ifneq ($(DIRTY_LIST),)
|
||||||
|
BOWDLERIZER = ../remove-dirty.py $(DIRTY_LIST)
|
||||||
|
XWLANG := $(XWLANG)_BOWD
|
||||||
|
DICTNOTE := "$(DICTNOTE) (Bowdlerized)"
|
||||||
|
else
|
||||||
|
BOWDLERIZER = cat
|
||||||
|
endif
|
||||||
|
|
||||||
XWLANG := $(XWLANG)_
|
XWLANG := $(XWLANG)_
|
||||||
|
|
||||||
FRANK_EXT = xwd
|
FRANK_EXT = xwd
|
||||||
|
@ -242,7 +250,7 @@ dawg$(XWLANG)%.stamp: $(XWLANG)Main.dict.gz $(DICT2DAWG) table.bin ../Makefile.l
|
||||||
start=$$(echo $@ | sed -e 's/dawg$(XWLANG)\([0-9]*\)to[0-9]*.stamp/\1/'); \
|
start=$$(echo $@ | sed -e 's/dawg$(XWLANG)\([0-9]*\)to[0-9]*.stamp/\1/'); \
|
||||||
end=$$(echo $@ | sed -e 's/dawg$(XWLANG)[0-9]*to\([0-9]*\).stamp/\1/'); \
|
end=$$(echo $@ | sed -e 's/dawg$(XWLANG)[0-9]*to\([0-9]*\).stamp/\1/'); \
|
||||||
echo $${start} and $${end}; \
|
echo $${start} and $${end}; \
|
||||||
zcat $< | $(DICT2DAWG) $(DICT2DAWGARGS) $(TABLE_ARG) table.bin -b 28000 \
|
zcat $< | $(BOWDLERIZER) | $(DICT2DAWG) $(DICT2DAWGARGS) $(TABLE_ARG) table.bin -b 28000 \
|
||||||
-ob dawg$(XWLANG)$* $(ENCP) \
|
-ob dawg$(XWLANG)$* $(ENCP) \
|
||||||
-sn $(XWLANG)StartLoc.bin -min $${start} -max $${end} \
|
-sn $(XWLANG)StartLoc.bin -min $${start} -max $${end} \
|
||||||
-wc $(XWLANG)$*_wordcount.bin $(FORCE_4) -ns $(XWLANG)$*_nodesize.bin
|
-wc $(XWLANG)$*_wordcount.bin $(FORCE_4) -ns $(XWLANG)$*_nodesize.bin
|
||||||
|
@ -295,9 +303,6 @@ $(XWLANG)%_newheader.bin: $(XWLANG)%_wordcount.bin $(XWLANG)%_note.bin $(XWLANG)
|
||||||
perl -e "print pack(\"n\",$$SIZ)" > $@
|
perl -e "print pack(\"n\",$$SIZ)" > $@
|
||||||
cat $+ >> $@
|
cat $+ >> $@
|
||||||
|
|
||||||
%.dict: %.dict.gz
|
|
||||||
zcat $< > $@
|
|
||||||
|
|
||||||
# clean this up....
|
# clean this up....
|
||||||
../dict2dawg: ../dict2dawg.cpp
|
../dict2dawg: ../dict2dawg.cpp
|
||||||
g++ -DDEBUG -O0 -g -Wall -o $@ $<
|
g++ -DDEBUG -O0 -g -Wall -o $@ $<
|
||||||
|
|
18
xwords4/dawg/remove-dirty.py
Executable file
18
xwords4/dawg/remove-dirty.py
Executable file
|
@ -0,0 +1,18 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
# Invoked with path to bad words list as single parameter, and with a
|
||||||
|
# stream of words via stdin, loads the bad words into a map and for
|
||||||
|
# every word in stdin echos it to stdout IFF it's not in the map.
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
dirtyMap = {}
|
||||||
|
dirtyList = sys.argv[1]
|
||||||
|
for f in open(dirtyList):
|
||||||
|
dirtyMap[f] = True
|
||||||
|
|
||||||
|
for word in sys.stdin:
|
||||||
|
if word in dirtyMap:
|
||||||
|
sys.stderr.write( sys.argv[0] + ": dropping: " + word )
|
||||||
|
else:
|
||||||
|
sys.stdout.write( word )
|
Loading…
Add table
Reference in a new issue