Search code examples
javaandroidonsaveinstancestate

"GrallocAllocator unsupport colortype 6" when getting savedInstanceState


 GrallocAllocator unsupport colortype 6
 GrallocAllocator decode bitmap failed, reset to heapAllocator

This is the message I get. Can you tell me what I am doing wrong?

private static final String KEY_INDEX = "index";
private static final String KEY_INDEX2 = "index2";
private static final String KEY_INDEX3 = "index3";
private static final String KEY_INDEX4 = "index4";
private static final String KEY_INDEX5 = "index5";




 @Override
 protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.easy_quiz);
        correctAnswerColor = getResources().getColor(R.color.correctAnswerButton);
        incorrectAnswerColor = getResources().getColor(R.color.incorrectAnswerButton);

    if(savedInstanceState != null) {
        mCurrentIndex = savedInstanceState.getInt(KEY_INDEX, 0);

        if(savedInstanceState.getBoolean(KEY_INDEX2, false)) {
            mTrueButton.getBackground().setColorFilter(correctAnswerColor, PorterDuff.Mode.MULTIPLY);
        }

        if(savedInstanceState.getBoolean(KEY_INDEX3, false)) {
            mTrueButton.getBackground().setColorFilter(incorrectAnswerColor, PorterDuff.Mode.MULTIPLY);
        }

        if(savedInstanceState.getBoolean(KEY_INDEX4, false)) {
            mFalseButton.getBackground().setColorFilter(correctAnswerColor, PorterDuff.Mode.MULTIPLY);
        }

        if(savedInstanceState.getBoolean(KEY_INDEX5, false)) {
            mFalseButton.getBackground().setColorFilter(incorrectAnswerColor, PorterDuff.Mode.MULTIPLY);
        }
    } (...)

 @Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    Log.i(TAG, "OnSaveInstanceState");
    outState.putInt(KEY_INDEX, mCurrentIndex);
    outState.putBoolean(KEY_INDEX2, mIsTrueButtonGreen);
    outState.putBoolean(KEY_INDEX3, mIsTrueButtonRed);
    outState.putBoolean(KEY_INDEX4, mIsFalseButtonGreen);
    outState.putBoolean(KEY_INDEX5, mIsFalseButtonRed);

}

I read that to set color it is good to use getBackground.setColorFilter. Unfortunately it doesn't seem to work in this case. What should I do is the question.


Solution

  • You should modify your code baseed on this:

    private int correctAnswerColor, incorrectAnswerColor;
    private String PREFS_NAME = "test";
    private boolean isColored = false;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        correctAnswerColor = getResources().getColor(R.color.correct);
    
        //Sets color
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                findViewById(R.id.button).getBackground().setColorFilter(correctAnswerColor, PorterDuff.Mode.MULTIPLY);
                isColored = true;
            }
        });
    
    
        //Reads color
        SharedPreferences sp =  getSharedPreferences(PREFS_NAME,0 );
        isColored = sp.getBoolean("isValid", isColored);
    
        //Sets color of btt
        if(isColored) {
            findViewById(R.id.button).getBackground().setColorFilter(correctAnswerColor, PorterDuff.Mode.MULTIPLY);
        }
    }
    
    @Override
    protected void onStop() {
        super.onStop();
    
        //Defines SharedPreferences & Saves data
        SharedPreferences sp =  getSharedPreferences(PREFS_NAME,0 );
        SharedPreferences.Editor ed = sp.edit();
        ed.putBoolean("isValid", isColored);
    
        //Commits edits
        ed.commit();
    }