| 40 |
40 |
|
| 41 |
41 |
import org.distorted.dialogs.RubikDialogUpdates;
|
| 42 |
42 |
import org.distorted.external.RubikNetwork;
|
|
43 |
import org.distorted.external.RubikScores;
|
| 43 |
44 |
import org.distorted.external.RubikUpdates;
|
| 44 |
45 |
|
| 45 |
46 |
import org.distorted.main.R;
|
| ... | ... | |
| 70 |
71 |
private PopupWindow mObjectPopup, mMenuPopup;
|
| 71 |
72 |
private WeakReference<RubikActivity> mWeakAct;
|
| 72 |
73 |
private TextView mBubbleUpdates;
|
|
74 |
private Button[] mLevel;
|
| 73 |
75 |
private int mObjectSize, mMenuLayoutWidth, mMenuLayoutHeight, mMenuButtonHeight, mMenuTextSize;
|
| 74 |
76 |
private int mLevelValue;
|
| 75 |
77 |
private int mColCount, mRowCount, mMaxRowCount;
|
| ... | ... | |
| 170 |
172 |
{
|
| 171 |
173 |
View popupView = mMenuPopup.getContentView();
|
| 172 |
174 |
popupView.setSystemUiVisibility(RubikActivity.FLAGS);
|
|
175 |
setupLevelColors();
|
| 173 |
176 |
displayPopup(act,view,mMenuPopup,mMenuLayoutWidth,mMenuLayoutHeight,(int)(-mMenuLayoutWidth/2 + width/6),0);
|
| 174 |
177 |
}
|
| 175 |
178 |
}
|
| ... | ... | |
| 235 |
238 |
if( type==MainEntry.TYPE_OBJECT )
|
| 236 |
239 |
{
|
| 237 |
240 |
int ordinal = mainEntry.getOrdinal();
|
| 238 |
|
RubikObjectList.setCurrObject(act,ordinal);
|
|
241 |
RubikObjectList.setCurrObject(ordinal);
|
| 239 |
242 |
act.changeObject(ordinal,true);
|
| 240 |
|
if( mMenuPopup!=null ) adjustLevels(act);
|
|
243 |
if( mMenuPopup!=null ) setupLevelColors();
|
| 241 |
244 |
mMovesController.clearMoves(act);
|
| 242 |
245 |
}
|
| 243 |
246 |
else if( type==MainEntry.TYPE_CREATOR )
|
| ... | ... | |
| 458 |
461 |
levels.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
|
| 459 |
462 |
|
| 460 |
463 |
setupLevelButtons(act,layout,padding);
|
|
464 |
setupLevelColors();
|
| 461 |
465 |
}
|
| 462 |
466 |
|
| 463 |
467 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
| ... | ... | |
| 469 |
473 |
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(sizeW,sizeH);
|
| 470 |
474 |
params.setMargins(padding/2,0,padding/2,0);
|
| 471 |
475 |
|
| 472 |
|
Button level1 = layout.findViewById(R.id.level1);
|
| 473 |
|
level1.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
|
| 474 |
|
level1.setLayoutParams(params);
|
| 475 |
|
setupLevelButton(act,level1,1);
|
| 476 |
|
Button level2 = layout.findViewById(R.id.level2);
|
| 477 |
|
level2.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
|
| 478 |
|
level2.setLayoutParams(params);
|
| 479 |
|
setupLevelButton(act,level2,2);
|
| 480 |
|
Button level3 = layout.findViewById(R.id.level3);
|
| 481 |
|
level3.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
|
| 482 |
|
level3.setLayoutParams(params);
|
| 483 |
|
setupLevelButton(act,level3,3);
|
| 484 |
|
Button level4 = layout.findViewById(R.id.level4);
|
| 485 |
|
level4.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
|
| 486 |
|
level4.setLayoutParams(params);
|
| 487 |
|
setupLevelButton(act,level4,4);
|
| 488 |
|
Button level5 = layout.findViewById(R.id.level5);
|
| 489 |
|
level5.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
|
| 490 |
|
level5.setLayoutParams(params);
|
| 491 |
|
setupLevelButton(act,level5,5);
|
| 492 |
|
Button level6 = layout.findViewById(R.id.level6);
|
| 493 |
|
level6.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
|
| 494 |
|
level6.setLayoutParams(params);
|
| 495 |
|
setupLevelButton(act,level6,6);
|
| 496 |
|
Button level7 = layout.findViewById(R.id.level7);
|
| 497 |
|
level7.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
|
| 498 |
|
level7.setLayoutParams(params);
|
| 499 |
|
setupLevelButton(act,level7,7);
|
| 500 |
|
Button level8 = layout.findViewById(R.id.level8);
|
| 501 |
|
level8.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
|
| 502 |
|
level8.setLayoutParams(params);
|
| 503 |
|
setupLevelButton(act,level8,8);
|
| 504 |
|
Button levelM = layout.findViewById(R.id.levelM);
|
| 505 |
|
levelM.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
|
| 506 |
|
levelM.setLayoutParams(params);
|
| 507 |
|
setupLevelButton(act,levelM,9);
|
| 508 |
|
}
|
|
476 |
mLevel = new Button[LEVELS_SHOWN+1];
|
| 509 |
477 |
|
| 510 |
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
478 |
mLevel[0] = layout.findViewById(R.id.level1);
|
|
479 |
mLevel[1] = layout.findViewById(R.id.level2);
|
|
480 |
mLevel[2] = layout.findViewById(R.id.level3);
|
|
481 |
mLevel[3] = layout.findViewById(R.id.level4);
|
|
482 |
mLevel[4] = layout.findViewById(R.id.level5);
|
|
483 |
mLevel[5] = layout.findViewById(R.id.level6);
|
|
484 |
mLevel[6] = layout.findViewById(R.id.level7);
|
|
485 |
mLevel[7] = layout.findViewById(R.id.level8);
|
|
486 |
mLevel[8] = layout.findViewById(R.id.levelM);
|
| 511 |
487 |
|
| 512 |
|
private void setupLevelButton(RubikActivity act, Button button, int level)
|
| 513 |
|
{
|
| 514 |
|
button.setOnClickListener( new View.OnClickListener()
|
|
488 |
for(int i=0; i<=LEVELS_SHOWN; i++)
|
|
489 |
{
|
|
490 |
final int ii = i;
|
|
491 |
mLevel[i].setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
|
|
492 |
mLevel[i].setLayoutParams(params);
|
|
493 |
mLevel[i].setOnClickListener( new View.OnClickListener()
|
| 515 |
494 |
{
|
| 516 |
495 |
@Override
|
| 517 |
496 |
public void onClick(View v)
|
| ... | ... | |
| 524 |
503 |
|
| 525 |
504 |
int currObject = RubikObjectList.getCurrObject();
|
| 526 |
505 |
RubikObject object = RubikObjectList.getObject(currObject);
|
| 527 |
|
final int scrambles = level<=LEVELS_SHOWN ? level : (object==null ? 0 : object.getNumScramble());
|
| 528 |
|
|
| 529 |
|
mLevelValue = level;
|
|
506 |
final int scrambles = ii<LEVELS_SHOWN ? ii+1 : (object==null ? 0 : object.getNumScramble());
|
|
507 |
mLevelValue = ii+1;
|
| 530 |
508 |
mShouldReactToEndOfScrambling = true;
|
| 531 |
509 |
control.scrambleObject(scrambles);
|
| 532 |
510 |
}
|
| 533 |
511 |
}
|
| 534 |
512 |
});
|
|
513 |
}
|
|
514 |
}
|
|
515 |
|
|
516 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
517 |
|
|
518 |
private void setupLevelColors()
|
|
519 |
{
|
|
520 |
int currObject = RubikObjectList.getCurrObject();
|
|
521 |
int dbLevel = RubikObjectList.getDBLevel(currObject);
|
|
522 |
RubikScores scores = RubikScores.getInstance();
|
|
523 |
|
|
524 |
for(int i=0; i<=LEVELS_SHOWN; i++)
|
|
525 |
{
|
|
526 |
int level = i<LEVELS_SHOWN ? i : dbLevel;
|
|
527 |
boolean isSolved = scores.isSolved(currObject,level);
|
|
528 |
int icon = isSolved ? R.drawable.ui_solved : R.drawable.ui_notsolved;
|
|
529 |
mLevel[i].setCompoundDrawablesWithIntrinsicBounds(icon,0,0,0);
|
|
530 |
}
|
| 535 |
531 |
}
|
| 536 |
532 |
|
| 537 |
533 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
| ... | ... | |
| 561 |
557 |
|
| 562 |
558 |
public void restorePreferences(SharedPreferences preferences)
|
| 563 |
559 |
{
|
| 564 |
|
mLevelValue = preferences.getInt("play_LevelValue", 0);
|
| 565 |
|
}
|
| 566 |
|
|
| 567 |
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
| 568 |
|
|
| 569 |
|
public void setCurrObject(RubikActivity act)
|
| 570 |
|
{
|
| 571 |
|
if( mMenuPopup!=null ) adjustLevels(act);
|
|
560 |
mLevelValue = preferences.getInt("play_LevelValue", 0);
|
| 572 |
561 |
}
|
| 573 |
562 |
|
| 574 |
563 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
| ... | ... | |
| 616 |
605 |
}
|
| 617 |
606 |
}
|
| 618 |
607 |
|
| 619 |
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
| 620 |
|
/*
|
| 621 |
|
private void adjustSolvedIcons()
|
| 622 |
|
{
|
| 623 |
|
if( mPlayLayout!=null )
|
| 624 |
|
{
|
| 625 |
|
int currObject = RubikObjectList.getCurrObject();
|
| 626 |
|
int dbLevel = RubikObjectList.getDBLevel(currObject);
|
| 627 |
|
int numLevel= Math.min(dbLevel, LEVELS_SHOWN)+1;
|
| 628 |
|
RubikScores scores = RubikScores.getInstance();
|
| 629 |
|
|
| 630 |
|
for(int i=0; i<numLevel; i++)
|
| 631 |
|
{
|
| 632 |
|
int level = i<numLevel-1 ? i : dbLevel;
|
| 633 |
|
Button button = (Button)mPlayLayout.getChildAt(i);
|
| 634 |
|
boolean isSolved = i>0 ? scores.isSolved(currObject, level-1) : hasBeenPlayed();
|
| 635 |
|
int icon = isSolved ? R.drawable.ui_solved : R.drawable.ui_notsolved;
|
| 636 |
|
button.setCompoundDrawablesWithIntrinsicBounds(icon,0,0,0);
|
| 637 |
|
}
|
| 638 |
|
}
|
| 639 |
|
}
|
| 640 |
|
*/
|
| 641 |
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
| 642 |
|
|
| 643 |
|
private void adjustLevels(final RubikActivity act)
|
| 644 |
|
{
|
| 645 |
|
/*
|
| 646 |
|
int currObject = RubikObjectList.getCurrObject();
|
| 647 |
|
int dbLevel = RubikObjectList.getDBLevel(currObject);
|
| 648 |
|
RubikObject object = RubikObjectList.getObject(currObject);
|
| 649 |
|
int numScrambles = object==null ? 0 : object.getNumScramble();
|
| 650 |
|
int numLevel = Math.min(dbLevel, LEVELS_SHOWN)+1;
|
| 651 |
|
String[] levels = new String[numLevel];
|
| 652 |
|
|
| 653 |
|
levels[0] = act.getString(R.string.free_play);
|
| 654 |
|
for(int i=1; i<numLevel-1; i++) levels[i] = act.getString(R.string.lv_placeholder,i);
|
| 655 |
|
levels[numLevel-1] = act.getString(R.string.level_full);
|
| 656 |
|
|
| 657 |
|
if( mLevelValue>dbLevel || mLevelValue<1 ||
|
| 658 |
|
(mLevelValue<dbLevel || mLevelValue>LEVELS_SHOWN ) ) mLevelValue=1;
|
| 659 |
|
|
| 660 |
|
float width = act.getScreenWidthInPixels();
|
| 661 |
|
int margin = (int)(width*RubikActivity.SMALL_MARGIN);
|
| 662 |
|
int padding = (int)(width*RubikActivity.PADDING);
|
| 663 |
|
int butWidth = 0;//mPlayLayoutWidth - 2*padding;
|
| 664 |
|
int butHeight= (int)mMenuItemSize;
|
| 665 |
|
int bigButH = (int)(mMenuItemSize*BIG_BUTTON) ;
|
| 666 |
|
|
| 667 |
|
LinearLayout.LayoutParams pM = new LinearLayout.LayoutParams( butWidth, butHeight );
|
| 668 |
|
pM.setMargins(margin, 0, margin, margin);
|
| 669 |
|
LinearLayout.LayoutParams pB = new LinearLayout.LayoutParams( butWidth, bigButH );
|
| 670 |
|
pB.setMargins(margin, margin, margin, 2*margin);
|
| 671 |
|
|
| 672 |
|
mPlayLayout.removeAllViews();
|
| 673 |
|
|
| 674 |
|
for(int i=0; i<numLevel; i++)
|
| 675 |
|
{
|
| 676 |
|
final int level = i<numLevel-1 ? i : dbLevel;
|
| 677 |
|
final int scrambles = i<numLevel-1 ? i : numScrambles;
|
| 678 |
|
Button button = new Button(act);
|
| 679 |
|
button.setLayoutParams(i==0 ? pB : (i==numLevel-1 ? pB : pM));
|
| 680 |
|
button.setText(levels[i]);
|
| 681 |
|
button.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
|
| 682 |
|
|
| 683 |
|
button.setOnClickListener( new View.OnClickListener()
|
| 684 |
|
{
|
| 685 |
|
@Override
|
| 686 |
|
public void onClick(View v)
|
| 687 |
|
{
|
| 688 |
|
ObjectControl control = act.getControl();
|
| 689 |
|
|
| 690 |
|
if(control.isUINotBlocked())
|
| 691 |
|
{
|
| 692 |
|
if( mPlayPopup!=null ) mPlayPopup.dismiss();
|
| 693 |
|
|
| 694 |
|
if( level>0 )
|
| 695 |
|
{
|
| 696 |
|
mLevelValue = level;
|
| 697 |
|
mShouldReactToEndOfScrambling = true;
|
| 698 |
|
control.scrambleObject(scrambles);
|
| 699 |
|
}
|
| 700 |
|
else
|
| 701 |
|
{
|
| 702 |
|
addToPlayedObjects();
|
| 703 |
|
mShouldReactToEndOfScrambling = false;
|
| 704 |
|
ScreenList.switchScreen(act, ScreenList.FREE);
|
| 705 |
|
}
|
| 706 |
|
}
|
| 707 |
|
}
|
| 708 |
|
});
|
| 709 |
|
|
| 710 |
|
mPlayLayout.addView(button);
|
| 711 |
|
}
|
| 712 |
|
|
| 713 |
|
*/
|
| 714 |
|
}
|
| 715 |
|
|
| 716 |
608 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
| 717 |
609 |
|
| 718 |
610 |
public int getLevel()
|
Progress with colors in the Menu Level Buttons